3
我正在使用suds向第三方API發出SOAP請求。如何指定factory.create的完整名稱空間()
import suds.client
client = suds.client.Client(WSDL_URL, location=SERVICE_URL)
當我試圖創建一個由WSDL定義的特定類型的對象(比如TheObject
):
obj = client.factory.create('TheObject')
我得到一個錯誤,它不存在:
(TheObject) not-found
path: "TheObject", not-found
Traceback (most recent call last):
File "suds_test.py", line 67, in <module>
sys.exit(main(sys.argv))
File "suds_test.py", line 51, in main
obj = client.factory.create('TheObject'),
File "/usr/local/lib/python2.7/dist-packages/suds/client.py", line 234, in create
raise TypeNotFound(name)
suds.TypeNotFound: Type not found: 'TheObject'
所以我打印list of available suds factory types與print(client)
:
Suds (https://fedorahosted.org/suds/) version: 0.4 GA build: R699-20100913
Service (OrderService) tns="http://api.example.com/services/"
Prefixes (2)
ns0 = "http://api.example.com/contracts/stuff"
ns1 = "http://api.example.com/services/"
Ports (2):
(OrderServiceSoap)
Methods (123):
... Not really relevant
Types (123):
SomeType
SomeType2
ns0:AnotherType
ns0:AnotherType2
ns0:TheObject
...
所以看起來ns1
是默認名稱空間,而ns0
是我想用於TheObject
的名稱空間。如果我用它的名稱空間別名加上前綴。
obj = client.factory.create('ns0:TheObject')
我寧願不記得要使用ns0
在這種特殊情況下,因爲它的變化隨心所欲。我查閱了Factory.create()
的文檔,但它只接受一個參數名稱,沒有關於名稱空間URL或任何其他參數的其他參數。
有沒有辦法動態確定TheObject
的命名空間?或者是否可以指定整個URL爲ns0
而不僅僅是命名空間別名?任何幫助,將不勝感激。