suds:TypeNotFound:找不到WSDL中定义的Type的类型

时间:2015-01-19 23:14:05

标签: python web-services python-2.7 wsdl suds

我正面临着为我的WSDL使用suds的问题。我正在使用jurko-suds

>>> print(suds.version)
<module 'suds.version' from 'C:\Python27\lib\site-packages\suds_jurko-0.6-py2.7.egg\suds\version.pyc'>

WSDL如下

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                  xmlns:tns="http://wsdl.CLT.org/Docs/"
                  xmlns:fENTERPRISE="http://xmlns.CLT.corp/Docs/NumberRanges/ENTERPRISE"
                  name="SendRange"
                  targetNamespace="http://wsdl.CLT.org/Docs/">
    <wsdl:types>
      <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
                  xmlns:commonENTERPRISE="http://xmlns.CLT.corp/Core/ENTERPRISE/Common/ENTERPRISE"
                  xmlns:fENTERPRISEOUT="http://xmlns.CLT.corp/Docs/NumberRanges/ENTERPRISEOUT"
                  xmlns:tns="http://xmlns.CLT.corp/Docs/NumberRanges/ENTERPRISE"
                  targetNamespace="http://xmlns.CLT.corp/Docs/NumberRanges/ENTERPRISE"
                  elementFormDefault="qualified">
         <element name="SendNumberRangesRequestENTERPRISE" type="tns:SendNumberRangesRequestENTERPRISEType"/>
         <element name="SendNumberRangesResponseENTERPRISE" type="tns:SendNumberRangesResponseENTERPRISEType"/>
         <complexType name="SendNumberRangesRequestENTERPRISEType">
            <complexContent>
               <extension base="commonENTERPRISE:ENTERPRISEType">
                  <sequence>
                    <element name="DataZone" type="tns:SendNumberRangesRequestElementType"/>
                  </sequence>
               </extension>
            </complexContent>
         </complexType>
         <complexType name="SendNumberRangesResponseENTERPRISEType">
            <complexContent>
               <extension base="commonENTERPRISE:ResponseENTERPRISEType"></extension>
            </complexContent>
         </complexType>
         <complexType name="SendNumberRangesRequestElementType">
            <sequence>
               <element ref="fENTERPRISEOUT:asignacionNumberRanges"/>
            </sequence>
         </complexType>
      </xsd:schema>
      <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
                  xmlns:commonENTERPRISE="http://xmlns.CLT.corp/Core/ENTERPRISE/Common/ENTERPRISE"
                  targetNamespace="http://xmlns.CLT.corp/Core/ENTERPRISE/Common/ENTERPRISE"
                  elementFormDefault="qualified">
         <xsd:element name="ENTERPRISEHeader" type="commonENTERPRISE:ENTERPRISEHeaderType"/>
         <xsd:element name="ErrorDetail" type="commonENTERPRISE:ErrorDetailType" nillable="true"/>
         <xsd:complexType name="ENTERPRISEHeaderType">
            <xsd:sequence>
               <xsd:element name="ENTERPRISEID" type="xsd:string"/>
               <xsd:element name="CreationDateTime" type="xsd:dateTime" minOccurs="0"/>
               <xsd:element name="Sender" type="commonENTERPRISE:SenderType"/>
               <xsd:element name="Target" type="xsd:string" minOccurs="0"/>
               <xsd:element name="ENTERPRISETracking" type="commonENTERPRISE:ENTERPRISETrackingType" minOccurs="0" maxOccurs="unbounded"/>
               <xsd:element name="Addressing" type="commonENTERPRISE:ENTERPRISEAddressingType" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:complexType name="SenderType">
            <xsd:sequence>
               <xsd:element name="Application" type="xsd:string"></xsd:element>
               <xsd:element name="Country" type="xsd:string"></xsd:element>
               <xsd:element name="BusinessUnit" type="xsd:string"></xsd:element>
               <xsd:element name="LegalEntity" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1"></xsd:element>         
            </xsd:sequence>
         </xsd:complexType>
         <xsd:complexType name="ENTERPRISEType">
            <xsd:sequence>
               <xsd:element ref="commonENTERPRISE:ENTERPRISEHeader"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:complexType name="ResponseENTERPRISEType">
            <xsd:sequence>
               <xsd:element ref="commonENTERPRISE:ENTERPRISEHeader"/>
               <xsd:element name="ReturnCode" type="xsd:string"/>
               <xsd:element name="ReturnMessage" type="xsd:string"/>
               <xsd:element name="ErrorCode" type="xsd:string" nillable="true" minOccurs="0"/>
               <xsd:element ref="commonENTERPRISE:ErrorDetail" minOccurs="0"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:complexType name="ErrorDetailType">
            <xsd:sequence>
               <xsd:element name="ErrorType" type="xsd:string" minOccurs="0"/>
               <xsd:element name="HandlerServiceName" type="xsd:string" minOccurs="0"/>
               <xsd:element name="SourceApplication" type="xsd:string" minOccurs="0"/>
               <xsd:element name="SourceServiceName" type="xsd:string" minOccurs="0"/>
               <xsd:element name="SourceErrorCode" type="xsd:string" minOccurs="0"/>
               <xsd:element name="SourceErrorMessage" type="xsd:string" minOccurs="0"/>
               <xsd:element name="SourceErrorTrace" type="xsd:string" minOccurs="0"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:complexType name="ENTERPRISETrackingType">
            <xsd:sequence>
               <xsd:element name="FileName" minOccurs="0">
                  <xsd:simpleType>
                    <xsd:restriction base="xsd:string"/>
                  </xsd:simpleType>
               </xsd:element>
               <xsd:element name="ParentENTERPRISEID" type="xsd:string" nillable="true" minOccurs="0"></xsd:element>
               <xsd:element name="IntegrationCode" type="xsd:string" nillable="true" minOccurs="0"></xsd:element>
               <xsd:element name="ReferenceID" type="xsd:string" nillable="true" minOccurs="0"></xsd:element>           
            </xsd:sequence>
         </xsd:complexType>
         <xsd:complexType name="ENTERPRISEAddressingType">
            <xsd:sequence>
               <xsd:element name="ReplyToAddress" type="xsd:string" nillable="true" minOccurs="0"></xsd:element>
               <xsd:element name="CorrelID" type="xsd:string" nillable="true" minOccurs="0"></xsd:element>
            </xsd:sequence>
         </xsd:complexType>
      </xsd:schema>
      <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
                  xmlns:tns="http://xmlns.CLT.corp/Docs/NumberRanges/ENTERPRISEOUT"
                  targetNamespace="http://xmlns.CLT.corp/Docs/NumberRanges/ENTERPRISEOUT"
                  attributeFormDefault="unqualified"
                  elementFormDefault="qualified">
         <element name="asignacionNumberRanges">        
            <complexType>
               <sequence>
                  <element type="long" name="BusCode"/>
                  <element type="string" name="CodeDocType"/>
                  <element type="string" name="CodeLocal"/>
                  <element type="string" name="appOrigin"/>
                  <element type="long" name="InitialNumber"/>
                  <element type="long" name="FinalNumber"/>
               </sequence>
            </complexType>      
         </element>
      </xsd:schema>
    </wsdl:types>

    <wsdl:message name="SendNumberRangesRequestMessage">
        <wsdl:part element="fENTERPRISE:SendNumberRangesRequestENTERPRISE" name="parameters"/>
    </wsdl:message>
    <wsdl:message name="SendNumberRangesResponseMessage">
        <wsdl:part element="fENTERPRISE:SendNumberRangesResponseENTERPRISE" name="parameters"/>
    </wsdl:message>

    <wsdl:portType name="SendRangePort">
        <wsdl:operation name="SendRange">
            <wsdl:input message="tns:SendNumberRangesRequestMessage"/>
            <wsdl:output message="tns:SendNumberRangesResponseMessage"/>
        </wsdl:operation>
    </wsdl:portType>

    <wsdl:binding name="SendRangeSOAP" type="tns:SendRangePort">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="SendRange">
            <soap:operation soapAction="http://wsdl.CLT.org/Docs/NumberRanges/SendRange"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>

    <wsdl:service name="SendRange">
        <wsdl:port name="SendRangePort" binding="tns:SendRangeSOAP">
          <soap:address location="http://127.0.0.1/SendRange" />
        </wsdl:port>
  </wsdl:service>

</wsdl:definitions>

当我收到Type Not Found异常时,我正在使用suds,如下所示

>>> from suds.client import Client
>>> wsdl_url='http://127.0.0.1:8000/LoadRangeWSDL'
>>> client_object = Client(wsdl_url)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "build\bdist.win32\egg\suds\client.py", line 115, in __init__
  File "build\bdist.win32\egg\suds\reader.py", line 150, in open
  File "build\bdist.win32\egg\suds\wsdl.py", line 159, in __init__
  File "build\bdist.win32\egg\suds\wsdl.py", line 220, in build_schema
  File "build\bdist.win32\egg\suds\xsd\schema.py", line 94, in load
  File "build\bdist.win32\egg\suds\xsd\schema.py", line 319, in dereference
  File "build\bdist.win32\egg\suds\xsd\sxbasic.py", line 508, in dependencies
suds.TypeNotFound: Type not found: '(ENTERPRISEType, http://xmlns.CLT.corp/Core/ENTERPRISE/Common/ENTERPRISE, )'

我仔细检查过,并且在WSDL中确定了enterpriseEType。请指导。

1 个答案:

答案 0 :(得分:2)

似乎医生解决了你的问题。

from suds.xsd.doctor import Import, ImportDoctor
imp1 = Import('http://xmlns.CLT.corp/Core/ENTERPRISE/Common/ENTERPRISE')
imp2 = Import('http://xmlns.CLT.corp/Docs/NumberRanges/ENTERPRISEOUT')
doctor = ImportDoctor(imp1, imp2)
client = Client('http://127.0.0.1:8000/LoadRangeWSDL', doctor=doctor)