我使用 python 的 zeep SOAP 客户端,尝试将一些数据获取到某些 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:异常 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 还很陌生,所以有人可以帮忙吗?
经过反复试验,以下组合有效:
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
问题是,如果你传递一个字典作为方法参数,zeep 将自己创建该对象(没有类型),如果你想确定类型 - 自己创建该对象
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)