2011-04-13 68 views
4

我很难获得基于suds的python SOAP客户端来解析响应:客户端构建正确并解析WSDL就好了。据我所见,WSDL中没有导入,所以这看起来不像典型的ImportDoctor问题。从WSDLSuds:在响应中找不到类型

相关位:

 <xsd:complexType name="getFontsRequest"> 
      <xsd:sequence> 
       <xsd:element name="UserID" type="xsd:int" maxOccurs="1" minOccurs="1"></xsd:element> 
       <xsd:element name="TAWSAccessKey" type="xsd:string" maxOccurs="1" minOccurs="1"></xsd:element> 
      </xsd:sequence> 
     </xsd:complexType> 

     <xsd:complexType name="getFontsResponse"> 
      <xsd:sequence> 
       <xsd:element name="UserID" type="xsd:int"></xsd:element> 
       <xsd:element name="Status" type="xsd:string"></xsd:element> 
       <xsd:element name="Fonts" type="tns:FontType[]"></xsd:element> 
      </xsd:sequence> 
     </xsd:complexType> 

     <xsd:complexType name="FontType"> 
      <xsd:sequence> 
       <xsd:element name="ID" type="xsd:int"></xsd:element> 
       <xsd:element name="Name" type="xsd:string"></xsd:element> 
      </xsd:sequence> 
     </xsd:complexType> 

我的代码:

self.soap_client = Client(settings.WSDL_URL) 
    self.factory = self.soap_client.factory 
    self.service = self.soap_client.service 
    # ... 
    getFontsRequest = self.factory.create('getFontsRequest') 
    getFontsRequest.UserID = settings.WS_UID 
    getFontsRequest.TAWSAccessKey = settings.WS_KEY 

    self.service.getFonts(getFontsRequest) 

最后一行抛出此异常:

... 
File "/usr/local/Cellar/python/2.7.1/lib/python2.7/site-packages/suds/xsd/sxbasic.py", line 63, in resolve 
raise TypeNotFound(qref) 
TypeNotFound: Type not found: '(FontType[], http://www.type-applications.com/character_set/,)' 

我的理解是,web服务返回一个数组的FontType对象(即FontType[]),如getFontResponse方法,但未能定义FontType[]类型,并且仅描述FontType

任何帮助解决这个将不胜感激。

+0

唯一能想到的就是添加调试日志并在其中搜索某处。顺便说一下,你可以在这里粘贴suds客户端和传输日志输出 - 这可能会有所帮助。 – Gandi 2011-04-20 12:54:27

回答

3

这个问题已经由WSDL供应商联络,请他修复(碎)WSDL解决。不幸的是,我不知道这个问题的任何基于代码的解决方案。

5

这可能是ImportDoctor的工作。运行错误的WSDL非常普遍。

试试这个:

from suds.client import Client 
from suds.xsd.doctor import Import, ImportDoctor 

wsdl_url = settings.WSDL_URL 

# Fix missing types with ImportDoctor 
schema_url = 'http://www.type-applications.com/character_set/' 
schema_import = Import(schema_url) 
schema_doctor = ImportDoctor(schema_import) 

# Pass doctor to Client 
client = Client(url=wsdl_url, doctor=schema_doctor) 
+0

谢谢。实际上,我应该在问题中详细说明,但这几乎是我尝试的第一件事,但不幸的是这并没有帮助。 – Marco 2011-04-14 06:38:13

+0

另外,如果我错了,请纠正我的错误,但我见过的所有关于ImportDoctor的示例都参考了客户端的_instantiation_,即架构第一次加载时的情况。从我看到的情况来看,泡沫破裂的情况很早就会失败。在我的情况下,模式加载得很好,类型错误发生在通话时间。 – Marco 2011-04-14 06:48:30

+0

可以修复类似的行https://stackoverflow.com/questions/44586989/not-able-to-create-a-soap-filter-in-suds? – Hussain 2017-06-23 07:09:29

相关问题