0

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

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

#!/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

4

1 回答 1

3

软件支持人员说“我们的 WSDL 文件很好,请咨询 suds 开发人员”

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

通过查看您的 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>
于 2013-03-03T10:24:04.950 回答