icono_twiter icono Facebook
Carlos García Pérez

Técnico especialista en informática de empresa (CEU).

Ingeniero Técnico en Informática de Sistemas (UPM)

Creador de MobileTest, Haaala!, Girillo, toi18n.

Charla sobre desarrollo de aplicaciones en Android.

Ver todos los tutoriales del autor

Fecha de publicación del tutorial: 2006-04-07

Tutorial visitado 87.337 veces Descargar en PDF
Guia de Apache Axis

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 Autentia 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 http://ws.apache.org/axis/

b. Descomprime el fichero.

c. Copia el directorio completo axis al directorio: TOMCAT_HOME/webapps/axis


Para 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:

  1. 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.

  2. 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


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.





A continuación puedes evaluarlo:

Regístrate para evaluarlo

Por favor, vota +1 o compártelo si te pareció interesante

Share |
Anímate y coméntanos lo que pienses sobre este TUTORIAL:

Fecha publicación: 2011-11-07-10:34:42

Autor: jcarmonaloeches

Muy bueno ;)

Fecha publicación: 2009-10-21-16:56:06

Autor: jose_minglein

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

Fecha publicación: 2009-09-14-09:05:25

Autor:

[Carlos García] Lee otros artículos de Axis dentro del propio web... ese está bastante anticuado Usa el buscador dentro de Adictos al trabajo y te saldrán más tutoriales: www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=axiswssample www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=restfulaxis Un saludo.

Fecha publicación: 2009-09-14-08:36:27

Autor:

[celer] Hos felicitos y agradesco por todos los tutoriales que he podido leer- Sin embargo este tutorial es bastante impreciso y todo me sale mal. saludos, celer.

Fecha publicación: 2009-06-10-03:10:28

Autor:

[Diego] El tutorial está bien pero... ¿alguien sabe como desarrollar una operación que en vez de devolver un tipo (String, Integer, int, String[], etc.) devuelva un objeto definido por nosotros? por ejemplo: LibroDTO getLibro (int ISBN) donde los atributos de LibroDTO son: String titulo String autor Gracias.

Fecha publicación: 2009-04-06-11:20:36

Autor:

[jaime] Trate de hacer todo al pie de la letra pere al igual que Zubi tampoco me funciono el despliegue del web service, espero puedas complementar un poco màs el tutorial. De todas formas gracias..

Fecha publicación: 2008-06-12-08:55:20

Autor:

[César] Muy bueno y sencillo tutorial, muchas gracias. A ver si lo podéis actualizar algún día para Axis2. Saludos

Fecha publicación: 2007-04-27-10:50:00

Autor:

[cristina] Gracias por el tuturial, me ha sido muy util.

Fecha publicación: 2006-10-30-05:24:02

Autor:

[zubi] hola, he intentando seguir estos pasos para generar un cliente,en axis 1.4,pero parece que la cosa ya no es lo mismo. podeis comentarme que habria cambiado. sin olvidar que el tutrial como todo lo que publicais es escelente. saludos y gracias

Fecha publicación: 2006-09-27-01:46:03

Autor:

[Juan] Excelente

Fecha publicación: 2006-05-21-06:06:10

Autor:

[Marco Besteiro] Claro y conciso. Como debe ser. Un 10.

Fecha publicación: 2006-05-16-10:56:43

Autor:

[Ricardo Tillero] Excelente tutorial, que resume muy facil la creacion de servicios web con axis. Una pregunta de emergencia, estoy realizando un proyecto que requiere el acceso de un servcio web desde un cliente java, pero desde una clase que no es main, el problema es el siguiente cuando compilo el proyecto da error de no reconcimiento de los paso para accesar al SW, cuando compilo la clase con los pasos de acceso a SW desde la clase main todo va ok, la pregunta es el acceso al SW solo se hace desde la clase main?????...Gracias de antemano

Fecha publicación: 2006-04-26-06:02:50

Autor:

[Antonio] Perfecto el tutorial, como se espera. Pero yo lanzo la siguiente pregunta: Axis y WSDP. Cual es el mejor, son competidores (entiendo que no) y como se maneja Axis a la hora de subir al UDDI (hay alguna manera)

Fecha publicación: 2006-04-11-09:18:45

Autor:

[Daniel] Hola Aunque el tutorial queda bastante lejos de lo que me se puede hacer, es un excelente inicio. Enhorabuena. Sobre todo por los dos metodos de trabajar. Puede sacar de un apuro a un "novice".