Guia de Apache Axis
1.Introducción
a Axis
2.Instalación
de Axis sobre Tomcat
3.Creación
del Servicio Web
4.Activación
el servicio Web
5.Creación
de un cliente utilizando un Proxy generado con las herramientas de
Axis
6.Creación
de un cliente nativo.
7.Otros
comandos y herramientas de Axis
8.Conclusiones
En
nos
involucramos diariamente en el desarrollo de proyectos software de
diversos tipos, uno de estos sectores es el de la interoperabilidad e
integración de sistemas heterogéneos distribuidos.
1.
Introducción
Apache
Axis es una implementación OpenSource de SOAP que proporciona
un entorno de ejecución para Servicios Web implementados en
Java.
A
grandes rasgos, un Servicio Web es un conjunto de métodos que
realizan una funcionalidad que se exponen al resto de las
aplicaciones.
Cualquier
aplicación sea cual sea su plataforma o lenguaje en la que
está implementada podrá invocar los métodos que
expone el Servicio Web.
Por
ejemplo, una aplicación .Net (Implica una plataforma Windows)
podría invocar métodos expuestos por un Servicio Web
Java ejecutándose en una plataforma Linux.
Esto
se consigue utilizando protocolos estándar como XML y HTTP y
se evitan los problemas con Firewalls, etc. que otras tecnologías
similares como CORBA o RMI tenían.
Entre
otras cosas Axis proporciona:
-
Un
entorno de ejecución para Servicios Web Java (*.jws)
-
Herramientas
para crear WSDL desde clases java.
-
Herramientas
para crear clientes Java desde un WSDL.
-
Herramientas
para desplegar, probar y monitorizar Servicios Web.
-
Integración
con servidores de aplicaciones y contenedores de Servlets.
2.
Instalación de Axis sobre Tomcat
a.
Descárgate la versión binaria de Axis desde
Descomprime el fichero.
Copia el directorio completo axis al directorio:
TOMCAT_HOME/webapps/axis
ver si Axis está instalado mostramos la URL
http://localhost:8080/axis/happyaxis.jsp
y nos mostrará una página de bienvenida con la
configuración de Axis.
3.
Creación del Servicio Web
Para
crear un Servicio Web creamos las clases con la lógica y
métodos que deseamos para nuestro Servicio Web. Para nuestro
ejemplo vamos a crear un Servicio Web que proporcione métodos
para sumar, restar, multiplicar y dividir dos números enteros.
Calculadora.java
/** * Servicio Web que realiza las operaciones Suma, Resta, Multiplicación y División de dos números * @author Autentia Real Business Solutions. */ public class Calculadora { /** * Realiza la suma dos números enteros * @param x Primer operando * @param y Segundo operando * @return Devuelve el resultado de la operación (x+y) */ public int suma(int x, int y) { return x + y; } /** * Realiza la resta dos números enteros * @param x Primer operando * @param y Segundo operando * @return Devuelve el resultado de la operación (x-y) */ public int resta(int x, int y) { return x - y; } /** * Realiza la multiplicación de dos números enteros * @param x Primer operando * @param y Segundo operando * @return Devuelve el resultado de la operación (x*y) */ public int multiplica(int x, int y) { return x * y; } /** * Realiza la división de dos números enteros * @param x Primer operando * @param y Segundo operando * @return Devuelve el resultado de la operación (x/y) */ public int divide(int x, int y) { return x / y; } }
4. Activación
del Servicio Web
Ahora
vamos a desplegarlo (= activarlo) en el Tomcat para que pueda ser
invocado desde otra aplicación.
(Axis
también proporciona un servidor Stand Alone para probar
Servicios Web, pero para nuestro ejemplo nos apoyaremos en el
servidor de aplicaciones Tomcat )
Para
hacerlo tenemos dos formas:
-
Renombrar
el fichero Calculadora.java a Calculadora.jws y copiarlo al
directorio TOMCAT_HOME/webapps/axis. (Si hemos instalado
correctamente AXIS, todos los ficheros acabados en .jws serán
procesados por Axis.). De esta manera la primera vez que se invoque
el Web Service, será compilado automáticamente.
-
Compilar
el fichero Calculadora.java y colocamos el .class en el directorio
TOMCAT_HOME/webapps/axis/WEB-INF/classes. Ahora definimos su
descriptor de activación o despliegue (wsdd) y ejecutamos el
comando:
java
org.apache.axis.client.AdminClient Calculadora.wsdd
Calculadora.wsdd
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <!-- Definimos el servicio Web a activar: Nombre y tipo de Servicio Web. RPC Llamadas a procedimientos remotos con ejecución síncrono --> <service name="CalculadoraWS" provider="java:RPC"> <!-- Nombre de la clase que implementa los métodos expuestos --> <parameter name="className" value="Calculadora"/> <!-- Expone todos los métodos como visibles desde el exterior --> <parameter name="allowedMethods" value="*"/> </service> </deployment>
Ahora
si deseamos ver una lista de los Servicios Web activados en la
máquina local ejecutamos navegamos a la dirección:
http://localhost:8080/axis/servlet/AxisServlet
Deberá
aparecer nuestro Servicio Web CalculadoraWS y una lista con los
métodos que exporta.
Illustration
1: Servicios Web activos
5.
Creación de un cliente utilizando un Proxy generado con las
herramientas de Axis
La
forma más fácil y rápida para comenzar a
utilizar los métodos que expone un Servicio Web es apoyarnos
en un Proxy. Un Proxy o Stub no es más q un conjunto de clases
que nos abstraen de los detalles de la comunicación con el
WebService.
Para
generar el Proxy debemos tener la especificación del Servicio
Web en formato WSDL (Web Service Description Language). Este formato
es un estándar de definición de servicios Web. Es
independiente de la plataforma, de lenguajes de programación.
Y básicamente define: donde, como y que hace un Servicio Web.
Para
obtener la definición del servicio Web (WSDL) podemos realizar
lo de dos formas:
-
Navegando
a la dirección:
http://localhost:8080/axis/services/CalculadoraWS?wsdl
-
Ejecutando
el comando:
java
org.apache.axis.wsdl.Java2WSDL
-o
CalculadoraWS.wsdl
-l
http://localhost:8080/axis/services/CalculadoraWS
-p
Calculadora.class
Illustration
2: WSDL del Servicio Web CalculadoraWS
Guardamos
esa información en el fichero CalculadoraWS.wsdl .
Ahora
ejecutamos el comando:
java
org.apache.axis.wsdl.WSDL2Java CalculadoraWS.wsdl
Y
Axis nos generará automáticamente las clases Java que
hacen de Proxy para que nuestras aplicaciones puedan hacer uso de los
métodos expuestos por el Servicio Web.
import localhost.axis.services.CalculadoraWS.*; /** * Prueba el Web Service * @author Autentia Real Business Solutions */ public class Class1 { public static void main(String[] args) { localhost.axis.services.CalculadoraWS.CalculadoraServiceLocator locator; localhost.axis.services.CalculadoraWS.Calculadora calc; try { locator = new CalculadoraServiceLocator(); calc = locator.getCalculadoraWS(); System.out.println(calc.suma(6, 2)); System.out.println(calc.resta(3, 2)); System.out.println(calc.multiplica(9, 2)); System.out.println(calc.divide(100, 4)); } catch (Exception ex){ System.out.println(ex); } } }
Compile
y ejecute la aplicación para ver el resultado.
6.
Creación de un cliente Nativo
Ahora
vamos a hacer un cliente a manita utilizando las clases de Axis.
El
cliente simplemente multiplicará dos números, pero si
observa el código fuente este es bastante didáctico.
Observe el texto resaltado pues estos deben ser iguales a los que
contiene el WSDL. Es decir, deben coincidir la dirección del
servicio, el nombre del método a invocar y el nombre de los
parámetros necesarios para invocar el método.
import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import javax.xml.rpc.ParameterMode; /** * Prueba el Web Service 2 * @author Autentia Real Business Solutions */ public class Class2 { public static void main(String [] args) throws Exception { String endpoint = "http://localhost:8080/axis/services/CalculadoraWS"; Integer op1 = new Integer(100); Integer op2 = new Integer(200); Service service = new Service(); Call call = (Call) service.createCall(); // Establecemos la dirección en la que está activado el WebService call.setTargetEndpointAddress( new java.net.URL(endpoint) ); // Establecemos el nombre del método a invocar call.setOperationName( "multiplica" ); // Establecemos los parámetros que necesita el método // Observe que se deben especidicar correctamente tanto el nómbre como el tipo de datos.. // esta información se puede obtener viendo el WSDL del servicio Web call.addParameter( "in0", XMLType.XSD_INT, ParameterMode.IN ); call.addParameter( "in1", XMLType.XSD_INT, ParameterMode.IN ); // Especificamos el tipo de datos que devuelve el método. call.setReturnType( XMLType.XSD_INT ); // Invocamos el método Integer result = (Integer) call.invoke( new Object [] { op1, op2 }); // Imprimimos los resultados System.out.println("El resultado de la multiplicación es: " + result); } }
7.
Otros comandos y herramientas de AXIS
Además
de los comandos mostrados anteriormente, Axis nos proporciona entre
otros los siguientes comandos o utilidades:
Para
obtener información acerca de la configuración de axis
puede ejecutar el comando:
java
org.apache.axis.client.AdminClient list
Ejecutar
Axis sin Tomcat ni ningun otro servidor de aplicaciones:
java
org.apache.axis.tranport.http.SimpleAxisServer <port>
Utilidad
para ver y depurar los mensajes SOAP implicados en la comunicación:
Java
org.apache.axis.utils.tcpmon <listeningPort> <targetServeName>
<targetServerPort>
8.
Conclusiones
Apache
Axis es una implementación sólida, madura y extendida
para ejecutar, testear y administrar Servicios Web implementados en
Java. Además detrás de Axis hay importantes
organizaciones como Apache, por lo que eso nos da confianza a la hora
de elegir Axis como entorno de ejecución de servicios Web.
Axis
nos proporciona herramientas suficientes para crear y depurar
nuestros Servicios Web de una manera fácil.
Cuando intento utilizar ésto, para consumir un WebService desarrollado con .NET, me dice que \\\»El servidor no reconoció el valor del encabezado HTTP SOAPAction:\\\» Alguien sabe por qué puede ser ésto?
Gracias y un saludo
Muy bueno 😉
En que carpeta dejo el
arcchivo Calculadora.wsdd?
Luego en que carpeta ejecuto
java org.apache.axis.client.AdminClient Calculadora.wsdd?
Gracias…
El archivo para descargar el axis no se encuentra disponible 🙁
alguna otra url para descargar el .zip de axis