gpt4 book ai didi

python - 如何为 factory.create() 指定完整的命名空间

转载 作者:行者123 更新时间:2023-12-05 00:26:40 25 4
gpt4 key购买 nike

我正在使用 suds向第三方 API 发出 SOAP 请求。

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 typesprint(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() 的文档但它只接受一个参数名称,没有 namespace URL 或任何其他参数。

有没有办法动态确定 TheObject 的命名空间?或者是否可以为 ns0 指定整个 URL而不仅仅是命名空间别名?任何帮助,将不胜感激。

最佳答案

对我来说,它是一个标准的 XML 命名空间应该是显而易见的,而且在 documentation 中已经清楚地表明了这一点。 (我错过了)。

要通过 URL 指定命名空间,您只需在名称前面加上包裹在 {} 中的命名空间 URL 的前缀。 (大括号):

obj = client.factory.create('{http://api.example.com/contracts/stuff}TheObject')

关于python - 如何为 factory.create() 指定完整的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21784432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com