我在正确连接 Axis2 上运行的 SOAP API 时遇到问题:
发生的情况是我应该使用两个参数(登录名和密码)调用登录方法,它会返回一个身份验证令牌,我将使用该令牌进行后续交互。
#!/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,这些是两者之间的区别:
肥皂:
<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 之前,但我认为这并不重要。
我究竟做错了什么?