[pyar] Enviar archivo via WebService SOAP

Mariano Reingart reingart en gmail.com
Lun Sep 13 22:08:24 ART 2010


2010/9/13 Pablo Codeiro <cutrix2k en gmail.com>:
> Lo que querria hacer, es pasar datos de una aplicacion Java, a un servidor
> en Python, via SOAP.
> En el servidor, tenemos el siguiente codigo (de prueba, por supuesto que no
> es tan simple la cosa :P) para uno de sus metodos:
>     @soapmethod(Attachment,_returns=String)
>     def archive_document(self,document):
>          fname = '/home/bla'
>         document.fileName = fname
>         document.save_to_file()
>         return fname

Se me hace que estas usando soaplib.
En su momento, como nos parecieron complicadas esas bibliotecas,
desarrollamos una nueva (PySimpleSoap) justamente para poder ajustar y
depurar mejor las cosas.

> Del lado de Java, estamos encodeando un archivo, via Base64.
> Por algun motivo que escapa a nuestros conocimientos, el archivo que se
> envia desde java, al decodificarlo, python lo decodifica "mal" (o java lo
> codifica mal, que es otra de las posibilidades).

¿Podés enviar los mensajes XML (algun ejemplo) para tratar de ver que
está pasando?
¿Probaste probarlo con SoapUI?

> Mi pregunta en estos momentos es: ¿Estamos manejando bien el objeto
> Attachment?

Como te comentaba antes, no te sabría decir porque esa librería mucho
no la manejo

Pero para este caso puntual quizas te convenga analizar lo que
necesita Java y armar los XML manualmente con Python (que es lo que
hicimos nosotros usano xml.dom.minidom).

De nuevo, la librería que armamos te podría servir como punto de partida:
http://code.google.com/p/pysimplesoap/source/browse/server.py

También podés mandar un mensaje a soap en python.org, donde los
desarrolladores de esa librería (y otras), te pueden aconsejar mejor.

> ¿Hay alguna otra forma de realizarlo (ya sea con la clase Attachment, u
> otra) mientras siga siendo un WebService?

Podés encodearlo en base64 y pasarlo en un campo string común (que
igualmente sería parecido a lo que esta haciendo por detrás, pero de
manera explicita y controlable).

Es mucho más fácil y compatible, y de hecho eso es lo que hizo la
AFIP, por ej. en el caso del web service de factura electrónica, para
enviarle los datos de acceso (un xml firmados digitalmente):
http://code.google.com/p/pyafipws/source/browse/wsaa.py

> Muchas gracias por la buena onda, mariano!

De nada :-)

Sds

Mariano Reingart
http://www.sistemasagiles.com.ar
http://reingart.blogspot.com



More information about the pyar mailing list