2011-03-30 5 views
3

가 나는 SOAP API는 Axis2를 실행와의 인터페이스를 올바르게 문제에 봉착 예상대로 작동하지 후속 상호 작용을 위해 사용할 인증 토큰 반대편에네임 스페이스

#!/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를 로그를보고, 나는 오류가 난 다음 패킷이 클라이언트에서 XML 대 올바르게 작동하는 자바 클라이언트에서 login XML을 캡처 adb_login.c(383) non nillable or minOuccrs != 0 element loginName missing

입니다보고이 둘 사이의 차이점은 다음과 같습니다

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> 

그래서 즉, 아마 한국인의 나의 부족에 관한 몇 가지 이유 (대한 owlow, Python 및 SOAPpy의 owledge) login 메서드에서 사용중인 변수에 네임 스페이스가 적용되지 않아 모든 계정에서 실제로 존재하지 않으며 오류가 발생합니다.

또한 변수 주위를 뒤집어 놓고 loginName 앞에 암호를 넣는 것처럼 보이지만 그다지 중요하지 않다고 생각합니다.

내가 뭘 잘못하고 있니? 이 SOAPPy에서 알려진 버그처럼

답변

2

이 보이는 사람이 간단한 패치를 제안했다 : (당신은 서비스 WSDL에 대한 액세스 권한이 가정) http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523083

대안을 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) 

행운을 빈다!

+0

이 정보를 제공해 주셔서 감사합니다! someFuncitonName이의 포인트가있는 경우, 예 –

+0

, 당신은 어떻게 그것을 해결 했습니까? 예 : guid = client.service.some.FunctionName ("문자열 인수", 42) – dyoser