1

我在 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 还很陌生,所以,有人可以帮忙吗?

4

1 回答 1

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 将自己创建该对象(没有类型),如果您想确定类型 - 自己创建该对象

于 2017-10-03T08:14:01.323 回答