Web Services con Axis2 y Netbeans II, Creación de un cliente
En el artículo anterior explicabamos paso a paso cómo crear nuestro primer Web Service. En este artículo os enseñaré como realizar un cliente que invoque a nuestro primer servicio web, es decir un cliente que hable con nuestro servidor.
Si recordais, el servicio web que habíamos desarrollado era capaz de realizar la suma de 2 números. Si queremos conocer qué funcionalidad nos ofrece el servicio y cómo comunicarnos con él, nos valdremos de un fichero WSDL (Web Services Description Language) que no es más que un descriptor de los servicios en formato XML.
Para acceder al fichero WSDL accederemos a la siguiente dirección: http://localhost:8080/axis2/services/Calculadora?wsdl .
Axis permite generar a partir de un fichero WSDL toda una serie de clases cliente que resuelven la comunicación con el servicio web y que utilizaremos para comunicarnos con él. Para tal tarea, una vez que hemos accedido a la anterior dirección, procederemos a guardar el resultado en un fichero con el nombre calculadora.wsdl. Para la generación de las clases utilizaremos la utilidad wsdl2java , que viene dentro de la distribución binaria de axis2.
Abrimos un terminal en nuestro ordenador y ejecutamos el siguiente comando para obtener las clases necesarias: (recordad los pasos que seguimos al actualizar el PATH en el artículo anterior)
C:\calculadora\wsdl2java -uri C:\calculadora\Calculadora.wsdl |
Este comando nos generará una serie de fuentes java en la misma carpeta donde lo ejecutemos dentro de una nueva carpeta con el nombre “src”. En nuestro caso habrá creado los siguientes ficheros:
src/es/calculadora/CalculadoraCallbackHandler.java
src/es/calculadora/CalculadoraStub.java
Con estas clases crearemos un nuevo proyecto Java en Netbeans con el nombre ClienteCalculadora. El proyecto después de haber incluido las clases y haber importado las librerias de axis2 quedará con la siguiente estructura:
Con todo esto ya podemos utilizar las clases que nos ha generado Axis y crearo un programa de prueba que se conecte con nuestro servicio web. Crearemos un programa de prueba como el siguiente:
package es.calculadora; import java.rmi.RemoteException; public class PruebaConexion { public static void main(String[] args) { /* * Clases que nos abstraen de la conexión con el web service * generadas a través del fichero wsdl */ CalculadoraStub calculadora = null; CalculadoraStub.Sumar request = null; CalculadoraStub.SumarResponse response = null; try { calculadora = new CalculadoraStub(); request = new CalculadoraStub.Sumar(); // establecemos los parámetros request.setSumando1(7); request.setSumando2(2); // invocamos al web service response = calculadora.sumar(request); // mostramos la respuesta System.out.println("La suma es: " + response.get_return()); } catch (RemoteException excepcionDeInvocacion) { System.err.println(excepcionDeInvocacion.toString()); } } } |
El resultado que nos devolverá la ejecución del programa anterior será: “La suma es 9”. Y ya está! ya hemos creado nuestro primer cliente que se conecta a un servicio web.
Hola tengo estos errores en el CalculadoraStub.java
error: ADBDataSource is abstract; cannot be instantiated
new org.apache.axis2.databinding.ADBDataSource(this,MY_QNAME);
error: no suitable method found for createOMElement(OMDataSource,QName)
return factory.createOMElement(dataSource,MY_QNAME);
Ayudame por favor ya tengo todas las librerias de axis2 pero aun asi me marca error.
De hecho eran 3 erroores pero comente uno que no era tan vital y solo quedaron esos dos.
O mandame tus librerias para anexarlas talvez tenga un problema de version.