Diferencia entre revisiones de «Clientes De Web Service»

De Dos Ideas.
Saltar a: navegación, buscar
(Página nueva: 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 invoca...)
 
(Utilización de un cliente ADB de Axis 2)
Línea 32: Línea 32:
 
  InvasionStub.PlanDeInvasion
 
  InvasionStub.PlanDeInvasion
  
La invocación sincrónica del método:
+
====Invocación sincrónica====
 
<code java>
 
<code java>
 
public void testInvadirPlaneta() throws java.lang.Exception {
 
public void testInvadirPlaneta() throws java.lang.Exception {
Línea 48: Línea 48:
 
</code>
 
</code>
  
 +
====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.
  
 +
<code java>
 +
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();
 +
    }
 +
}
 +
</code>
  
 
==Ver también==
 
==Ver también==
 
* [[Web Service Con Spring]]
 
* [[Web Service Con Spring]]
 
* [http://ws.apache.org/axis2/ Apache Axis 2]
 
* [http://ws.apache.org/axis2/ Apache Axis 2]

Revisión del 13:21 5 sep 2008

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