【问题标题】:how to specify xsi:type zeep python如何指定 xsi:type zeep python
【发布时间】:2017-09-30 13:03:38
【问题描述】:

我正在为 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 还很陌生,所以,谁能帮忙?

【问题讨论】:

    标签: python soap zeep


    【解决方案1】:

    通过反复试验,以下组合奏效:

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

    【讨论】:

    • 我遇到了同样的问题,ns6 对我不起作用,当我使用 ns0 时它起作用了,我认为 zeep 会自动创建 ns0 namsespace
    • 你不能直接传递一个类型的实例,就像这个文档中的例子一样吗? python-zeep.readthedocs.io/en/master/datastructures.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多