如何为指定完整命名空间工厂.创建()

2024-09-24 22:28:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

import suds.client
client = suds.client.Client(WSDL_URL, location=SERVICE_URL)

当我试图为WSDL定义的特定类型创建对象时(比如TheObject):

^{pr2}$

我得到一个关于它不存在的错误:

(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'

所以我用print(client)打印list of available suds factory types

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,因为它的变化是任意的。我在文档中查找了^{},但它只接受一个参数name,没有名称空间URL或任何其他参数。在

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


Tags: inpy名称clienturlfactorycreateline
1条回答
网友
1楼 · 发布于 2024-09-24 22:28:01

对我来说,它是一个标准的XML名称空间,并且在documentation中清楚地表明了这一点(我错过了)。在

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

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

相关问题 更多 >