Domanda

Ho una macchina fotografica e sto cercando di connettersi ad esso vis schiuma. Ho cercato di inviare XML grezzo e hanno trovato che l'unica cosa fermare la schiuma XML da lavoro è uno spazio dei nomi busta Sapone errato.

Lo spazio dei nomi busta è:

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

e voglio riscriverlo a:

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

Per aggiungere uno spazio dei nomi in python provo questo codice:

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

Ma quando aggiungo il SOAP-ENV allo spazio dei nomi non scrive come è insita nel schiuma attacchi. C'è un modo per sovrascrivere questo in schiuma?

Grazie per qualsiasi aiuto.

È stato utile?

Soluzione 2

Sono riuscito ad ottenere questo lavoro, la busta sapone è difficile codificato in bindings.py che viene memorizzato in suds.egg installato nel vostro sito-pacchetti. Ho cambiato l'indirizzo envelope SOAP per http://www.w3.org/2003/05/soap-envelope. Questo era compatibile con la mia macchina fotografica. Non sono riuscito a trovare un comando per sovrascrivere questa busta con acqua e quindi ho hardcoded in al bindings.py.

Grazie per qualsiasi aiuto

Altri suggerimenti

ho ottenuto intorno ad esso da escludere manualmente la variabile suds.binding.envns nel modulo bindings:

from suds.bindings import binding
binding.envns=('SOAP-ENV', 'http://www.w3.org/2003/05/soap-envelope')

Da qui in poi, tutto va bene (con il mio di servizio, che è)

Aggiornamento manuale binding.py sicuramente non è la strada giusta da percorrere. Si dovrebbe essere in grado di utilizzare il ImportDoctor per ignorare le associazioni predefinite. Date un'occhiata alla documentazione per fissaggio schemi rotti sul sito Suds.

Inoltre, le versioni di Python e schiuma stai usando?

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()])
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top