Crear una estructura compleja del tipo Array en un servicio web Axis2

1
24582

Crear una estructura compleja del tipo Array en un servicio web Axis2

0. Índice de contenidos.

1. Introducción

En este tutorial se pretende enseñar a crear la primera de las estructura complejas que se pueden implementar
en los servicios web : los arrays

Hasta el momento casi todos los servicios web utilizan como parámetros o bien devuelven tipos simples (recordar
que venían definidos por el XML Schema) como pueden ser un int, double, String, etc. Pero hay veces en que se
necesitan devolver algunas estructuras más complejas como puede ser un array o bien un Java bean

El array es la estructura compleja más utilizada en la programación y se clasifica en base a sus dimensiones :

  • Array unidimensional (Vector) -> Es decir contiene N Elementos
  • Array multidimensional (Matriz) -> Es decir contiene N1 * N2 * … * Nm donde cada N<num> es una dimensión

Nota : Los arrays casi siempre requieren que se establezca la dimensión durante su construcción, en caso de que
no se sepa el tamaño previo normalmente viene dado por su inicialización

Los elementos que componen un array deberían de ser alguno de los considerados como válidos (tipos simples , Java Beans , etc),
aunque algunas veces estos son heterogéneos y se convierten en un cajón desastre donde se guarda todo, es decir, donde
cada uno de los elementos pertecene a un tipo diferente

En caso de SOAP además permite distinguir dos tipos de arrays :

  • Parcial : Array que no se encuentra totalmente polado por lo que el resto de valores serñan del tipo null
  • Disperso : Array donde se inicializan las posiciones no contiguas del array

La utilización de estos dos tutoriales no será explicado en este tutorial 😉

2. Entorno.

El tutorial está escrito usando el siguiente entorno:

3. Instalacion.

Para la realización de este tutorial ser requiere :

1) Tener instalada servidor de aplicaciones Apache Tomcat (En mi caso uso la versión 7.0)

2) Tener la versión binaria de Axis2 (En mi caso uso la versión 1.5.1) descargada y descomprimida en un directorio

3) Tener la versión WAR de Axis2 (En mi caso uso la versión 1.5.1) desplegada en el Tomcat

4) Tener instalada la herramienta SOAP UI

Nota : Utilizaremos para su desarrollo la herramienta Eclipse

4. Crear el Servidor

PASO 1 : Crear un proyecto Java llamada Axis2ArrayWS

Se creará una estructura del proyecto como la siguiente

PASO 2 : Crear el paquete «com.acme.es.servidor» sobre la carpeta src

PASO 3 : Crear una clase Java llamada BasicService

PASO 4 : Crear un método que utilize como parámetro un array

...
public String generateSentenceParameter (String[] words){
		String result = "";
	
		if (words.length!=0){
		  for (String w : words){
			 result += w; 
		  }
		}
	
		return result;
}
...

PASO 5 : Crear un método que devuelva un array

...
public String[] generateSentenceResult(){
		String[] words = new String [4];
		
		words[0] = "Empresa 1";
		words[1] = "Empresa 2";
		words[2] = "Empresa 3";
		words[3] = "Empresa 4";
		
		return words;	
	}
...

Al final la clase quedará de la siguiente forma :

PASO 6 : Crear la carpeta META-INF a nivel de la carpeta src

PASO 7 : Crear dentro de la carpeta META-INF el descriptor de servicio : services.xml

Introducimos el siguiente texto :


  	Servicio que hace uso de arrays
   	
   		
   	
   	com.acme.ws.servidor.BasicService
   	
   	

PASO 8 : Crear el fichero de ensamblado AAR (Axis ARchive)

Para ello exportar el proyecto como si fuera un JAR pero poniendo de nombre Axis2Array.aar

Nota : No incluir .classpath ni .project

Arrancar Tomcat si esta parado

PASO 9 : Copiar el fichero AAR en <CATALINA_HOME>\webapps\axis2\WEB-INF\services

PASO 10 : Verificar en la consola de Tomcat la inclusión de este servicio

PASO 11 : Verificar el servicio desde la consola de administracion de Axis : http://localhost:8080/axis2/services/listServices

PASO 12 : Obtenemos el WSDL del servicio : http://localhost:8080/axis2/services/Axis2Array?wsdl

Guardamos el fichero anterior que vendrá dado en formato XML por formato WSDL

5. Probar el servidor con SOAP UI

PASO 1 : Cargamos la herramienta

PASO 2 : Creamos un proyecto nuevo con la URL del WSDL anterior

PASO 3 : Realizamos un test sobre el método de paso de parámetros

Para ello introducimos tantos <ser:words>TEXTO </ser:words> como elementos que queremos
que tenga el array (Recordar secuencialidad)

PASO 4 : Ejecutamos el test y verificamos la respuesta

PASO 5 : Realizamos un test sobre el método que devuelve un array

PASO 6 : Ejecutamos el test y verificamos la respuesta

Con esto tendremos probado nuestro Servidor 😉

6. Crear el cliente

PASO 1 : Creamos un proyecto Java llamada Axis2ArrayWSCliente

Se generará una estructura similar a la siguiente

PASO 2 : Copiamos a nivel de raiz el fichero Axis2Array.wsdl

PASO 3 : Generamos el Stub del cliente con la herramienta Axis2

Para ellos nos situamos por consola en el directorio del proyecto y ejecutamos la siguiente instrucción

  • Si Axis2 NO esta en el Path : %AXIS2_HOME%\bin\wsdl2java -uri Axis2Array.wsdl
  • Si Axis2 esta en el Path : wsdl2java -uri Axis2Array.wsdl

PASO 4 : Refrescamos el proyecto

Se habrán creado dos clases que nos permitirán comunicarnos con el servidor

PASO 5 : Incluir las librerías de Axis2

Con el botón derecho del ratón sobre el proyecto Properties -> Java Build Path , pestaña de
Libraries y pulsar sobre «Add Externar JARs»

PASO 6 : Crear un paquete «com.acme.ws.cliente»

PASO 7 : Crear una clase PruebaCliente.java

Esta clase dipondrá de dos métodos para realizar la llamada a los dos servicios

package com.acme.ws.cliente;

import java.rmi.RemoteException;

import com.acme.ws.servidor.Axis2ArrayStub;

public class PruebaCliente {
	
	/**
	 * Metodo que ejecutará el método del servicio en el que se le pasa
	 * un array de cadenas como parametro
	 */
	public static void exampleParameterArray(){
		
		//Establece los elementos encargados en realizar la peticion y la
		//respuesta
		Axis2ArrayStub customer 								  = null;
		Axis2ArrayStub.GenerateSentenceParameter request 		  = null;
		Axis2ArrayStub.GenerateSentenceParameterResponse response = null;

		try {
			//Creamos el soporte y la peticion
			customer 	= new Axis2ArrayStub();
			request 	= new Axis2ArrayStub.GenerateSentenceParameter();

			//Establecemos el parametro de la invocacion
			request.setWords(new String[]{"Hola ","a ","todos"});
			
			//Invocamos al web service
			response = customer.generateSentenceParameter(request);

			//Mostramos la respuesta
			System.out.println(response.get_return());

		} catch (RemoteException excepcionDeInvocacion) {
			System.err.println(excepcionDeInvocacion.toString());
		}
	}
	
	/**
	 * Metodo que ejecutar el método del servicio en el que se devuelve un array de cadenas
	 */
	public static void exampleResultArray(){
		Axis2ArrayStub customer 							   = null;
		Axis2ArrayStub.GenerateSentenceResultResponse response = null;

		try {
			//Creamos el soporte
			//En este caso no creamos la peticion puesto que no tendra parámetros de entrada
			customer 	= new Axis2ArrayStub();

			//Invocamos al web service
			response = customer.generateSentenceResult();

			//Mostramos la respuesta
			String[] result = response.get_return();
			
			for (String s : result){
				System.out.println("Elemento : "+s);
			}
			
		} catch (RemoteException excepcionDeInvocacion) {
			System.err.println(excepcionDeInvocacion.toString());
		}
	}
	
	
	public static void main(String[] args) {
		exampleParameterArray();
		exampleResultArray();
	}
}

PASO 8 : Ejecutar la clase

Con esto habriamos conseguido tener un servicio web en el que se utiliza la estructura
compleja de array

7. Conclusiones.

Espero haberos podido ayudar a entender un poco mejor las estructuras complejas de tipo array
en SOAP. Se ha tratado de que el ejemplo sea lo más claro posible para facilitar su entendimiento
sin entrar en ningúna complejidad a la hora de crear los servicios proporcionados.

Como habéis podido ver, para poder implementar un servicio web (Cliente y Servidor) hay que realizar
muchas acciones, pero por suerte para nosotros se puede decir que cambian muy poquitas cosas a la hora
de generar otros servicios web diferentes. Mucho ánimo con esto de la comunicación SOAP 😉

1 COMENTARIO

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad