2010-03-30 4 views
5

Ho una fotocamera e sto provando a collegarmi ad esso vis suds. Ho cercato di inviare xml raw e ho scoperto che l'unica cosa che impedisce l'utilizzo di xml suds è uno spazio dei nomi inviluppo di soap non corretto.Sovrascrivi il Soap Envelope in Suds python

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 lo SOAP-ENV allo spazio dei nomi, esso non scrive in quanto è codificato nei binding di sud. C'è un modo per sovrascrivere questo in sud?

Grazie per qualsiasi aiuto.

+0

Cosa tipo di errore ottieni? Potresti elaborare e pubblicare il tuo codice? – systempuntoout

risposta

1

Sono riuscito a farlo funzionare, la busta di sapone è codificata in bindings.py che è memorizzata in suds.egg installata nei pacchetti del sito. Ho cambiato l'indirizzo della busta SOAP su http://www.w3.org/2003/05/soap-envelope. Questo era compatibile con la mia macchina fotografica. Non sono stato in grado di trovare un comando per sovrascrivere questa busta in suds, quindi l'ho codificato con il bindings.py.

Grazie per qualsiasi aiuto

+0

Per come inserire l'intestazione in suds, controlla la mia domanda precedente. Pubblicherò il mio codice perché so quanto poca documentazione ci sia. – chrissygormley

1

Aggiornamento manuale binding.py sicuramente non è la strada giusta da percorrere. Dovresti essere in grado di utilizzare lo ImportDoctor per sovrascrivere i collegamenti predefiniti. Dai un'occhiata alla documentazione di fixing broken schemas sul sito web di Suds.

Inoltre, quali versioni di Python e suds stai usando?

4

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 mio servizio, cioè)

0
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()])