PDF de programación - Cómo crear un cliente SOAP en Java sin usar AXIS paso a paso

Imágen de pdf Cómo crear un cliente SOAP en Java sin usar AXIS paso a paso

Cómo crear un cliente SOAP en Java sin usar AXIS paso a pasográfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 6 de Noviembre del 2017)
3.244 visualizaciones desde el 6 de Noviembre del 2017
311,4 KB
10 paginas
Creado hace 10a (04/06/2013)
Cómo crear un cliente SOAP en Java sin usar AXIS paso a paso

David Herrera [http://dherrerabits.wordpress.com]

Cómo crear un cliente SOAP en Java sin usar AXIS paso a paso

Introducción
Cuando nos encontramos ante la necesidad de desarrollar un cliente SOAP en Java, normalmente lo que se
hace es generar las clases stub necesarias mediante AXIS, o también CXF o Metro. Puede que no siempre
sea la opción más conveniente o quizá no sea posible el uso de alguna de estas herramientas, aunque eso
sí, no cabe duda que facilitan muchísimo un desarrollo que sin ellas sería bastante arduo.
Y bien, ¿por qué motivo podría ser interesante complicarse la vida no usando estas librerías? De primeras
se me ocurren varios:
1- Si eres estudiante, para aprender cómo funciona el protocolo SOAP internamente y probarlo de primera
mano, con posibilidad de experimentar más allá de lo que te permitirían estas herramientas.
2- Si eres profesor, para impartir de una forma práctica el funcionamiento interno de SOAP.
3- Si eres un desarrollador, puede que te encuentres en la necesidad de desarrollar el código lo más
eficiente posible eliminando partes innecesarias (por ejemplo, si desarrollas para dispositivos móviles, con
limitaciones), o bien lo puedes necesitar por cuestiones de arquitectura o diseño técnico.
De cualquier forma, siempre será bueno para todo desarrollador enriquecer sus conocimientos y abrirse
horizontes aprendiendo una forma “diferente” de hacer las cosas.
En este tutorial mostraré cómo desarrollar dicho cliente paso a paso, de esa forma no habitual, sin usar
ninguna de las utilidades mencionadas, y además de una forma sencilla y clara. A partir de ahí, que cada
uno concluya de qué manera pueden resultarle útiles estas técnicas.

Requisitos previos
Para sacar provecho a este tutorial recomiendo disponer de conocimientos de nivel medio de las siguientes
tecnologías:

Lenguaje Java


– XML y Xpath
– Protocolos HTTP y SOAP
– Maven

Antes de empezar...

¿Qué es soapUI?

Es una excelente herramienta para trabajar con servicios web. Nos permite probar y simular servicios,
generar código SOAP para un servicio a partir de su definición WSDL, entre otras funciones, y la podemos
encontrar en versión freeware y de pago, y como aplicación de escritorio o como plugin para varios IDES.

¿Qué es freemarker?

Traducido de su web, es un “motor de plantillas”; una herramienta genérica para generar textos (de
cualquier tipo, desde HTML hasta código fuente autogenerado) basado en plantillas. Es un paquete Java,
una librería de clases para programadores Java. No es una aplicación para usuario final en sí mismo, sino
algo que los programadores pueden incluir en sus productos.

1/10

Cómo crear un cliente SOAP en Java sin usar AXIS paso a paso

David Herrera [http://dherrerabits.wordpress.com]

Manos a la obra

Lo que haremos en este tutorial es:

1. Construir manualmente la petición HTTP que se hará desde nuestro cliente Java.

1. Emplearemos soapUI como ayuda para construir la petición HTTP.
2. Después nos serviremos de Freemarker para construir la llamada HTTP+SOAP y personalizar

los parámetros de la petición.

2. Ejecutar la llamada HTTP construida con la ayuda de Apache HttpClient.
3.

Interpretar la respuesta del servicio web usando Xpath.

Necesitaremos un servicio web a donde conectar nuestro cliente SOAP. Usaremos para el ejemplo el
servicio Global Weather, todo un clásico gracias al cual podremos conocer cómo está el tiempo en cualquier
ciudad del mundo.

1.- Creación de proyecto GlobalWeather con soapUI

Primeramente, si no tienes instalada la herramienta soapUI, deberás descargarla e instalarla desde su sitio
web: http://www.soapui.org/
Como indiqué antes, puedes conseguir una versión freeware en modo aplicación de escritorio o plugin para
tu IDE favorito. Personalmente recomiendo la aplicación de escritorio.

Si ya tienes instalado soapUI crearemos un nuevo proyecto usando como nombre de proyecto
GlobalWeather y como WSDL inicial el correspondiente al servicio web GlobalWeather,
“http://www.webservicex.net/globalweather.asmx?WSDL”, y marcamos la opción “Create sample requests
for all operations?” como se ve en la captura:

2/10

Cómo crear un cliente SOAP en Java sin usar AXIS paso a paso

David Herrera [http://dherrerabits.wordpress.com]

Tras pulsar OK se creará la estructura de proyecto:

Para el ejemplo emplearemos la versión 1.2 de SOAP e intentaremos obtener los datos del tiempo de
Madrid. Desplegamos la operación GetWeather de la versión 1.2 y rellenamos nuestra petición (Request 1)
indicando que queremos obtener el tiempo de Madrid de la siguiente forma:

3/10

Cómo crear un cliente SOAP en Java sin usar AXIS paso a paso

David Herrera [http://dherrerabits.wordpress.com]

La operación se podrá ejecutar pulsando el botón verde en forma de “Play”:

Si todo ha funcionado correctamente el servicio nos devolverá una respuesta indicándonos la información
meteorológica de Madrid en el momento de la ejecución. Lo importante aquí es que ya tenemos casi
hecha la petición HTTP que tendremos que enviar al servidor, y podremos ver la respuesta, y
sabremos cómo interpretarla y explotarla posteriormente.

2.- Creación de proyecto Java

Crearemos un proyecto Java de consola con nuestro IDE y herramientas habituales. Para este ejemplo usé
como IDE Eclipse, y me construí un proyecto Maven simple, sin arquetipo, pero dejo esto a libre elección.

Lo importante serán las dependencias que vamos a necesitar, que si usamos Maven serán las siguientes:

<dependency>



</dependency>
<dependency>



</dependency>

<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.2.5</version>

<groupId>freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.9</version>

Si no usas Maven tendrás que descargar las librerías y sus correspondientes dependencias. Puedes
conseguir las librerías necesarias de estos enlaces:

– Freemarker: http://freemarker.sourceforge.net/
– Apache HttpClient: http://hc.apache.org/httpcomponents-client-ga/index.html

Necesitaremos un lugar donde guardar la plantilla de Freemarker. En mi caso he seguido el estándar Maven
y me he creado la plantilla (template.ftl) en la siguiente ruta:

“src/main/resources/templates/template.ftl”

4/10

Cómo crear un cliente SOAP en Java sin usar AXIS paso a paso

David Herrera [http://dherrerabits.wordpress.com]

3.- Creación de la plantilla freemarker

La plantilla de freemarker nos servirá para construir la llamada que haremos al servicio web. Para ello
haremos uso de la plantilla que ya nos ha creado automáticamente soapUI en el primer paso de este
tutorial. Crearemos la plantilla y mediante un simple copy-paste de soapUI a la plantilla ya casi la tenemos.

En la carpeta templates creamos el archivo template.ftl y en él incluimos el contenido generado mediante
soapUI. La ciudad y el país serán datos variables que pasaremos a freemarker para que él construya la
petición. Indicaremos esto a freemarker usando ${...} quedando como resultado algo así:

template.ftl
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:web="http://www.webserviceX.NET">
<soap:Header/>
<soap:Body>
<web:GetWeather>
<web:CityName>${ciudad}</web:CityName>
<web:CountryName>${pais}</web:CountryName>
</web:GetWeather>
</soap:Body>
</soap:Envelope>

4.- Creación de la petición HTTP-SOAP mediante freemarker

Para trabajar con la plantilla necesitaremos crear primero una configuración de freemarker. Después definir
y cargar la plantilla, crear la información variable que vamos a usar (en este caso, ciudad y país), y por
último construir con todo esto la que será nuestra petición HTTP-SOAP.

// Configuración Freemarker
Configuration cfg = new Configuration();

// Cargar plantilla
Template template = cfg.getTemplate("src/main/resources/templates/template.ftl");

// Modelo de datos
Map<String, Object> data = new HashMap<String, Object>();
data.put("ciudad", "Madrid");
data.put("pais", "Spain");

// Crear mensaje SOAP HTTP
StringWriter out = new StringWriter();
template.process(data, out);
String strRequest = out.getBuffer().toString();

5/10

Cómo crear un cliente SOAP en Java sin usar AXIS paso a paso

David Herrera [http://dherrerabits.wordpress.com]

Mediante este código conseguiremos crear la que será la petición SOAP y para comprobar que todo fue
bien podríamos mostrar el contenido de la variable strRequest por consola. Debería aparecer el mismo
contenido que teníamos originalmente, pero esta vez creado dinámicamente:

strRequest
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:web="http://www.webserviceX.NET">
<soap:Header/>
<soap:Body>
<web:GetWeather>
<web:CityName>Madrid</web:CityName>
<web:CountryName>Spain</web:CountryName>
</web:GetWeather>
</soap:Body>
</soap:Envelope>

5.- Llamada al webservice mediante HttpClient

Una vez que ya tenemos la petición SOAP creada, el siguiente paso será establecer una comunicación vía
HTTP con el servidor y obtener su respuesta.
Para ello nos creamos un cliente HTTP mediante el constructor de DefaultHttpClient y una petición POST
instancia de la clase HttpPost. Para crear el body de la petición usaremos la clase StringEntity:

// Crear la llamada al servidor
httpClient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost("http://www.webservicex.net/globalweather.asmx");
StringEntity input = new StringEntity(strRequest);
input.setContentType("application/soap+xml");
postRequest.setEntity(input);

// Tratar respuesta del servidor
HttpResponse response = httpClient.execute(postRequest);
if (response.getStatusLine().getStatusCode() != 200) {

throw new RuntimeException("Error : Código de error HTTP : " +
response.getStatusL
  • Links de descarga
http://lwp-l.com/pdf7394

Comentarios de: Cómo crear un cliente SOAP en Java sin usar AXIS paso a paso (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad