如何指定xsi:type zeep python

时间:2017-09-30 13:03:39

标签: python soap zeep

我正在使用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很陌生,所以,任何人都可以提供帮助吗?

1 个答案:

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