3

Axis2 で実行されている SOAP API と正しくやり取りする際に問題が発生しています。

2 つの引数 (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 サーバーは、次のような XML エラーを返しますData element of the OM Node is NULL。Axis2 のログを見ると、次のエラーが表示されます。adb_login.c(383) non nillable or minOuccrs != 0 element loginName missing

次に、既知の動作中の Java クライアントからの XML とこのクライアントからの XML をパケット キャプチャしました。loginこれら 2 つの違いは次のとおりです。

ソーピー:

<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>

loginしたがって、これは、何らかの理由で (おそらく Python と SOAPpy に関する私の知識不足に関連している可能性があります)、メソッドで使用されている変数に名前空間が適用されていないことを意味します。 .

また、変数を反転させてloginNameの前にパスワードを入れているようですが、それはあまり重要ではないと思います。

私は何を間違っていますか?

4

1 に答える 1

2

SOAPPy の既知のバグのようです。誰かが簡単なパッチを提案しています: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523083

あるいは (サービスの WSDL にアクセスできると仮定して)、SOAPy では名前空間だけでなく WSDL を指定することもできます。これにより、エンベロープ生成コードにより良い名前空間情報が提供されるようです。http://diveintopython.net/soap_web_services/introspection.html

最後に、SOAPPy が機能しない場合は、Sudsを試してください( SOAPyよりも文書化されています)。

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

幸運を!

于 2011-04-26T10:22:35.263 に答える