miércoles, mayo 19, 2010

Consumir WebServices NuSoap desde Java con Axis2

Bueno.... hoy me toco pelear de nuevo contra las malignas fuerzas de los frameworks no estandarizados... el enemigo era NuSoap.

NuSoap es una herramienta que sirve para crear y consumir servicios web desde PHP.... escucharon bien... PHP!!!

Y pues... como era de esperarse hace cosas raras... genera en webservices estilo RPC codificados... y pues... ya desde ahi nuestro buen amigo JAX-WS no funciona... hay que volver al temible JAX-RPC

Yo no le se muy bien al JAX-RPC... he tenido experiencias traumaticas.... nunca funciona... debe tener alguna configuración rara o algo...

Asi que siempre recurro al poderoso Axis2... normalmente puede contra todos esos webservices locos a los que me he tenido que conectar...

Hay que descargar Axis2

Ponerlo en cualquier lado...

Entrar con consola a la carpeta bin y ahi...


  1. mkdir output
  2. ./wsdl2java.sh -uri http://ruta/a/webservice?wsdl -o output/prueba/
  3. cd output/prueba
  4. AXIS2_HOME="/ruta/a/axis2" ant

Nos generara en la carpeta output/prueba/bin/ un jar con el codigo Stub para llamar al webservice...

Desde Netbeans... deben agregar las librerias de Axis2... esas las agregan desde Herramientas->Complementos->Plugins disponibles->Axis2 Support... luego Propiedades->Bibliotecas->Agregar Jar/Carpeta... buscan el jar que generamos... ahi mismo deben entrar a Agregar Biblioteca y buscar Axis 2

Y pues.. el codigo java depende mucho de como se llame el paquete de tu webservice... seria simple como

  1. ws.claseStub servicio = ws.claseStub();
  2. ws.claseStub.Metodo met = new ws.claseStub.metodo();
  3. met.setParametro("Algo");
  4. //La magia para el NuSoap esta aqui!!
  5. servicio._getServiceClient().getOptions().
    setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED,
    Boolean.FALSE);
  6. servicio.metodo(met);

Y asi amigos... nos comunicamos con NuSoap.... el maldito no soporta el tipo de transporte HTTP chunk como un webservice normal... pero tuvieron que pasar varios tcpdumps para llegar a esa conclusión... espero que le quite el dolor de cabeza a alguien


6 comentarios:

Anónimo dijo...

Q tal como t va, podrias subir un ejemplo con imagenes de como instancias el wsdl con axis, tengo q consumir con netbeans un wsdl construido con nusoap.

eduin dijo...

Hola Daniel, tengo problema al publicar un Web Service con netbeans y axis2. En la lógica del WS se realiza una conexion con Hibernate a Oracle, pero cuando pruebo el servicio no encuentra el archivo hibernate.cfg.xml. Ya he probado con varias soluciones, incluso cambiando la ubicación del archivo, pero ninguna funciona. Quisiera saber si ya te ha pasado. y si podrías ayudarme.

Danyel Darkcloud dijo...

Si tienes el hibernate.cfg.xml en un paquete distinto al src/

sessionFactory = new Configuration().configure("/package1/package2/hibernate/hibernate.cfg.xml").buildSessionFactory();

Si tienes el hibernate.cfg.xml en el src/

sessionFactory = new Configuration().configure("/hibernate.cfg.xml").buildSessionFactory();

Jose Cupasachoa dijo...

Muchas gracias y si me quito un enorme dolor de cabeza

Anónimo dijo...

Solo configurar NuSoap para que devuelva JAX-WS te alivia los dolores de cabeza.

$server->configureWSDL('ws_test', 'urn:WSTEST',false,'document');

Unknown dijo...

Muchísimas gracias men!!! excelente post!!! solucion 100% efectiva!!!