2011-03-30 51 views
3

我正确有一个问题与Axis2上运行的SOAP API接口:命名空间中SOAPpy的工作不正常

会发生什么事是我应该调用登录方法有两个参数(登录名和密码),它返回一个认证令牌,我将用于后续的交互。

#!/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服务器返回一个XML错误,声明Data element of the OM Node is NULL。纵观Axis2的日志,我看到的错误是adb_login.c(383) non nillable or minOuccrs != 0 element loginName missing

我再包捕获从已知的工作Java客户端与此客户端的XML的login 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> 

的Java:

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

因此,这意味着,由于某种原因(可能涉及到我缺乏千牛在Python和SOAPpy中的owledge)名称空间不适用于login方法中使用的变量,所以通过所有帐户它们实际上不存在,并且错误是有保证的。

此外,它似乎是翻转周围的变量,并将loginName之前的密码,但我不认为这很重要。

我在做什么错?

回答

2

看起来像它在SOAPpy的一个已知的bug,有人提出了一个简单的补丁:http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523083

或者(假设你有机会获得服务WSDL),SOAPpy的,可以指定一个WSDL,而不是只是一个命名空间。这看起来好像会为信封生成代码提供更好的名称空间信息。 http://diveintopython.net/soap_web_services/introspection.html

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

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

祝你好运!

+0

感谢您的信息! – 2011-06-24 05:37:26

+0

在你的例子中,如果someFuncitonName有一个点,你是如何解决它的?例如:guid = client.service.some.FunctionName(“一个字符串参数”,42) – dyoser 2011-12-03 18:04:44