"Web-Services" Nativos (*.wsd)

"Web-Services" Nativos (*.wsd)

Esta metodología para diseñar "Web-Services" en Axis es una de las maneras más sencillas para ejemplificar el uso de SOAP; para efectos didácticos la Clase empleada como "Web-Service" será sumamente sencilla para lograr enfatizar los conceptos de esta Tecnología.

Código Fuente Calculadora.jws
public class Calculadora {
  public int sumar(int x, int y)
  {
    return x + y; 
  }


  public int restar(int x, int y)
  {
    return x - y;
  }
}

La Clase Java anterior define dos métodos los cuales suman y restan respectivamente dos valores proporcionados como datos de entrada, nótese que esta Clase es definida con la terminación .jws(Java Web Service) y no con la clásica terminación .java.

Para ejecutar esta Clase dentro de Axis debe ser colocada bajo el WAR Axis ("Web-Archive") definido anteriormente, la clase debe ser colocada como Código Fuente y no debe ser compilada; recuerde que debido al contenido del archivo web.xml en este WAR ("Web-Archive"), todo archivo terminado en .jws será procesado por Axis.

Accesando "Web-Services"

Si en este momento revisa el URL :http://www.servidorprueba.com:8080/axis/Calculadora.jws debe observar una consola de Axis indicando los servicios que se encuentran registrados ("deployed"), en dicho registro aún no se encuentra el "Web-Service" de Calculadora.jws.

Sin embargo, a pesar que el "Web-Service" aún no se encuentra registrado ("deployed"), es posible accesarlo de un Cliente, esta es una de las ventajas de utilizar "Web-Services" de manera nativa (*.jws), el registro ("deployment") de "Web-Services" será descrito en la ultima sección de esta guia.

A continuación se describe el Cliente que puede accesar el "Web-Service" Calculadora.jws.

Código Fuente ClienteCalc.java
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;

import javax.xml.rpc.ParameterMode;

public class ClienteCalc
{
   public static void main(String [] args) throws Exception {

       String endpoint = "http://servidorprueba.com:8080/axis/Calculadora.jws";
              
       if (args == null || args.length != 3) {
           System.err.println("Uso: ClienteCalc <sumar|restar> arg1 arg2");
           return;
       }
       
       String method = args[0];
       if (!(method.equals("sumar") || method.equals("restar"))) {
           System.err.println("Uso: ClienteCalc <sumar|restar> arg1 arg2");
           return;
       }
       
       Integer i1 = new Integer(args[1]);
       Integer i2 = new Integer(args[2]);

       Service  service = new Service();
       Call     call    = (Call) service.createCall();

       call.setTargetEndpointAddress( new java.net.URL(endpoint) );
       call.setOperationName( method );
       call.addParameter( "op1", XMLType.XSD_INT, ParameterMode.IN );
       call.addParameter( "op2", XMLType.XSD_INT, ParameterMode.IN );
       call.setReturnType( XMLType.XSD_INT );

       Integer ret = (Integer) call.invoke( new Object [] { i1, i2 });
       
       System.out.println("Resultado : " + ret);
   }
}

Este Cliente que accesa el "Web-Service" es una simple Clase que puede ser ejecutada de una consola ("shell"), otra alternativa pudo haber sido diseñar otro Servlet o posiblemente un EJB que accesará la funcionalidad; para compilar este Cliente que accesa el "Web-Service" es necesario que las diversas librerías de Axis se encuentren en el CLASSPATH de compilación, esto se debe a que el Cliente utiliza diversas Clases Axis para llevar acabo la comunicación con el "Web-Service".

Una vez compilada esta Clase basta ejecutar una secuencia como la siguiente para llamar el "Web-Service":

# java ClienteCalc sumar 234 23
Resultado : 257
# java ClienteCalc restar 34 42
Resultado : -8
# java ClienteCalc sumar 23 1
Resultado : 24

El despliegue anterior demuestra tres invocaciones hacia el "Web-Service" Calculadora.jws.

Deficiencias de "Web-Services" Nativos (*.wsd)

A pesar de la sencillez del ejemplo anterior, su misma sencillez lo hace que posea diversas carencias :

En la última sección de esta guia es descrito como se lleva acabo el diseño de un "Web-Service" a través de WSDL/WSDD.