我正在使用zeep SOAP客户端进行python,尝试将一些数据提供给某些wsdl_address。我现在有以下内容:
ambCase = {'data1':'value1',
'data2':'value2'}
client = zeep.Client(wsdl=WSDL_Address)
result = client.service.MethodName(GUID, {'CaseDto':ambCase})
其中ambCase是我想要访问服务器的数据。 MethodName方法需要2个参数:GUID令牌(没有问题)和带有指定xsi:type属性的ambCase对象(在我的情况下应该是' CaseAmb'),我无法得到它工作,它失败并出现错误: zeep.exceptions.Fault:exception str()失败
上面的代码产生这个xml(除了标题):
<soap-env:Body>
<ns0:AddCase xmlns:ns0="http://tempuri.org/">
<ns0:guid>00000000-0000-0000-0000-000000000000</ns0:guid>
<ns0:caseDto/>
</ns0:AddCase>
我对SOAP和zeep很陌生,所以,任何人都可以提供帮助吗?
答案 0 :(得分:0)
通过反复试验,以下组合起作用:
objectType = client.get_type('ns6:someTypeName') # someTypeName will be in xsi:type attribute
objectWrap = xsd.Element('xmlTagName',objectType) # xmlTagName - name of created xml element
objectValue = objectWrap('param1',param2,param3[0]) # putting actual data values into object
client = zeep.Client(wsdl)
result = client.service.MethodName(objectValue) # calling some method with your object(with explicitly detrmined type) as param
问题是,如果你传递一个dict作为方法参数,zeep将自己创建该对象(没有类型),如果你想确定类型 - 自己创建该对象