2011-08-24 57 views
1

我正在使用SOAP Web服務,它使用的是suds (0.4)。我使用的WSDL拋出suds拋出錯誤'type not found'正在使用SOAP服務

>>> import uuid 
>>> from suds.client import Client 
>>> wsdl = 'https://toolkit.dnb.com/locked/resource/docs/TransactionAndMessageDefinition/ProductList.wsdl' 
>>> client = Client(wsdl) 

我消費的服務需要一個參數productListRequest,這是一個複雜的類型,你把UserIdPassword和複雜類型的ProductListInput錯誤。

我填補這些有:

>>> productListRequest = client.factory.create('productListRequest') 
>>> productListRequest.UserId = 'myusername' 
>>> productListRequest.Password = 'mypassword' 
>>> productListRequest.TRNUID = uuid.uuid4() 
>>> ProductListInput = client.factory.create('ProductListInput') 
>>> ProductListInput.DnB_DUNS_Number = '' 
>>> ProductListInput.Product = 'Product Name' 
>>> ProductListInput.CountryCode = 'IT' 
>>> ProductListInput.TradeUp = '' 
>>> ProductListInput.Reason = '' 
>>> productListRequest.ProductListInput = ProductListInput 

但每當我打電話的服務:

>>> print client.service.ws_ProductList(productListRequest) 

我得到Type not found: 'ArrayOfUPD_FLDSItem'

我真的被困在這裏。我把這個錯誤用了兩天,老實說我不知道​​該怎麼辦!也許對WSDL和泡沫更深入瞭解的人可以提供幫助。

所以我的問題:

  • 這是WSDL,這我消耗正確定義?如果WSDL不正確的定義(如果是正確的定義,我將其報告給皁液 維護者)

  • ,有一種解決方法(例如 泡架構醫生),以將其固定到泡沫的網站?

  • 是否有另一個Python庫,我應該使用?

回答

1

Suds是目前在Python中使用WSDL的最佳選擇。不幸的是,WSDL本身就是一個如此複雜的混亂,以至於很難做到這一點。

幸運的是,Suds帶有廣泛的日誌功能,您可以使用它來調試問題,這是解決問題的第一步。這種早期的問題回答瞭如何啓用它:

How can I output what SUDs is generating/receiving?

然而,給人的錯誤類型將需要看到大量的日誌記錄輸出和/或源代碼的一個完整的答案,所以我建議你以某種方式設法縮小問題。爲了使問題最終可以解決,示例(非工作)模式和Python代碼將會很好。

(誤差可能暗示有定義的一些子模式/外部模式/缺失,其泡沫不能理性X加載)

+0

我已將完整的日誌文件發佈到http://pastebin.com/ZJJFXZaG,因爲它包含在這裏大。所以我的理解是,我得到了服務的迴應,但是通過泡沫本身對已知數據結構的閱讀和應用似乎失敗了。 – jazz

+0

放入pdb並逐行掃描從違規行到失敗的每行代碼......您應該看到何時類型跟蹤機器不再跟蹤該軌跡 –

+0

我已經接受了您的答案,但它會很棒,如果您已經提出了更多的WSDL ;-) – jazz

0

起初: 它沒有意義的,叫無產品列表鄧氏編碼。該交易向給定的DUNS提供所有可用產品。如果DUNS號碼爲空,則只會顯示所述產品的字段列表(假設您將有效的產品名稱放入您的呼叫中,而不是「產品名稱」)。

但是: 即使通過放入所有參數,我遇到了同樣的問題,也無法解決它。

檢查關於DNB,讓他們糾正WSDL - 他們的WSDL是相當馬車:請注意,他們只是忘了在WSDL實現整體交易(prodOrderRequest_3對於從工具包歸檔檢索數據)

我的解決方案使用工具包的XML版本進行這個和其他提到的事務。不幸。

相關問題