"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 :
El ejemplo anterior hace uso de Java tanto en el Cliente como Servidor, para llevar acabo la verdadera interoperabilidad ofrecida por SOAP es necesario generar un archivo con el WSDL ("Web-Services Description Language"), a través del cual será posible generar Clientes de diversos lenguajes.
Aún falto ejecutar ("deploy") el "Web-Service" dentro de Axis esto permite el primer paso para que sea descubierto en otros sistemas, vía UDDI ("Universal Description, Discovery and Integration Directory") .
Al utilizar "Web-Services" nativos (*.wsd) es necesario poseer el Código Fuente del "Web-Service", esto restringe que muchas Clases/Métodos existentes puedan ser invocados como "Web-Services".
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.
|
