我有一个现有的Java web服务,它将访问Java对象并在处理后返回一个字节数组。它目前正被另一个Java应用程序使用,并且运行良好。
最近我计划使用Python应用程序使用相同的Java web服务;NONE";即使我正在设置与Java应用程序相同的属性值,也可以从Java Web Service进行响应。我不确定实际的根本原因是什么,但我怀疑这是由于对象类型造成的。
在调用Web服务之前,我需要将Python对象转换为Java对象吗?
下面是我的示例python代码:
from zeep import Client
from TestObject import TestObject
wsdl = "http://xxxxxxxx.com:8002/xxxx/xxxxx?WSDL"
client = Client(wsdl)
TestObject = TestObject()
TestObject.setAttribute1("1")
TestObject.setAttribute2("2")
TestObject.setAttribute3("3")
response = client.service.methodtocall(TestObject)
print(response)
我无法访问JavaWeb服务,所以我只能对Python代码进行更改。请让我知道我有什么选择。
发现zeep客户端实际上已经完成了转换工作。Zeep客户端知道对象是什么,并且已经分解为属性。所以我们只需要将属性值作为参数传入。
我们只需要提到参数名称:
response=client.service.methodtocall(属性1="1",属性2="2〃;,Attribute3=";3〃(
原因
- 很明显,发送到web服务的对象是Json的数据,所以不能直接将python对象发送到Java服务
求解
首先,使用python的api将python对象转换为json
json.dumps(your python ogject,other param...)
其次,使用json对象请求服务;
在一般情况下,您需要做的第一件事是查看web服务的API文档,以了解它所期望的内容。
如果Python-Zeep客户端已经为您解决了这个问题,我们可以推断您实际上是在与基于SOAP/WSDL的web服务交谈,因此请求和响应应该被编码为XML。Zeep通过查询服务的WSDL来确定请求和响应XML的结构,然后将您提供的请求参数映射到相应的XML。
这个问答;A列出了许多可供选择的Python库;做";肥皂。
- Python有哪些SOAP客户端库,它们的文档在哪里
并回答标题中的问题。
如何将Python类转换为Java对象
通常不可能这样做。
几乎可以肯定的是,web服务不会期望";Java对象"。。。因为任意Java对象通常是不可传输的。这根本没有道理。
但是,如果您正在使用基于RMI的API与(非web(服务交谈,那么您将依赖Java的对象序列化协议。将JOSP直接映射到Python将是极具挑战性的(在Python方面也很尴尬/不自然(。我认为没有人做过。。。并且由于RMI是";昨天的技术";也许最好不要尝试。(一个更好的想法是用Java实现一个协议桥服务,将RMI转换为某种RESTful API。或者取代基于RMI的服务。(