如何指定 xsi:type zeep python

how to specify xsi:type zeep python

我正在为 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 object(在我的例子中它应该是 'CaseAmb'),我无法获取它工作,它失败并出现错误: zeep.exceptions.Fault: 异常 str() 失败

上面的代码产生这个 xml(headers 除外):

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