SOAPpy中的命名空间无法按预期工作

时间:2011-03-30 22:40:09

标签: python soap soappy axis2c

我遇到了与在Axis2上运行的SOAP API正确连接的问题:

我应该使用两个参数(loginName和password)调用login方法,并返回一个我将用于后续交互的身份验证令牌。

#!/usr/bin/python

from SOAPpy import SOAPProxy

s_user = 'Administrator'
s_pass = 'securityThroughObscurity'
s_host = '192.168.76.130:8998'

namespace = 'http://bcc.inc.com/IncSecurity'
url = 'http://' + s_host + '/axis2/services/IncSecurityService'

DHCPServ = SOAPProxy(url, namespace)
DHCPServ.config.dumpSOAPOut = 1
DHCPServ.config.dumpSOAPIn = 1
DHCPResp = DHCPServ.login(loginName=s_user, password=s_pass)

另一侧的Axis2服务器返回一个表示Data element of the OM Node is NULL的XML错误。查看Axis2日志,我看到错误是adb_login.c(383) non nillable or minOuccrs != 0 element loginName missing

然后,我从已知正在运行的Java客户端获取login XML与来自此客户端的XML,这些是两者之间的差异:

SOAPpy的:

<ns1:login xmlns:ns1="http://bcc.inc.com/IncSecurity" SOAP-ENC:root="1">
<password xsi:type="xsd:string">securityThroughObscurity</password>
<loginName xsi:type="xsd:string">Administrator</loginName>
</ns1:login>

爪哇:

<ns2:login xmlns:ns2="http://bcc.inc.com/IncSecurity">
<ns2:loginName>Administrator</ns2:loginName>
<ns2:password>securityThroughObscurity</ns2:password>
</ns2:login>

所以这意味着由于某种原因(可能与我在Python和SOAPpy中缺乏知识有关),命名空间不会应用于login方法中使用的变量,因此所有帐户都不会确实存在,并且保证错误。

此外,它似乎正在翻转变量并在loginName之前输入密码,但我认为这并不重要。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

看起来这是SOAPPy中的已知错误,有人提出了一个简单的补丁:http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523083

或者(假设您可以访问服务WSDL),SOAPPy允许您指定WSDL而不仅仅是命名空间。这看起来它将为信封生成代码提供更好的命名空间信息。 http://diveintopython.net/soap_web_services/introspection.html

最后,如果SOAPPy不适合您,请尝试Suds(它比SOAPPy better documented。)

from suds.client import Client
from suds.wsse import *
client = Client(WSDL_LOCATION)
guid = client.service.someFunctionName("a string argument", 42)
祝你好运!