Python Web 服务开发者: Python SOAP 库,第 4 部分
2008-09-30 13:02:58 来源:WEB开发网我们做过许多徒劳无功的试验(其中包括使用 ZSI 的 gDateTime 类),钻研过文档,甚至用 Google 多次搜索该主题,都无法解决如何使 ZSI 以参数的形式传递 date/time,而不用为使用 gDateTime 类作为 类型代码的 codedate/time 对象编写特定的类。这看起来是开发人员无法逾越的一个障碍,他们无法编写这样一个通用的数据类型。
wsdl2py
ZSI 现在也带有一种脚本,也就是 wsdl2py ,在文档中没有记录它,不过 Python 源代码附带了这样的文档字符串:
“一个自动从 wsdl 定义生成客户端接口代码的实用程序和一组代表元素声明和类型定义的类。这将在当前的工作目录下生成两个文件,该目录以 wsdl 定义名称来命名。”
这看起来,我们可以看到在 WSDL 文件中定义的 WXSDT dateTime 参数,生成所有的用于从 Python 编组这些值的工具。这些脚本不能处理 WSDL URL,所以我们必须把这些定义下载到本地文件。下例显示了如何在 UNIX 上使用 wget 命令:
这听起来像是很有希望的,并且我们认为有可能在 WSDL 文件中定义 WXSDT dateTime 参数,并且生成需要用来解组 Python 中的这些值的工具。该脚本不能处理 WSDL URL,所以我们必须把定义下载到本地文件。下面是一个如何在 UNIX 上使用 wget 命令的示例:
wget -O SBGGetAirFareQuote.wsdl
http://wavendon.dsdata.co.uk:8080/axis/services/SBGGetAirFareQuote?wsdl
遗憾的是,使用 wsdl2py 脚本的作用是非常有限的,如下面的清单所示:
wsdl2py -f SBGGetAirFareQuote.wsdl
Traceback (most recent call last):
... Part of traceback omitted for brevity ...
File "/usr/lib/python2.2/site-packages/ZSI/wsdl2python.py", line 1058,
in _fromComplexType
self._complexTypeComplexContent(tp)
File "/usr/lib/python2.2/site-packages/ZSI/wsdl2python.py", line 1147,
in _complexTypeComplexContent
arrayinfo = dt.getArrayType()
File "/usr/lib/python2.2/site-packages/ZSI/wsdlInterface.py", line 1712,
in getArrayType
raise WsdlInterfaceError, 'could not determine array type'
ZSI.wsdlInterface.WsdlInterfaceError: could not determine array type
更多精彩
赞助商链接