2011-04-13 57 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

相關問題