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.

War es hilfreich?

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()])
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top