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