2010-03-30 18 views
5

Tengo una cámara y estoy tratando de conectarla a vissds. He intentado enviar xml sin procesar y he descubierto que lo único que impide que funcionen los xml es un espacio de nombres de sobre de Soap incorrecto.Sobrescribe el sobre de jabón en Suds python

El espacio de nombres sobre es:

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

y quiero volver a escribir a:

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

Con el fin de añadir un espacio de nombres en Python que trato este código:

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

Pero cuando agrego el SOAP-ENV al espacio de nombres, no escribe ya que está codificado en los enlaces de espuma. ¿Hay alguna manera de sobrescribir esto en espuma?

Gracias por cualquier ayuda.

+0

Lo ¿Qué tipo de error obtiene? ¿Podría elaborar y publicar su código? – systempuntoout

Respuesta

1

Me las arreglé para que esto funcione, el sobre del jabón está codificado en bindings.py que está almacenado en suds.egg instalado en sus paquetes de sitio. Cambié la dirección del sobre de SOAP a http://www.w3.org/2003/05/soap-envelope. Esto era compatible con mi cámara. No pude encontrar un comando para sobrescribir este sobre en espuma así que lo codifiqué en bindings.py.

Gracias por cualquier ayuda

+0

Para saber cómo ingresar encabezados en suds echa un vistazo a mi pregunta anterior. Publicaré mi código ya que sé la poca documentación que hay. – chrissygormley

1

Actualización manual binding.py definitivamente no es el camino correcto a seguir. Debería poder utilizar el ImportDoctor para anular sus enlaces predeterminados. Eche un vistazo a la documentación para fixing broken schemas en el sitio web de Suds.

Además, ¿qué versiones de Python y espuma estás usando?

4

llegué a su alrededor por el mando manual sobre la variable suds.binding.envns en el módulo bindings:

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

A partir de aquí, todo va bien (con mi servicio, es decir)

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()]) 
Cuestiones relacionadas