首页 > 其他分享 >py调用webservice array数组老是为空的问题

py调用webservice array数组老是为空的问题

时间:2024-08-01 18:17:25浏览次数:10  
标签:webservice persons py person say print import array name

python webserbice

server

import logging
from flask import Flask
from spyne.application import Application
from spyne.protocol.soap import Soap11
from spyne.server.wsgi import WsgiApplication
from werkzeug.serving import run_simple
from werkzeug.middleware.dispatcher import DispatcherMiddleware
from apps import HelloWorldService, HelloWorldService2


application = Application([HelloWorldService, HelloWorldService2],
                          'xxxxx',
                          in_protocol=Soap11(validator='lxml'),
                          out_protocol=Soap11())


wsgi_application = WsgiApplication(application)
flask_app = Flask(__name__)
application = DispatcherMiddleware(flask_app.wsgi_app, {
    'xxxxx': wsgi_application,
})


if __name__ == '__main__':

    host = '127.0.0.1'
    port = 8902
    logging.basicConfig(level=logging.DEBUG)
    # 指定日志记录器的名称,设置日志记录级别
    logging.getLogger('spyne.protocol.xml').setLevel(logging.DEBUG)
    logging.info("wsdl is at: http://localhost:8902//xxxxx?wsdl")
    run_simple(host, port, application)

然后是 apps 这是个人组织的目录架构

import json
from spyne.decorator import rpc
from spyne import ServiceBase
from spyne import Integer, Unicode, Array, ComplexModel, Iterable, String


class Person(ComplexModel):
    name = Unicode
    age = Integer


class PeopleResponse(ComplexModel):
    name = Person
    message = Unicode


# step2: 定义服务
class HelloWorldService(ServiceBase):
    @rpc(Unicode, Integer, _returns=Iterable(Unicode))
    def say_hello(self, name, times):
        for i in range(times):
            yield "Hello %s, It's the %s time to meet you." % (name, i + 1)

    @rpc(String, _returns=Iterable(Unicode))
    def say_hello_1(self, persons):
        print(f'-------say_hello_1({persons})--------')
        if not persons:
            yield 'None'
        persons = json.loads(persons)
        for person in persons:
            print('name is : %s, age is %s.' % (person["name"], person["age"]))
            yield 'name is : %s, age is %s.' % (person["name"], person["age"])


class HelloWorldService2(ServiceBase):
    @rpc(String, _returns=Iterable(Unicode))
    def say_hello_2(self, persons_array):
        print('参数', persons_array)
        if not persons_array:
            yield 'None'
        persons_array = json.loads(persons_array)
        for person in persons_array:
            yield person

    @rpc(Person, _returns=PeopleResponse)
    def say_hello_3(self, person):
        if not person:
            return {}
        else:
            # return PeopleResponse(name=People(**person))
            return {
                "name": person,
                "message": 'name is : %s, age is %s.' % (person.name, person.age)
            }

    @rpc(Array(String), _returns=Iterable(String))
    def say_hello_5(self, a_list):
        if not a_list:
            return {}
        for i in a_list:
            yield i  

client 用zeep suds不维护了


from zeep import Client

host = '127.0.0.1'
port = 8902

# 创建zeep客户端
client = Client(f'http://{host}:{port}/xxxxx?wsdl')

# 调用say_hello方法
persons = client.service.say_hello('zhangsan', 2)
print(persons)
print('-' * 50)

# 调用接受字典作为参数的方法
pers = {"name": "张三", "age": 23}  # 注意:这里使用了普通的字符串而不是Unicode字符串(在Python 3中它们是相同的)
result = client.service.say_hello_3(pers)  # 如果方法期望关键字参数,可以使用**来解包字典
print(result)
print('-' * 50)

import json
persons_list = [{'name': 'zhangsan', 'age': 23}, {'name': 'lisi', 'age': 24}]
person_str_result = client.service.say_hello_1(json.dumps(persons_list))  # 假设这是正确的方法名
print(person_str_result)
print('=' * 20)

# 调用需要stringArray的方法
persons_str_list = json.dumps(['lisicvbcvb', 'zhangsan'])
person_str_result = client.service.say_hello_2(persons_str_list)  # 假设这是正确的方法名
print(person_str_result)
print('=' * 20)


a_list = ['s', 'b', 'g']
fa = client.type_factory("ns0")
arr = fa.stringArray(a_list)
ress = client.service.say_hello_5( arr)
print(ress)

有个问题就是,client 传复杂结构的数据比如列表和字典 server端老是收到为空的参数
解决:
fa = client.type_factory("ns0")
arr = fa.stringArray(a_list)
要根据文档的参数类型进行一个转换 我看网上说会自动转换 但是没有转 不知道问题在哪 有大佬看到可以帮我解答一下 跪谢

标签:webservice,persons,py,person,say,print,import,array,name
From: https://www.cnblogs.com/nanyu/p/18337227

相关文章

  • 11:Python字符串的魔法属性2
    test='alex'v=test[2]#索引,下标,获取字符串中的某一个字符print(v,-1)test='alexsasdf'v=test[0:3]#0=<v<3print(v,-2)v1=test[0:-1]#切片print(v1,-3)v2=len(test)print(v2,-4)v3=len("我是中国人")#len获取当前字符串中由几个字符组成,python2......
  • numpy公式小总结1
    umpy.array()产生的数据可以是一维,二维乃至n维numpy.matrix() 产生的数据是严格的二维numpy.abs()计算绝对值numpy.linalg.norm()计算范数,默认计算L2范数numpy.linsapce()指定的间隔内返回均匀间隔数组numpy.maximum()计算最大值numpy.meshgrid()生成网格化数据numpy.add()......
  • 资源|Python入门必看书籍,适合零基础小白,附PDF
    小编为初学Python的朋友们汇总了7本零基础入门书籍,包括Python三剑客等,都是在编程届多年畅销的书籍,也是众多从业者的选择,全文详细介绍了书籍主要内容,有需要的宝子根据自身情况自取需要书籍PDF的宝子评论区留言哦**1、三剑客之一《Python编程从入门到实践》**推荐理由:**本......
  • webservice 的参考例子 sample
    一、参考https://blog.csdn.net/Ikaros_521/article/details/103232677二、hello.hh__hello(char*&);三、//helloclient.cpp#include"soapH.h"#include"h.nsmap"intmain(){char*s;structsoap*soap=soap_new();so......
  • webservice hello
    一、//hello.hintns__hello(std::stringname,std::string&greeting);二、//helloclient.cpp#include"soapH.h"#include"ns.nsmap"#include<string>#include<iostream>usingnamespacestd;inthello(structsoap*so......
  • Pytorch笔记|小土堆|P1-5
    Pytorch环境安装及配置1、创建conda环境,名为pytorchcondacreate-npytorchpython=3.102、在任务管理器的性能中确认显卡,是否支持CUDA。其次,确认显卡驱动,cuda9.2支持396.26以上的驱动,可以在命令行使用nvidia-smi来看自己驱动是否满足要求,如果低于396.26,可以使用各种管家更......
  • 有 Python 3 的 naoqi SDK 吗?
    我似乎找不到适用于Python3的PythonNaoQiSDK?我从参考安装页面找到的只是Python2.7:http://doc.aldebaran.com/2-8/dev/python/install_guide.html最新版本的SDK(2.8)需要Python2.7以及当我将其与Python3.7一起使用时会发生错误并且程序无法正确执行。......
  • 通过 GraalVM 在 Spring Boot 项目中运行 Python 脚本(强化学习)
    我想要完成的是通过GraalVM在SpringBoot项目中运行python脚本(在我的例子中是agent.py)。我已经安装了GraalVM(cejdk21)并给它一个路径。还在项目结构中定义并根据graalvm和graalvm的python更改了pom.xml。即使它给出了无法找到火炬模块的错误。我还有一个安装了......
  • Scrapy 框架介绍
    Scrapy是一个基于Twisted的异步处理框架,是纯Python实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活完成各种需求。我们只需要定制开发几个模块就可以轻松实现一个爬虫。架构介绍 Scrapy框架的架构,可以分为如下的几个部分。Engine,引擎,用来处理整个......
  • 单个 Scrapy 项目与多个项目
    我对如何存储所有蜘蛛感到困惑。这些蜘蛛将通过使用命令行调用和从stdin读取的项目输入ApacheNiFi来使用。我还计划让这些蜘蛛的子集在单独的网络服务器上使用scrapyrt返回单个项目结果。我需要在具有不同项目模型的许多不同项目中创建蜘蛛。它们都有相似的设置(比......