質問

私はカメラを持っていると私はVIS泡それに接続しようとしています。私は生のXMLを送信しようとしたとの作業からXML泡を停止する唯一の事は正しくないSOAPエンベロープの名前空間であることを発見した。

エンベロープの名前空間があります:

xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"

と、私はそれを書き直したいます:

xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope"

私はこのコードを試してみてくださいpythonで名前空間を追加するには:

message = Element('Element_name').addPrefix(p='SOAP-ENC', u='www.w3.org/ENC')

しかし、私はそれが泡バインディングにハードコードされたとして、それは書き込まない名前空間にSOAP-ENVを追加するとき。泡でこれを上書きする方法はありますか?

任意の助けてくれてありがとう。

役に立ちましたか?

解決 2

私はこの作業を取得するために管理し、SOAPエンベロープは、ハードあなたのsite-packagesにインストールbindings.pyに格納されてsuds.eggにコーディングされます。私はhttp://www.w3.org/2003/05/soap-envelopeにSOAPエンベロープアドレスを変更しました。これは私のカメラとの互換性でした。私はハードbindings.pyにして、それをコード化されたので、私は泡で、この封筒を上書きするコマンドを見つけることができませんでした。

任意の助けてくれてありがとう。

他のヒント

私は手動でsuds.binding.envnsモジュールにbindings変数をオーバーライドすることで、その周りに得ます:

from suds.bindings import binding
binding.envns=('SOAP-ENV', 'http://www.w3.org/2003/05/soap-envelope')
ここから先は、すべてがうまくいく(とのある私ののサービス、)

手動更新binding.pyは間違いなく行くための正しい方法ではありません。あなたのデフォルトのバインディングを上書きするImportDoctorを利用することができるはずです。 壊れスキーマが泡のウェブサイト上でを固定するためにドキュメントを見てください。

また、Pythonと泡のバージョンは、使用しているでしょうか?

from suds.client import Client
from suds.plugin import MessagePlugin

WSDL_url = "my_url?wsdl"

class MyPlugin(MessagePlugin):
    def marshalled(self, context):
        #print(str(context.envelope))
        context.envelope.nsprefixes['SOAP-ENV']='myText'

client = Client(WSDL_url, plugins=[MyPlugin()])
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top