Clientes De Web Service

De Dos Ideas.
Saltar a: navegación, buscar


Existen varias herramientas que ayudan en la generación de clientes para Web Service. Estas herramientas parten de WSDL y generan el código necesario para realizar la invocación.

En Java, una de las herramientas más utilizadas es Apache Axis 2, y SoapUI como herramienta gráfica para testear y generar clientes de los servicios.

Apache Axis 2

Axis2 es una herramienta Java para la generación web services, tanto clientes como las clases para el servidor.

Generación del cliente

Para la generación del cliente se usa el comando wsdl2java que provee Axis2. Una forma simple de utilizar esta utilidad es a través de SoapUI.

Axis2 ofrece 3 formas principales para generar clientes:

  • Axis2 Databinding Framework (ADB)
  • XMLBeans
  • JiBX

ADB es la opción más simple, y genera solamente dos clases: una clase para el servicio, y una clase para un callback de invocaciones (en el caso de que se quieran hacer invocaciones asincrónicas). La clase del servicio contiene varias inner class con los mensajes de parámetros y retornos.

XMLBeans y JiBX son mucho más flexibles que ADB, pero también más complejas de usar. En general, si el servicio es pequeño y no complejo, ADB suele ser la mejor opción.

Utilización de un cliente ADB de Axis 2

Supongamos un web service Invasion que contiene la siguiente operación:

invadirPlaneta(planeta : Planeta) : PlanDeInvasion

La operación invadirPlaneta recibe como parámetro un tipo de datos complejo Planeta y devuelve un tipo de datos complejo PlanDeInvasion.

Al usar wsdl2java a través de ADB, se generan dos clases:

InvasionStub.java
InvasionCallbackHandler.java

La clase InvasionStub tiene dos inner class que representan al Planeta y al PlanDeInvasion

InvasionStub.Planeta
InvasionStub.PlanDeInvasion

Invocación sincrónica

public void testInvadirPlaneta() throws java.lang.Exception {

   InvasionStub invasionStub = new InvasionStub();      
   InvasionStub.Planeta planeta = new InvasionStub.Planeta();
   planeta.setNombre("Tierra");
   planeta.setNivelTecnologico(2);
   InvasionStub.PlanDeInvasion plan = invasionStub.invadirPlaneta(planeta);
   assertNotNull(plan);
   assertNotNull(plan.getFechaInvasion());

}

Invocación asincrónica

En la invocación asincrónica se debe crear un callback que será ejecutado al momento de llegar la respuesta del web service.

public void testInvadirPlaneta() throws java.lang.Exception {

   InvasionStub invasionStub = new InvasionStub();      
   InvasionStub.Planeta planeta = new InvasionStub.Planeta();
   planeta.setNombre("Tierra");
   planeta.setNivelTecnologico(2);
   InvasionStub.PlanDeInvasion plan = invasionStub.startinvadirPlaneta(planeta, , new InvadirPlanetaCallback());
   assertNotNull(plan);
   assertNotNull(plan.getFechaInvasion());

}

private class InvadirPlanetaCallback extends InvasionCallbackHandler {

   public void receiveResultinvadirPlaneta(PlanDeInvasion result) {
       assertNotNull(plan);
       assertNotNull(plan.getFechaInvasion());
   }
   public void receiveErrorinvadirPlaneta(java.lang.Exception e) {
       fail();
   }

}

Ver también