Suds 无法解析新的 wsdl 文件



我有一个Python脚本,它使用suds 0.4.1-3.el6通过SOAP接口与一些第三方软件协同工作。

直到最近软件更新,一切都正常。现在所有的脚本都像:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
#
import logging
from suds import WebFault
from suds.client import Client
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
client = Client("http://localhost:80/admin/soap/api3.wsdl")
#print client.location
#client.location = 'http://localhost:34012/'
print client

以结尾

Traceback (most recent call last):
  File "print.py", line 18, in <module>
    client = Client("http://localhost:80/admin/soap/api3.wsdl")
  File "/usr/lib/python2.6/site-packages/suds/client.py", line 119, in __init__
    sd = ServiceDefinition(self.wsdl, s)
  File "/usr/lib/python2.6/site-packages/suds/servicedefinition.py", line 58, in __init__
    self.paramtypes()
  File "/usr/lib/python2.6/site-packages/suds/servicedefinition.py", line 137, in paramtypes
    item = (pd[1], pd[1].resolve())
  File "/usr/lib/python2.6/site-packages/suds/xsd/sxbasic.py", line 63, in resolve
    raise TypeNotFound(qref)
suds.TypeNotFound: Type not found: '(soapDiscountAddons, http://www.w3.org/2001/XMLSchema, )'

软件支持人员说"我们的WSDL文件很好,请询问suds开发人员",所以我需要帮助来调查这个问题。

以前的工作文件:
https://dl.dropbox.com/u/4299326/py/20130225.wsdl/old/api3.wsdl
https://dl.dropbox.com/u/4299326/py/20130225.wsdl/old/encoding.xml

新崩溃文件:
https://dl.dropbox.com/u/4299326/py/20130225.wsdl/new/api3.wsdl
https://dl.dropbox.com/u/4299326/py/20130225.wsdl/new/encoding.xml

软件支持表示"我们的WSDL文件很好,请询问suds开发人员">

我认为这是不对的。显示的Type not found: '(soapDiscountAddons, http://www.w3.org/2001/XMLSchema, )'消息序列是正确的。

通过查看WSDL,soapDiscountAddons位于urn:api3命名空间中,因此在使用它时需要提及这一点

<!-- operation response element -->
<element name="getDiscountAddonsResponse">
  <complexType>
    <sequence>
      <element name="ret" type="soapDiscountAddons" minOccurs="1" maxOccurs="unbounded"/>
    </sequence>
  </complexType>
</element>
<!-- operation request element -->
<element name="insupdDiscountAddon">
  <complexType>
    <sequence>
      <element name="val" type="soapDiscountAddons" minOccurs="1" maxOccurs="1"/>
    </sequence>
  </complexType>
</element>

因为您没有为类型加前缀,所以使用的是当前名称空间http://www.w3.org/2001/XMLSchema,而不是urn:api3。suds没有在类型所在的地方查找soapDiscountAddons@urn:api3,而是试图找到一个soapDiscountAddons@http://www.w3.org/2001/XMLSchema元素,当然它并不存在。

这应该解决它:

<element name="getDiscountAddonsResponse">
 <complexType>
  <sequence>
    <element name="ret" type="lbapi:soapDiscountAddons" minOccurs="1" maxOccurs="unbounded"/>
    <!--                      ^^^^^ you are missing this  -->
  </sequence>
 </complexType>
</element>
<!-- operation request element -->
<element name="insupdDiscountAddon">
 <complexType>
  <sequence>
   <element name="val" type="lbapi:soapDiscountAddons" minOccurs="1" maxOccurs="1"/>
   <!--                      ^^^^^ you are missing this  -->
  </sequence>
 </complexType>
</element>

相关内容

  • 没有找到相关文章

最新更新