Noticias
Entradas
Comentarios
hacker emblem

Existen varios bugs reconocidos en la generación y uso del WSDL en soaplib v8.1. Los clientes Soapui y Axis no van a aceptar el WSDL generado por soaplib.

El primer bug se reconoce aquí: http://github.com/jkp/soaplib/issues/#issue/12

Está solucionado en el trunk de soaplib, editamos el fichero /usr/local/lib/python2.6/dist-packages/soaplib-0.8.1-py2.6.egg/soaplib/serializers/primitive.py y cambiamos una línea que nos indican aquí:

http://github.com/jkp/soaplib/commit/1dd0aa6e01ebb04a7c802f261c93534061de8b7d

El segundo bug visto en este enlace da una salida como ésta al acceder al servicio Web:

FutureWarning: The behavior of this method will change in future versions. Use specific ‘len(elem)’ or ‘elem is not None’ test instead.

Este bug provoca errores al utilizar el cliente Java desde Axis. En este caso buscaríamos dos líneas del fichero wsgi_soap.py con la siguiente sentencia:

  1. if payload:

las dos líneas vamos a cambiarlas por:

  1. if payload is not None:

Una solución a mano es modificar los ficheros primitive.py y wsgi_soap.py y compilarlos con

  1. python -mcompileall .

una vez dentro de cada ruta de los ficheros mencionados (es decir, dos veces en total).

Soaplib genera entonces un WSDL correcto, que Axis acepta perfectamente. Axis podrá también acceder sin problemas al servicio Web.

La mejor solución es generar un egg nuevo para la instalación con easy_install.

Pasos:

1. Nos bajamos el código de soaplib de aquí, por ejemplo en ~/Descargas.
2. Modificamos el fichero primitive.py y el fichero wsgi_soap.py
3. Generamos un nuevo egg:

  1. python setup.py bdist_egg

Esto crea un nuevo fichero en ~/Descargas/soaplib-0.8.1/dist/soaplib-0.8.1-py2.6.egg

4. Eliminamos todas las referencias al egg del soaplib antiguo, así como a sus ficheros:

  1. easy_install -mxN PackageName

5. También a sus ficheros:

  1. rm -rf /path.to/python2.6/site-packages/soaplib-0.8.1-py2.6.egg

6. Podemos instalar el nuevo egg:

  1. easy_install ~/Descargas/soaplib-0.8.1/dist/soaplib-0.8.1-py2.6.egg

Podemos probar wsdl2java descargando e instalando Axis:

1. Descargar Axis:

  1. wget http://apache.rediris.es/ws/axis2/1_5_1/axis2-1.5.1-bin.zip

2. Descomprimir Axis:

  1. unzip axis2-1.5.1-bin.zip

3. Accedemos a las utilidades de Axis:

  1. cd axis2-1.5.1/bin

4. Establecer variable JAVA_HOME:

  1. export JAVA_HOME=/path/to/jvm/jre

5. Lanzar wsdl2java contra nuestro servidor ejecutando:

  1. ./wsdl2java.sh -uri http://127.0.0.1:8080/ws?wsdl

A 1 persona le gusta esta entrada

Dejar un comentario