泡のpythonでのSOAPエンベロープを上書き
質問
私はカメラを持っていると私は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()])