2013-08-01 68 views
2

我嘗試使用下面的代碼使用Python肥皂水連接到Aramex的送貨SOAP API:異常的端口類型使用肥皂水

import suds 
from suds.client import Client 
client = Client('file:///home/test/test_wsdl_aramex/shipments-tracking-api-wsdl.wsdl',cache=None) 

但啓動後,我得到以下異常:

>  raise Exception("portType '%s', not-found" % self.type) 
Exception: portType 'i0:Service_dd1_0', not-found 

WSDL文件源可以在here找到。

+1

WDSL文件中存在錯誤:找到WSDL驗證錯誤。我們無法成功驗證WSDL文件在發貨跟蹤-API的WSDL 我們遇到了以下錯誤: 服務「Service_1_0」:端口「BasicHttpBinding_Service_1_0」指向未定義結合 綁定「BasicHttpBinding_Service_1_0」引用未定義的端口類型 – adamr

+0

@adamr感謝您指出問題,現在出現了這樣的問題,我們是否可以跳過SUDS中的驗證部分! – Parthiv

回答

2

錯誤是在這裏:

<wsdl:binding type="i0:Service_1_0" name="BasicHttpBinding_Service_1_0"> 

而且

binding元素有兩個屬性 - 名稱和類型。

name屬性(您可以使用任何名稱)定義綁定的名稱 ,type屬性指向 綁定的端口,在本例中爲「glossaryTerms」端口。

所以解析器找不到端口type="i0:Service_1_0",在這個WSDL文件有兩個端口的定義:

<wsdl:portType name="Service_1_0"> 
    <wsdl:operation name="TrackShipments"> 
     <wsdl:input name="ShipmentTrackingRequest" message="tns:ShipmentTrackingRequest" wsaw:Action="http://ws.aramex.net/ShippingAPI/v1/Service_1_0/TrackShipments"/> 
     <wsdl:output name="ShipmentTrackingResponse" message="tns:ShipmentTrackingResponse" wsaw:Action="http://ws.aramex.net/ShippingAPI/v1/Service_1_0/TrackShipmentsResponse"/> 
    </wsdl:operation> 
    </wsdl:portType> 
    <wsdl:service name="Service_1_0"> 
    <wsdl:port name="BasicHttpBinding_Service_1_0" binding="i0:BasicHttpBinding_Service_1_0"> 
     <soap:address location="http://ws.aramex.net/shippingapi/tracking/service_1_0.svc"/> 
    </wsdl:port> 
    </wsdl:service> 

所以,現在你知道什麼是錯的(在WSDL變化型:結合),和你無法通過驗證。

+0

什麼應該是新的綁定類型?我嘗試綁定=「tns:BasicHttpBinding_Service_1_0」,事情似乎正在工作,但不知道什麼是「神奇」的影響。 – Parthiv

+1

類型中的portType名稱爲「Service_1_0」時,應該爲「tns:Service_1_0」,並且在中完成綁定時應該是tns而不是i0。您的wsdl文件與w3schools不兼容wsdl標準http://www.w3.org/TR/wsdl – adamr

+0

感謝您的回答,這是Aramex(運輸公司,http://www.aramex.com/)的問題, ,所以他們可能會解釋一些詞語,或者他們必須修正它。非常感謝您的努力。 – Parthiv