2011-03-30 66 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