Python 解析包含相互引用的XSD的WSDL

Python 解析包含相互引用的XSD的WSDL,python,soap,wsdl,suds,Python,Soap,Wsdl,Suds,我试图使用python版本2.7.1来访问soap api,但在尝试创建对象时遇到错误。最简单的形式是: from suds.client import Client url = 'http://tool-sb-api.hescloud.net/session/wsdl' c = Client(url, cache=None) 产生的错误是: suds.TypeNotFound: Type not found: '(retrieveSessionByIdResponse, http://he

我试图使用python版本2.7.1来访问soap api,但在尝试创建对象时遇到错误。最简单的形式是:

from suds.client import Client

url = 'http://tool-sb-api.hescloud.net/session/wsdl'
c = Client(url, cache=None)
产生的错误是:

suds.TypeNotFound: Type not found: '(retrieveSessionByIdResponse, http://hes.lbl.gov/scoring_tool/session, )'
我尝试了一些根据方法使用的变体,但我得到了相同的错误

在检查WSDL和来自SUD的调试消息时,它似乎有一个包含列表

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://hes.lbl.gov/scoring_tool/session" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="HesAPI_Session" targetNamespace="http://hes.lbl.gov/scoring_tool/session">
    <types>
        <xsd:schema targetNamespace="http://hes.lbl.gov/scoring_tool/session">
            <xsd:include schemaLocation="http://tool-sb-api.hescloud.net/public/xsd/session/input/newSessionFromAddress.xsd"/>
            <xsd:include schemaLocation="http://tool-sb-api.hescloud.net/public/xsd/session/output/newSessionFromAddressResponse.xsd"/>
            <xsd:include schemaLocation="http://tool-sb-api.hescloud.net/public/xsd/session/input/newLabelSession.xsd"/>
            ...

...
它们相互参照。下面是一个执行此操作的示例xsd()


看来肥皂水和水有问题

<xsd:element ref="tns:retrieveSessionByIdResponse" minOccurs="0" maxOccurs="1"/>

正在另一个文件中定义

我不确定此WSDL是否遵循此API声明的管理者的要求,或者问题是否在于SUD无法正确处理“ref”属性


无论哪种方式,我都会很满意成功创建了一个suds客户端对象。

我通过创建一个来解决这个问题,以便在解析文档之前将xsd文件的内容直接加载到文档中

我必须重写该函数并使用(尽管任何xml库都可以工作)。我无法重写
parsed
函数,因为我无法轻松创建一个sud(它需要一个
options
变量,其中包含可能超出范围的信息)


suds记录了DocumentPlugin的创建。

@Jorge抱歉,这是很久以前的事了。我认为代码不再存在:)
<xsd:element ref="tns:retrieveSessionByIdResponse" minOccurs="0" maxOccurs="1"/>