Python Web 服务开发者: 现实世界,第二部分
2007-03-29 12:13:08 来源:WEB开发网在导入 SOAPpy 库之后,我们使用这个库来为发布在各自站点上的 WSDL 中的 Amazon Web 服务 API 创建一个代理。SOAPpy 中的 WSDL.Proxy 为访问通过 WSDL 定义的 API 提供了功能强大的工具。在使用代理进行任何调用之前,我们先将 Amazon API 中公开的方法列表打印出来。这样一来,正如 WSDL 中所指定的和 API 文档中所描述的一样,调用 SOAP 方法就与构造合适参数并在代理对象上调用方法一样简单了。在本例下,我们创建一个 request 结构,然后使用适当的参数将这个结构填充到我们的查询中去。
注意,我们使用的是 SOAPpy 的 Types.py 模块中的 _keys() 方法,因为结果的详细情况(details)组件是 SOAP arrayType ,它通常映射到 Python 字典。
0.10.4 版本的 SOAPpy 在试着从 URL 加载的 WSDL 定义时存在着一个错误。(请参见 清单 3)。
清单 3. 使用 SOAPpy 从 URL 加载 WSDL 的跟踪信息
Traceback (most recent call last):
File "./amazon_soap_test.py", line 21, in ?
proxy = SOAPpy.WSDL.Proxy(url)
File "/usr/lib/python2.3/site-packages/SOAPpy/WSDL.py", line 61, in __init__
self.wsdl = reader.loadFromStream(stream)
File "/usr/lib/python2.3/site-packages/SOAPpy/wstools/WSDLTools.py",
line 28, in loadFromStream
wsdl.location = file.name
AttributeError: addinfourl instance has no attribute 'name'
直接从 URL 加载 WSDL 需要能够快速修复 SOAPpy 0.10.4 中的 WSDL.py 模块——如 清单 4 所示——您主要是将赋值调用从 reader.loadFromStream(stream) 更改到了 reader.loadFromURL(wsdlsource) 。
更多精彩
赞助商链接