Überschreiben Sie den Soap-Umschlag in Suds Python
Frage
Ich habe eine Kamera und ich versuche es über Schaum zu verbinden. Ich habe versucht, roh xml und habe festgestellt, zu senden, dass die einzige Sache, den XML-Schaum von Arbeits ist ein falscher Soap Umschlag Namensraum zu stoppen.
Der Umschlag Namespace ist:
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
und ich möchte es neu zu schreiben:
xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope"
Um einen Namespace in Python hinzufügen versuche ich diesen Code ein:
message = Element('Element_name').addPrefix(p='SOAP-ENC', u='www.w3.org/ENC')
Aber wenn ich fügen Sie den SOAP-ENV
auf den Namespace es nicht schreiben, wie es in den Laugen Bindungen fest einprogrammiert ist. Gibt es eine Möglichkeit, dies in Schaum zu überschreiben?
Vielen Dank für jede Hilfe.
Lösung 2
ich es geschafft, diese Funktion zu erhalten, wird die Seife Umschlag hart in bindings.py
codiert, die in suds.egg
in Ihrer Website-Pakete installiert gespeichert ist. Ich änderte die SOAP-Umschlag-Adresse zu http://www.w3.org/2003/05/soap-envelope
. Dies war mit meiner Kamera kompatibel. Ich war nicht in der Lage, einen Befehl zu finden diesen Umschlag in Schaum zu überschreiben, damit ich es hart codiert in den bindings.py.
Vielen Dank für jede Hilfe
Andere Tipps
Ich habe um ihn herum durch manuelles Überschreiben der suds.binding.envns
Variable im bindings
Modul:
from suds.bindings import binding
binding.envns=('SOAP-ENV', 'http://www.w3.org/2003/05/soap-envelope')
auf Von hier aus alles gut geht (mit meinem Service, das ist)
Manuelles Update binding.py
ist definitiv nicht der richtige Weg zu gehen. Sie sollten die ImportDoctor
nutzen können, Ihre Standardbindungen außer Kraft zu setzen. Werfen Sie einen Blick in die Dokumentation für Festsetzung gebrochen Schemas auf der Suds Website .
Auch, was Versionen von Python und Schaum verwenden Sie?
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()])