【问题标题】:Suds can't parse new wsdl fileSuds 无法解析新的 wsdl 文件
【发布时间】:2013-02-25 07:37:07
【问题描述】:

我有一个 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

【问题讨论】:

    标签: python soap wsdl soap-client suds


    【解决方案1】:

    软件支持人员说“我们的 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      相关资源
      最近更新 更多