Está en la página 1de 101

ATLAS

MANUAL DE USUARIO
Servicios Web

Versin 2.0

Arquitectura de Software

Framework Atlas
Manual usuario de Servicios Web
Hoja de Control

Ttulo

Manual de Usuario Invocador de Servicios

Documento de Referencia

NORMATIVA ATLAS

Responsable

Arquitectura de Software

Versin

2.0

Fecha Versin

12/06/2015

Registro de Cambios
Versin

Causa del Cambio

Responsable del Cambio

Fecha

2.0

Reestructuracin de documento

Unidad de Arquitectura

21/07/2015

2 de 101

Framework Atlas
Manual usuario de Servicios Web

ndice

1.

INTRODUCCIN ................................................................................................................................................................ 5
1.1.
1.2.

AUDIENCIA OBJETIVO ...................................................................................................................................................... 5


CONOCIMIENTOS PREVIOS ............................................................................................................................................... 5

2.

DESCRIPCIN .................................................................................................................................................................... 6

3.

QUE SEGURIDAD DEBO IMPLEMENTAR? ............................................................................................................... 9


3.1.1.
3.1.2.

4.

Seguridad de lado del Servidor ............................................................................................................................... 9


Seguridad de lado del Cliente ............................................................................................................................... 10

DESARROLLO DE UN SERVICIO WEB (SERVIDOR) .............................................................................................. 12


4.1.
CREACIN DE UN SERVIDOR SIN SEGURIDAD (HTTP Y HTTPS SIN CERTIFICADO CLIENTE) ................. 13
4.1.1.
Paso 1: Creacin del mdulo partiendo del Arquetipo de servicio web ............................................................... 13
4.1.2.
Paso 2: Creacin de la Interfaz del Servicio y clases para los parmetros ......................................................... 13
4.1.3.
Paso 3: Implementacin del Servicio ................................................................................................................... 15
4.1.4.
Paso 4: Configuracin del Servicio ...................................................................................................................... 16
4.1.5.
Paso 5: Cambio del namespace del servicio (si se necesita) ................................................................................ 17
4.1.6.
Paso 6: Eliminar Namespaces, Elements y Atributos (Si se necesita) .................................................................. 18
4.1.7.
Paso 7: Levantar el Servidor ................................................................................................................................ 19
4.1.8.
Paso 8: Obtener el wsdl del Servicio .................................................................................................................... 19
4.1.9.
Paso 9: Creacin de la interfaz para clientes en nuestro servidor ....................................................................... 21
4.1.10. Paso 10: Test Unitarios de nuestra libreria Cliente ............................................................................................. 23
4.2.
CREACIN DE UN SERVIDOR CON VALIDACIN DE CERTIFICADO DE CLIENTE ..................................... 26
4.2.1.
Paso 1: Alta de la aplicacin en la plataforma ASF ............................................................................................. 26
4.2.2.
Paso 2: Configuracin del Servicio ...................................................................................................................... 27
4.2.3.
Paso 3: Actualizacin de configuracin en el fichero services.xml ...................................................................... 28
4.2.4.
Paso 4: Modificacin de la interfaz para clientes en nuestro servidor................................................................. 28
4.2.5.
Acceso al certificado de cliente (para comprobaciones personalizadas) ............................................................. 29
4.3.
CREACIN DE UN SERVIDOR CON SEGURIDAD EN MENSAJE WS-SECURITY ......................................... 30
4.3.1.
Paso 1: Alta de la aplicacin en la plataforma ASF ............................................................................................. 31
4.3.2.
Paso 2: Configuracin del Servicio ...................................................................................................................... 32
4.3.3.
Paso 3: Actualizacin de configuracin en el fichero services.xml ...................................................................... 33
4.3.4.
Paso 4: Modificacin de la interfaz para clientes en nuestro servidor................................................................. 38
4.4.
CREACIN DE UN SERVIDOR CON WS-SECURITY + CERTIFICADO DE CLIENTE ..................................... 39
4.4.1.
Paso 1: Actualizacin de configuracin en el fichero services.xml ...................................................................... 40
4.4.2.
Paso 2: Modificacin de la interfaz para clientes en nuestro servidor................................................................. 40

5.

DESARROLLO DE UN SERVICIO WEB (CLIENTE) ................................................................................................. 42


5.1.
ATLAS - CREACION DE UN CLIENTE (HTTP Y HTTPS SIN CERTIFICADO CLIENTE) ................................... 42
5.1.1.
Paso 1: Inclusin de la dependencia .................................................................................................................... 42
5.1.2.
Paso 2: Configuracin del contexto de Spring ..................................................................................................... 42
5.1.3.
Paso 3: Configuracin del endpoint en environment.properties .......................................................................... 43
5.2.
ATLAS - CREACION DE UN CLIENTE CON VALIDACIN DE CERTIFICADO DE CLIENTE ......................... 44
5.2.1.
Paso 1: Aadir variables de environment ............................................................................................................. 44
5.2.2.
Paso 2: Configuracin de Spring .......................................................................................................................... 45
5.3.
ATLAS - CREACION DE UN CLIENTE CON SEGURIDAD EN MENSAJE WS-SECURITY ............................... 47
5.3.1.
Paso 1: Aadir variables de environment ............................................................................................................. 47
5.3.2.
Paso 2: Configuracin de Spring .......................................................................................................................... 48
5.4.
ATLAS - CREACION DE UN CLIENTE CON WS-SECURITY + CERTIFICADO DE CLIENTE .......................... 50
5.4.1.
Paso 1: Aadir variables de environment ............................................................................................................. 50
5.4.2.
Paso 2: Configuracin de Spring .......................................................................................................................... 52
5.5.
WS EXTERNOS (NO ATLAS) - CREACIN DE UN CLIENTE (HTTP Y HTTPS).................................................. 55
5.5.1.
Paso 1: Incluir fichero wsdl en el proyecto .......................................................................................................... 55
5.5.2.
Paso 2: Inclusin de la dependencia y configuracin del plugin.......................................................................... 55
5.5.3.
Paso 3: Generacin de la clases del Cliente ......................................................................................................... 58

3 de 101

Framework Atlas
Manual usuario de Servicios Web
5.5.4.
Paso 4: Configuracin y uso del Cliente .............................................................................................................. 60
5.6.
WS EXTERNOS (NO ATLAS) - CREACIN DE UN CLIENTE CON CERTIFICADO DE CLIENTE ................... 63
5.6.1.
Paso 1: Configuracin y uso del Cliente .............................................................................................................. 63
5.7.
WS EXTERNOS (NO ATLAS) - CREACIN DE UN CLIENTE CON SEGURIDAD WS-SECURITY................... 65
5.7.1.
Paso 1: Configuracin y uso del Cliente .............................................................................................................. 65
5.8.
WS EXTERNOS (NO ATLAS) - CREACIN DE UN CLIENTE CON SEGURIDAD WS-SECURITY +
CERTIFICADO DE CLIENTE................................................................................................................................................. 67
5.8.1.
Paso 1: Configuracin y uso del Cliente .............................................................................................................. 68
6.

CONFIGURACIONES ADICIONALES.......................................................................................................................... 69
6.1.1.
Aadir configuracin de PROXY a un cliente ...................................................................................................... 69
6.1.2.
Personalizar configuracin de TIMEOUT a un cliente ........................................................................................ 70
6.1.3.
Llamadas a Servicios Web Con Usuario y Password usando HHTP Basic ......................................................... 71
6.1.4.
Configuracin de Truststore desde puesto LOCAL .............................................................................................. 73
6.2.
MDULO DE LOG DE MENSAJES ..................................................................................................................................... 81
6.3.
PERSONALIZACIN DE MENSAJES DE ERROR .................................................................................................................. 82
6.3.1.
Especificacin SoapFault SCSPv3 ........................................................................................................................ 83

7.

CREACION DE TESTS UNITARIOS PARA SOAPUI ................................................................................................. 84


7.1.1.
7.1.2.
7.1.3.
7.1.4.

8.

Proyecto SoapUI sin seguridad ............................................................................................................................ 85


Proyecto SoapUI con seguridad https................................................................................................................... 86
Proyecto SoapUI con seguridad firmado/cifrado ................................................................................................. 88
Tests de SoapUI WS-Security + Transporte con validacin de certificado .......................................................... 95

ERRORES MS COMUNES ............................................................................................................................................ 97


8.1.
8.2.
8.3.
8.4.
8.5.
8.6.

NO SE ENCUENTRA EL FICHERO WSDL DE UN SERVICIO (NO AUTOGENERADO)............................................................. 97


NO SE RECONOCE EL MTODO EN UN CLIENTE DE AXIS2 EN LA LLAMADA A UN SERVICIO DE AXIS1 ............................. 98
ERROR AL GENERAR UN CLIENTE DE AXIS2 A PARTR DEL WSDL DEL SERVICIO ........................................................... 98
ERROR AL EJECUTAR PETICIONES A SERVICIOS WEB SEGURO DESDE ENTORNO LOCAL ................................................ 99
ERROR AL LLAMAR AL UN SERVICIO WEB NO SEGURO ................................................................................................... 99
GENERACIN DE TODAS LAS CLASES NECESARIAS CON WSDL2CODE CON AXIS2 ..................................................... 99

ENLACES RELACIONADOS ................................................................................................................................................ 101

4 de 101

Framework Atlas
Manual usuario de Servicios Web

1. INTRODUCCIN

En algunas ocasiones es necesario que las aplicaciones ofrezcan determinados Servicios Web tanto a otras
aplicaciones de la Comunidad de Madrid como a agentes externos. Por otra parte muchas de las aplicaciones que
se desarrollan para la Comunidad de Madrid necesitan acceder a Servicios Web (tanto servicios que se han
desarrollado especficamente para la tramitacin electrnica como otros servicios web que incluso pueden estar
fuera de los entornos de ICM).

En este manual se describe cmo crear servicios web con el framework ATLAS, as como invocar a servicios web
existentes (creados con ATLAS o no). El manual incluye documentacin sobre la creacin/invocacin de servicios
web con seguridad o sin ella.

Para aislar la complejidad de la amplia variedad de tipos de servicios web que nos podemos encontrar y los
distintos tipos de seguridad que nos pueden requerir los citados servicios web se ha desarrollado el componente
Invocador de Servicios de Atlas. Este componente facilita la creacin de los clientes de acceso a los servicios
securizados, a travs de una sencilla configuracin que pueda incluir los requisitos de seguridad requeridos.

1.1.

Audiencia objetivo

Este documento est orientado a desarrolladores java que quieran invocar a un servicio web desde un aplicativo
que se desarrolla con Atlas o que quieren generar un servicio web.

1.2.

Conocimientos Previos

Para un completo entendimiento del documento, el lector deber tener conocimientos previos sobre las siguientes
tecnologas:
-

Spring Framework.

Servicios Web

Axis2 y Rampart

Seguridad (uso bsico de certificados)

5 de 101

Framework Atlas
Manual usuario de Servicios Web
2. DESCRIPCIN
La invocacin y generacin de servicios web de ATLAS se basa en los siguientes elementos:
Axis2
Mdulo de seguridad Rampart
Mdulo de seguridad para webservices de ATLAS

Para la creacin de nuevos servicios web se partir de un arquetipo especfico para servicios web. Los
servicios web desarrollados implementaran adems del propio servicio web una librera cliente para dicho servicio
que facilitar la integracin de este servicio web en otros proyectos Atlas. Para implementar un servicio web es
necesario:
Definir la interfaz del Servicio (Como una clase Java)
Implementar en el servicio web dicha interfaz
Implementar un cliente del servicio web

A continuacin se muestra un diagrama de clases para un ejemplo de un servicio llamado MiPrimerService:

6 de 101

Framework Atlas
Manual usuario de Servicios Web
Para el desarrollo de un cliente de un servicio web se van a distinguir dos casos:
Servicios web desarrollados con Atlas
Servicios web externos o no desarrollados con Atlas. En este ltimo caso se utiliza el cliente dinmico de
Axis2, que est basado en la clase RPCServiceClient y permite hacer llamadas a servicios web de forma
sencilla, sin necesidad de generacin de clases compiladas (a travs del descriptor WSDL del servicio y las
herramientas de Axis2).

En los servicios web podemos distinguir los distintos tipos de accesos:


Acceso pblico
Servicio de acceso libre. No se realiza ningn tipo de control sobre el cliente. El canal de comunicacin no est
cifrado.
Cliente WS

Servidor WS
HTTP

Acceso pblico securizado


Servicio de acceso libre.
No se realiza ningn tipo de control sobre el cliente.
Canal cifrado de comunicacin.
Para establecer la comunicacin el cliente debe confiar en el certificado del servidor.
Servidor WS

Cliente WS
HTTPS

Trusted CA

SSL Server

Acceso privado con certificado digital cliente


Servicio de acceso restringido. Se realiza control de acceso sobre el cliente identificado por el certificado digital
requerido. Canal cifrado de comunicacin.
Para establecer la comunicacin el cliente y servidor deben confiar en sus respectivos certificados. Es habitual
que el cliente utilice un tipo de certificado cliente denominado de componente (no personal).

7 de 101

Framework Atlas
Manual usuario de Servicios Web
Servidor WS

Cliente WS
HTTPS

SSL Client

Server trusted

Client trusted

SSL Server

Server trusted de la CAM


Servidores Web Cach

WS-Security: Mensaje SOAP firmado y cifrado


El mensaje SOAP se firma y cifra para garantizar la integridad de los datos enviados. Se puede realizar el
control de acceso sobre el cliente que ha firmado el mensaje. Al cifrar el mensaje no es necesario cifrar el
canal de comunicacin.

Dentro del framework Atlas se soportan todos estos tipos de accesos y en este documento se describirn como
implementarlos tanto en la parte cliente como en la servidora. Cualquier otro tipo de acceso o de seguridad que se
requiera implementar que sea distinto de los anteriores ha de ser autorizado previamente por el rea de
arquitectura de ICM.

Este documento se divide en dos partes bien diferenciadas:


-

Desarrollo de un servicio web

Desarrollo de un cliente de un servicio web

8 de 101

Framework Atlas
Manual usuario de Servicios Web
3. QUE SEGURIDAD DEBO IMPLEMENTAR?
Antes de la creacin de un servicio web, es importante tener claro la seguridad que debemos implementar, en caso
de tener que hacerlo.

3.1.1.

Seguridad de lado del Servidor

Si debemos crear un servidor, tendremos los siguientes posibles opciones de seguridad:


HTTP + Mensajes sin seguridad: El servicio estar disponible va http y los mensajes que viajan no van ni
cifrados ni firmados.
Para este caso, seguiremos el manual en el punto 4.1:
CREACIN DE UN SERVIDOR SIN SEGURIDAD (HTTP y HTTPS SIN CERTIFICADO CLIENTE)

HTTPS + Mensajes sin seguridad: El servicio estar disponible va https sin ningn otro requerimiento
para nuestros clientes y los mensajes que viajan no van ni cifrados ni firmados.
Para este caso, seguiremos el manual en el punto 4.1:
CREACIN DE UN SERVIDOR SIN SEGURIDAD (HTTP y HTTPS SIN CERTIFICADO CLIENTE)

HTTPS con certificado + Mensajes sin seguridad: El servicio estar disponible va https y, como
servidores, exigiremos que el certificado de los clientes que se conectan sea vlido (y otras validaciones
opcionales) y los mensajes que viajan no van ni cifrados ni firmados.
Para este caso, seguiremos el manual en el punto 4.2:
CREACIN DE UN SERVIDOR CON VALIDACIN DE CERTIFICADO DE CLIENTE

HTTP + Mensajes con seguridad: El servicio estar disponible va http y los mensajes viajan cifrados,
firmados o ambas.
Para este caso, seguiremos el manual en el punto 4.3:
CREACIN DE UN SERVIDOR CON SEGURIDAD EN MENSAJE WS-SECURITY

HTTPS + Mensajes con seguridad: El servicio estar disponible va https y los mensajes viajan cifrados,
firmados o ambas.
Para este caso, seguiremos el manual en el punto 4.3:
CREACIN DE UN SERVIDOR CON SEGURIDAD EN MENSAJE WS-SECURITY

HTTPS con certificado + Mensajes con seguridad: El servicio estar disponible va https y, como
servidores, exigiremos que el certificado de los clientes que se conectan sea vlido (y otras validaciones
opcionales) y los mensajes viajan cifrados, firmados o ambas.
Para este caso, seguiremos el manual en el punto 4.4:
CREACIN DE UN SERVIDOR CON WS-SECURITY + CERTIFICADO DE CLIENTE

9 de 101

Framework Atlas
Manual usuario de Servicios Web
3.1.2.

Seguridad de lado del Cliente

Si debemos crear un cliente para consumir un servicio, tendremos que diferenciar entre clientes Atlas y clientes No
Atlas (Servicios web Externos).

WS Atlas - HTTP + Mensajes sin seguridad: Al servicio al que nos conectamos se accede a travs de
HTTP y los mensajes que viajan no van ni cifrados ni firmados.
Para este caso, seguiremos el manual en el punto 5.1:
ATLAS - CREACION DE UN CLIENTE (HTTP y HTTPS SIN CERTIFICADO CLIENTE)

WS Atlas - HTTPS + Mensajes sin seguridad: Al servicio al que nos conectamos se accede a travs de
HTTPS, como clientes no nos requieren certificado al conectar y los mensajes que viajan no van ni cifrados
ni firmados.
Para este caso, seguiremos el manual en el punto 5.1:
ATLAS - CREACION DE UN CLIENTE (HTTP y HTTPS SIN CERTIFICADO CLIENTE)

WS Atlas HTTPS con certificado + Mensajes sin seguridad: Al servicio al que nos conectamos se
accede a travs de HTTPS y el servidor requiere que, como clientes, nos identifiquemos con un certificado.
Los mensajes que viajan no van ni cifrados ni firmados.
Para este caso, seguiremos el manual en el punto 5.2:
ATLAS - CREACION DE UN CLIENTE CON VALIDACIN DE CERTIFICADO DE CLIENTE
WS Atlas HTTP + Mensajes con seguridad: Al servicio al que nos conectamos se accede a travs de
HTTP y los mensajes que viajan van cifrados, firmados o ambas.
Para este caso, seguiremos el manual en el punto 5.3:
ATLAS - CREACION DE UN CLIENTE CON SEGURIDAD EN MENSAJE WS-SECURITY

WS Atlas HTTPS + Mensajes con seguridad: Al servicio al que nos conectamos se accede a travs de
HTTPS, como clientes no nos requieren certificado al conectar y los mensajes que viajan van cifrados,
firmados o ambas.
Para este caso, seguiremos el manual en el punto 5.3:
ATLAS - CREACION DE UN CLIENTE CON SEGURIDAD EN MENSAJE WS-SECURITY

WS Atlas HTTPS con certificado + Mensajes con seguridad: Al servicio al que nos conectamos se
accede a travs de HTTPS y el servidor requiere que, como clientes, nos identifiquemos con un certificado.
Los mensajes que viajan van cifrados, firmados o ambas.
Para este caso, seguiremos el manual en el punto 5.4:
ATLAS - CREACION DE UN CLIENTE CON WS-SECURITY + CERTIFICADO DE CLIENTE

10 de 101

Framework Atlas
Manual usuario de Servicios Web

WS Externo HTTP + Mensajes sin seguridad: Al servicio al que nos conectamos se accede a travs de
HTTP y los mensajes que viajan no van ni cifrados ni firmados.
Para este caso, seguiremos el manual en el punto 5.5:
WS EXTERNOS (NO ATLAS) - CREACIN DE UN CLIENTE (HTTP y HTTPS)

WS Externo HTTPS + Mensajes sin seguridad: Al servicio al que nos conectamos se accede a travs
de HTTPS, como clientes no nos requieren certificado al conectar y los mensajes que viajan no van ni
cifrados ni firmados.
Para este caso, seguiremos el manual en el punto 5.5:
WS EXTERNOS (NO ATLAS) - CREACIN DE UN CLIENTE (HTTP y HTTPS)

WS Externo HTTPS con certificado + Mensajes sin seguridad: Al servicio al que nos conectamos se
accede a travs de HTTPS y el servidor requiere que, como clientes, nos identifiquemos con un certificado.
Los mensajes que viajan no van ni cifrados ni firmados.
Para este caso, seguiremos el manual en el punto 5.6:
WS EXTERNOS (NO ATLAS) - CREACIN DE UN CLIENTE CON CERTIFICADO DE CLIENTE

WS Externo HTTP + Mensajes con seguridad: Al servicio al que nos conectamos se accede a travs
de HTTP y los mensajes que viajan van cifrados, firmados o ambas.
Para este caso, seguiremos el manual en el punto 5.7:
WS EXTERNOS (NO ATLAS) - CREACIN DE UN CLIENTE CON SEGURIDAD WS-SECURITY

WS Externo HTTPS + Mensajes con seguridad: Al servicio al que nos conectamos se accede a travs
de HTTPS, como clientes no nos requieren certificado al conectar y los mensajes que viajan van cifrados,
firmados o ambas.
Para este caso, seguiremos el manual en el punto 5.7:
WS EXTERNOS (NO ATLAS) - CREACIN DE UN CLIENTE CON SEGURIDAD WS-SECURITY

WS Externo HTTPS con certificado + Mensajes con seguridad: Al servicio al que nos conectamos se
accede a travs de HTTPS y el servidor requiere que, como clientes, nos identifiquemos con un certificado.
Los mensajes que viajan van cifrados, firmados o ambas.
Para este caso, seguiremos el manual en el punto 5.8:
WS EXTERNOS (NO ATLAS) - CREACIN DE UN CLIENTE CON SEGURIDAD WS-SECURITY + CERTIFICADO
DE CLIENTE

11 de 101

Framework Atlas
Manual usuario de Servicios Web

4. DESARROLLO DE UN SERVICIO WEB (SERVIDOR)


En este apartado se muestra cmo crear un servicio web con el framework ATLAS, as como el procedimiento para
aportar seguridad al servicio web (integrndose con la plataforma ASF).

Para el desarrollo de servicios web el framework se apoya en las siguientes tecnologas:


Axis 2: Framework java para desarrollo de servicios web de la ASF (Apache Software Foundation).
Rampart: Mdulo de seguridad de Axis 2.
Wss4j: Implementacin estndar de seguridad en servicios web.
Xmlsec: Estndar de seguridad para ficheros XML en que se basa el estndar WSS (Web Services
Security).

Adems de esto, el framework ATLAS aporta los siguientes elementos propios:


Arquetipo de generacin de proyectos de tipo servicio web. La generacin de proyectos para servicios
web es muy sencilla a travs del arquetipo ATLAS destinado a tal efecto. En este manual se muestra cmo
crear un servicio web a partir del arquetipo.
Mdulo de seguridad para integracin con la plataforma de seguridad ASF 5. En este documento
tambin se muestra cmo configurar un arquetipo para integrarse con dicha plataforma.

12 de 101

Framework Atlas
Manual usuario de Servicios Web
4.1.

CREACIN DE UN SERVIDOR SIN SEGURIDAD (HTTP y HTTPS SIN CERTIFICADO CLIENTE)

En los siguientes sub-apartados se muestra cmo crear un proyecto servicio web con el framework Atlas, sin
ningn tipo de seguridad a nivel de mensaje (ws-security) ni comprobaciones de certificados de cliente. Esta
configuracin acepta tanto http como https siempre y cuando no exista validacin de certificado de cliente (se
aceptan todos los clientes que se conecten).

4.1.1.

Paso 1: Creacin del mdulo partiendo del Arquetipo de servicio web

El framework ATLAS tiene disponible un arquetipo preconfigurado y preparado para la creacin de proyectos de
servicios web. El uso de este arquetipo genera una primera versin de proyecto con clases demostrativas del uso y
funcionalidad.

Para la creacin de proyecto de servicio web partiendo de un arquetipo consultar el manual


ATLAS_MUS_Arquetipo_WebService. Una vez generado el arquetipo segn se indica en este manual, proseguir
con los pasos indicados en este apartado.

ATENCION
La creacin de servicios web debe ser realizada siempre en base al arquetipo atlasfrmarquetipos-generador-servicioweb, segn se explica en el manual
ATLAS_MUS_Arquetipo_WebService

El arquetipo de servicio web de ATLAS generar un proyecto modular, que contiene tres mdulos:
-

web: El servicio web expuesto.

test: tests de SoapUI para el servicio web.

lib: Librera (jar) que contiene las clases que definen el interfaz del servicio web a exponer, as como
los objetos de dominio. Se han separado estas clases en una librera aparte porque esta librera podr
ser utilizada en otros proyectos para invocar al servicio web.

El arquetipo de servicio web contiene un ejemplo de servicio web llamado EjemploServicio.

ATENCION
Las clases de servicio que se van a crear son las mismas que las que se definen en la capa de
servicios de la normativa de Atlas, por lo tanto les aplica la misma normativa.

4.1.2.

Paso 2: Creacin de la Interfaz del Servicio y clases para los parmetros

La interfaz del servicio debe ser creada dentro del mdulo lib, de esta forma es compartido por el servicio web y
por la aplicacin cliente del servicio web. El mdulo web contiene una dependencia del mdulo lib de forma que

13 de 101

Framework Atlas
Manual usuario de Servicios Web
las clases del mdulo lib estarn accesibles desde el web.

ATENCION
La creacin de las clases que representan la interfaz del servicio web se realizar dentro del
mdulo lib del proyecto.
Por ejemplo nos creamos la interfaz siguiente:
Clase lib/src/main/java/xxxx/services/MiPrimerService.java
package prueba123.services;
import atlas.core.exceptions.ServiceException;
public interface MiPrimerService {
String getFechaString() throws ServiceException;
}
Tal y como indica la normativa de Atlas con respecto a los servicios todos los mtodos deben lanzan
ServiceException cuando ocurre algn problema.

Si la interfaz del servicio incluye parmetros que no son tipo bsicos hay que crear una clase para cada uno de los
parmetros.

En la interfaz EjemploServicio que se incluye de ejemplo en el arquetipo, se define un objeto de entrada llamado
DatosEntrada y un objeto de salida, llamado DatosSalida. Estos objetos de datos tienen que ser creados en el
mdulo lib del cliente ya que sern usados tanto por el cliente y por el servicio web.

ATENCION
La creacin de las clases que representan los objetos de entrada/salida del servicio web se
realizar dentro del mdulo lib del proyecto. Adems estos objetos no pueden ser objetos de
dominio de Hibernate sino simples POJOS y serializables.

14 de 101

Framework Atlas
Manual usuario de Servicios Web
A continuacin se muestra el cdigo de alguno de estos objetos:

Clase lib/src/main/java/xxxx/domain/DatosEntrada.java
public class DatosEntrada implements Serializable {
private static final long serialVersionUID = -4672740919183330887L;
String cadena1;
Integer limite = -1;
public String getCadena1() {
return cadena1;
}
public void setCadena1(String cadena1) {
this.cadena1 = cadena1;
}
public Integer getLimite() {
return limite;
}
public void setLimite(Integer limite) {
this.limite = limite;
}
}

4.1.3.

Paso 3: Implementacin del Servicio

Una vez creada la interfaz del servicio, debemos proceder a crear la clase que implementa dicha interfaz.
La implementacin del servicio web tendr las siguientes caractersticas:
Se crear en el mdulo web del proyecto.
Residir en el mismo paquete que la interfaz del servicio en el mdulo de cliente.
Su nombre ser el de la interfaz de servicio acabado en Impl siguiendo la normativa de
creacin de servicios de ATLAS.
Incluir la anotacin @Service
ATENCION
La creacin de las clases que implementan el servicio web se realizar dentro del mdulo web
del proyecto, y pertenecern al mismo paquete que las interfaces que implementan.

15 de 101

Framework Atlas
Manual usuario de Servicios Web
A continuacin mostramos una implementacin de ejemplo:
Clase lib/src/main/java/xxxx/services/MiPrimerServiceImpl.java
package prueba123.services;
import org.springframework.stereotype.Service;
import atlas.core.exceptions.ServiceException;
@Service
public class MiPrimerServiceImpl implements MiPrimerService{
@Override
public String getFechaString() throws ServiceException {
return "fecha";
}
}

4.1.4.
Para

que

Paso 4: Configuracin del Servicio


el

servicio

web

est

accesible

ser

necesario

realizar

dos

configuraciones:

Definir un bean en el contexto de Spring para la clase implementada del Servicio en el fichero
web/src/main/resources/conf/applicationContext-services.xml,

Fichero web/src/main/resources/conf/applicationContext-services.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans>
[...]
<bean id="miPrimerService" class="ejpl.services.MiPrimerServiceImpl" />
</beans>

Definir el servicio en el fichero de axis web/src/main/webapp/WEB-INF/services.xml.

16 de 101

Framework Atlas
Manual usuario de Servicios Web
En el fichero service.xml estn todas las definiciones de servicios web que necesita Axis2. Cada tag <service>
define un webservice diferente.

Fichero web/src/main/webapp/WEB-INF/services.xml
[...]
<service name="MiServicioWeb">
<parameter name="ServiceObjectSupplier" locked="false">
org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier
</parameter>
<parameter name="SpringBeanName" ocked="false">miPrimerService</parameter>
<parameter name="ServiceClass"
locked="false">prueba123.services.MiPrimerService
</parameter>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
</messageReceivers>
</service>
[...]
Se ha de incluir un tag de service como el que se muestra de ejemplo modificando los siguientes parmetros:

SpringBeanName: nombre del bean que se defini en el fichero applicationContext-services.xml.


ServiceClass: Nombre de la clase (con su paquete correspondiente) que representa el interfaz del
servicio (se utiliza para la construccin del descriptor WSDL).
4.1.5.

Paso 5: Cambio del namespace del servicio (si se necesita)

Si se quiere modificar el namespace del servicio web generado por defecto se hace modificando las propiedades
xmlns:ns y targetNamespace y aadiendo el tag <schema schemaNamespace=""/>
Por ejemplo para cambiarlo a http://salud.madrid.org/IntegracionHorus
Fichero web/src/main/webapp/WEB-INF/services.xml
[...]
<service name="MiServicioWeb"
xmlns:ns="http://salud.madrid.org/IntegracionHorus"
targetNamespace="http://salud.madrid.org/IntegracionHorus">
<schema schemaNamespace="http://salud.madrid.org/IntegracionHorus"/>
[...]
</service>
[...]

17 de 101

Framework Atlas
Manual usuario de Servicios Web
4.1.6.

Paso 6: Eliminar Namespaces, Elements y Atributos (Si se necesita)


ATENCION

Para hacer los cambios propuestos en este punto se deber pedir una autorizacin excepcional
a Arquitectura explicando la necesidad de usarlo, ya que un cambio en la respuesta XML de un
Web Service puede hacer que los clientes no puedan leerla correctamente

Si se quiere modificar cualquier parte del xml de respuesta que se enva como respuesta del servicio se deber
hacer uso del patrn message exchange pattern (MEP) creando una clase que implemente la clase abstracta
AtlasInOutMessageReceiver y hacer un Override del mtodo modificarRespuesta, esta clase se deber indicar
en el Services.xml en a nivel de todo el servicio o solo a nivel de una operacin, a continuacin se ponen ambos
ejemplos:
Fichero web/src/main/webapp/WEB-INF/services.xml
[...]
<!-- Ejemplo de interceptor a nivel de servicio(para todas las operaciones) -->
<service name="EjemploService">
. . .
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="ws128.services.MiInterceptor" />
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
</messageReceivers>
</service>
[...]
Fichero web/src/main/webapp/WEB-INF/services.xml
[...]
<!-- Ejemplo de interceptor a nivel de Operacin (Operacin alterar) -->
<service name="EjemploService">
. . .
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
</messageReceivers>
<operation name="alterar">
<messageReceiver class="ws128.services.MiInterceptor"/>
</operation>
</service>
[...]

18 de 101

Framework Atlas
Manual usuario de Servicios Web

La clase MiInterceptor sera de la siguiente forma:


MiInterceptor.java
package ws128.services;
import atlas.clientews.client.AtlasInOutMessageReceiver;
public class MiInterceptor extends AtlasInOutMessageReceiver {
@Override
public String modificarRespuesta(String respuesta) {
//Estos reemplazos son solo de ejemplo
respuesta = respuesta.replaceAll("<ns:", "<");
respuesta = respuesta.replaceAll("</ns:", "</");
respuesta = respuesta.replaceAll("xsi:type=\"ax23:DatosSalida\"", "");
return respuesta;
}

4.1.7.

Paso 7: Levantar el Servidor

Una vez configurado el servicio web, para probarlo deber ejecutarse el servidor Jetty segn se explica en el
manual ATLAS_MUS_Arquetipo_WebService. Para comprobar que se ha levantado correctamente y que estn
disponibles los servicios se puede acceder a la url http://localhost:9080 y nos debe aparecer una pantalla similar a
esta:

4.1.8.

Paso 8: Obtener el wsdl del Servicio

Para obtener el wsdl de nuestro servicio web se puede a travs de una url del siguiente tipo:
http://localhost:9080/services/MiServicioWeb?wsdl

19 de 101

Framework Atlas
Manual usuario de Servicios Web

Este wsdl se ha de guardar en el mdulo test en la carpeta test/src/main/resources/wsdl con el nombre del
servicio y la extensin wsdl. Ej: MiServicioWeb.wsdl.

En el caso de que el servicio web se construya a partir de un wsdl predeterminado (que no hay sido generada por
Axis) al intentar acceder al wsdl se obtiene el siguiente error:

<error>
<description>Unable to generate WSDL 1.1 for this service</description>
<reason>If you wish Axis2 to automatically generate the WSDL 1.1, then please set
useOriginalwsdl as false in your services.xml</reason>
</error>

Para poder obtener correctamente el wsdl es necesario realizar lo siguiente:


1. - Si el WSDL predeterminado del servicio es un solo fichero, se ha de hacer lo
siguiente:
a.- En el fichero WEB-INF/services.xml, en la definicin del servicio se coloca el siguiente
parmetro:
<parameter name="useOriginalwsdl">true</parameter>
b.- Para que el fichero WSDL pueda ser localizado y entregado, este ha de dejarse, con el
nombre del servicio en el directorio WEB-INF.
Un ejemplo, si tengo el servicio 'EjemploServicio', adems del parmetro 'useOriginalwsdl'
tendr que haber un fichero:
---->WEB-INF/EjemploServicio.wsdl

20 de 101

Framework Atlas
Manual usuario de Servicios Web
En este caso el wsdl se obtendra con la URL:
http://localhost:9080/services/EjemploServicio?wsdl
2. - Si el WSDL consta de varios ficheros, adems del parmetro 'useOriginalwsdl' en la
definicin del servicio, este ha de generarse en formato aar o 'exploded' (contenido del aar
descomprimido). La esctructura en formato 'exploded' sera la siguiente (con
EjemploServicioNoSeguro):
---->WEB-INF
-------->services
------------>EjemploServicio
---------------->META-INF
-------------------->services.xml (descriptor del servicio)
-------------------->service.wsdl
-------------------->parte1.xsd
-------------------->parte2.xsd
En este ejemplo, el fichero service.wsdl tiene sentencias:
<xs:import namespace="..." schemaLocation="parte1.xsd" />
<xs:import namespace="..." schemaLocation="parte2.xsd" />
En este caso el wsdl se obtendra con la URL:
http://localhost:9080/services/EjemploServicio?wsdl [^]
y cada una de los ficheros xsd con la URL:
http://localhost:9080/services/EjemploServicio?xsd=parte1.xsd [^]
http://localhost:9080/services/EjemploServicio?xsd=parte2.xsd [^]
En el caso de tener un WSDL predeterminado para el servicio, adems ser necesario editar el fichero
weblogic.xml y aadir la siguiente lnea (marcada en amarillo):

Fichero web/src/main/webapp/WEB-INF/weblogic.xml
<wls:container-descriptor>
<wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
<wls:show-archived-real-path-enabled>true</wls:show-archived-real-path-enabled>
</wls:container-descriptor>

4.1.9.

Paso 9: Creacin de la interfaz para clientes en nuestro servidor

Una vez creado el servicio web ahora vamos a crear el cliente que se distribuir con una librera para que las
aplicaciones que tengan que integrarse con nuestra aplicacin lo hagan utilizando esta librera.

Los clientes de servicio web ATLAS se caracterizan por que no se generan a partir de un descriptor WSDL del
servicio sino que se parte de la clase de la interfaz del servicio y de las clases que representen a los parmetros

21 de 101

Framework Atlas
Manual usuario de Servicios Web
del mismo. La invocacin a los mtodos del servicio web va a ser dinmica. Para facilitar esta invocacin dinmica
dentro del framework Atlas existen dos clases base para la creacin de clientes de servicio web, en el caso actual
hablamos de clientes no seguros y clientes seguros sin validacin de certificado de cliente.

AtlasUnsecuredWSClient: esta clase es la utilizada para servidores sin seguridad a nivel de mensaje o
seguridad HTTPS sin validacin de certificado de cliente (Todos los clientes pueden conectar) ;

Realizamos una interfaz como el siguiente ejemplo:

ClienteMiPrimerService.java
package prueba.client;
import
import
import
import

java.util.Properties;
prueba.services.MiPrimerService;
atlas.clientews.client.AtlasUnsecuredWSClient;
atlas.core.exceptions.ServiceException;

public class ClienteMiPrimerService extends AtlasUnsecuredWSClient implements MiPrimerService{


/** Constructor que recibe como parmetro el endpoint del servicio
Se le pasar en el fichero de contexto de Spring y lo coger del fichero
enviroment.properties
**/
public ClienteMiPrimerService(String endpoint) {
super(endpoint, "http://services.prueba123");
}
/** Propiedades */
private Properties properties;
@Override
public String getFechaString() throws ServiceException {
return invoke("getFechaString", properties, String.class);
}
/**
* Establece el valor de las propiedades
* @param properties las propiedades
*/
public void setProperties(Properties properties) {
this.properties = properties;
}
}

La clase cliente a implementar debe cumplir las siguientes condiciones:


1) Se crea en el paquete xxxx.client dentro del mdulo lib.
2) Se llama segn la siguiente nomenclatura ClienteyyyyService.java. Ejpl: ClienteMiPrimerService.
3) Extiende la clase base a utilizar, en este caso AtlasUnsecuredWSClient.
4) Implementa la interfaz del servicio para proporcionar una implementacin de todos los mtodos de este.
5) El constructor toma como parmetro la URL del servicio. Dejar el namespace del servicio igual que se ha
generado en los ejemplos del arquetipo, no modificar este valor.
6) Los mtodos implementados de la interfaz de servicio llevan la anotacin @Override para que el
compilador pueda detectar posibles errores en el nombre de estos.

22 de 101

Framework Atlas
Manual usuario de Servicios Web
7) Las llamadas al servicio web se realizan a travs del mtodo invoke con los parmetros definidos en su
javadoc:

Definicin del mtodo invoke


/**
* Realiza la invocacin del servicio web
* @param <E> parametrizacin del tipo de objeto a devolver.
* @param methodName mtodo de webservice a llamar
* @param serviceProperties propiedades de llamada del servicio web
* @param returnType tipo a retornar por la llamada
* @param parameters parametros de llamada
* @return respuesta del webservice
* @throws ServiceException si hubo algn tipo de problema en la llamada
*/
protected <E> E invoke(String methodName, Properties serviceProperties,
Class<E> returnType, Object... parameters)
throws ServiceException {

En caso de que el mtodo de llamada acepte ms de un parmetro de entrada, se deber realizar la llamada al
mtodo invoke de la siguiente forma:
Llamada al mtodo invoke con varios parmetros
@Override
public DatosSalida alterar(DatosEntrada entrada1, String entrada2)
throws ServiceException {
return invoke("alterar", properties, DatosSalida.class, entrada1, entrada2);
}

1) Las propiedades del servicio se almacenan en una variable interna de la clase ya que es necesario
pasarlas en cada llamada a la clase base AtlasUnsecuredWSClient. Es necesario tambin que est
implementado el mtodo setProperties tal cul viene en el ejemplo. En casos generales, no ser necesario
especificar ningn parmetro en las propiedades del servicio, siempre que no se enven ficheros adjuntos
(en caso afirmativo debe establecerse enableMTOM a true) y no se haga uso de otros mdulos de Axis2
como por ejemplo addressing. A continuacin se muestran las propiedades que se pueden utilizar:

Parmetro

Descripcion

Valor por Defecto

repositoryRoot

Raz del repositorio de mdulos de Axis2

"./META-INF/"

enableMTOM

Habilitar optimizacin de envo de binarios.

false

4.1.10. Paso 10: Test Unitarios de nuestra libreria Cliente


Los tests unitarios que habrn de realizarse dentro de la librera deben comprobar la correcta comunicacin con el

23 de 101

Framework Atlas
Manual usuario de Servicios Web
webservice en cada uno de los mtodos de llamada de que disponga. Para la creacin de dichos tests se utilizar,
como es norma en el framework ATLAS, la librera java jUnit 4. Para facilitar la creacin del contexto de Spring las
clases de test heredarn de la clase AbstractJUnit4SpringContextTests.

NOTA
Con el arquetipo recien generado todos los mtodos de los test de JUnit incluyen la anotacin @Ignore y no se
ejecutarn en el proceso de construccin de la librera cliente (sern ignorados). Una vez creada e instalada la
librera en el repositorio local (mvn clean install), se podr eliminar la anotacin @Ignore de cualquier mtodo
que se desee testear, y ejecutar el test con el comando mvn test (el mdulo de servidor web debe estar
arrancado tambin para que el test sea correcto).

El cdigo de prueba de una clase de test de ejemplo es el siguiente (definida en lib/src/test/java):

lib/src/test/java/ClienteMiPrimerServiceTest.java

24 de 101

Framework Atlas
Manual usuario de Servicios Web
package prueba.client;
import static org.junit.Assert.*;
import
import
import
import
import

org.junit.Test;
org.springframework.beans.factory.annotation.Autowired;
org.springframework.beans.factory.annotation.Qualifier;
org.springframework.test.context.ContextConfiguration;
org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;

import prueba.services.MiPrimerService;
@ContextConfiguration(locations = {"classpath:/conf/applicationContext-test.xml"})
public class ClienteMiPrimerServiceTest extends AbstractJUnit4SpringContextTests {
// Autowired solo permitido en clases de tests unitarios
@Autowired @Qualifier("miPrimerService")
private MiPrimerService service;
public void setService(MiPrimerService service) {
this.service = service;
}
@Test
public void testGetFechaString() {
assertNotNull("El servicio es nulo", service);
String salida = null;
try {
salida = service.getFechaString();
} catch (Exception e){
e.printStackTrace();
fail("Error en la llamada");
}
assertNotNull(salida);
System.out.println("** Salida: " + salida);
}
}

Se ha marcado en color amarillo la llamada al invocador dinmico creado anteriormente.

En este ejemplo, se ha creado un test unitario que recoge la instancia del invocador concreto de Spring. A travs
de Spring tambin se est pasando una URL concreta de servicio para testear. Adems de implementar el test,
para probar el cliente es necesario configurar el endpoint en el contexto de Spring de los tests, modificando el
fichero lib/src/test/resources//environment.properties, segn se muestra en el ejemplo incluido en el arquetipo:

25 de 101

Framework Atlas
Manual usuario de Servicios Web

lib/src/test/resources/environment.properties
[...]
# Datos de WS
miPrimerService.endpoint=http://localhost:9080/services/MiServicioWeb
[...]

Este test se puede ejecutar desde el propio Eclipse como cualquier test unitario, pero hay que tener en cuenta que
hay que tener levantado el servicio web.

4.2.

CREACIN DE UN SERVIDOR CON VALIDACIN DE CERTIFICADO DE CLIENTE

En los servicios web en los que haya que implementar seguridad a nivel de transporte HTTPS y sea necesario la
validacin de los clientes que se conectan, es necesaria configurar nuestro servidor para que verifique el cliente
conectado contra la plataforma de ASF. Para ello hay que realizar los siguientes pasos.

ATENCION
Esta configuracin es para conexiones seguras HTTPS en las que el servidor verifica los
clientes conectados contra ASF.
Si se precisa una conexin segura (HTTPS) sin este tipo de validaciones (permitiendo a todos
los clientes conectarse), consultar el apartado previo:
CREACIN DE UN SERVIDOR SIN SEGURIDAD (HTTP y HTTPS SIN CERTIFICADO
CLIENTE)

4.2.1.

Paso 1: Alta de la aplicacin en la plataforma ASF

Antes de configurar la aplicacin, debemos darla de alta en el entorno ASF y configurarla. Para el entorno de
desarrollo, esto se debe realizar mediante una consulta a la Unidad de Arquitectura de Aplicaciones en la categora
de ASF a travs de la web de soporte. Para el resto de entornos (validacin, produccin, etc.) se incluye dicha
informacin en la ficha de entrega.

La informacin que se ha de incluir en la solicitud es la siguiente:


-

operacin: WSS - seguridad servicio web

aplicacin: Nombre de aplicacin que se desea dar de alta en ASF

26 de 101

Framework Atlas
Manual usuario de Servicios Web
-

certificado de servidor a utilizar: Indicar qu certificado de servidor se desea utilizar, o si se quiere


utilizar uno genrico.

A continuacin se muestra un ejemplo de solicitud:

Ejemplo de solicitud a la Unidad de Arquitectura de Aplicaciones


Operacion: WSS - seguridad servicio web
Aplicacion: EJPL_WS_SERVIDOR
Certificado de servidor: certificado genrico

Como respuesta a la solicitud, la Unidad de Arquitectura de Aplicaciones contestar con un mensaje como este:

Ejemplo de respuesta de la Unidad de Arquitectura de Aplicaciones

Se han realizado actuaciones en la plataforma ASF 5.0 para definir servidor y cliente del alta solicitada para el
mdulo "EJPL_WS_SERVIDOR".
Los datos para configurar los desarrollos son los siguientes:
- SERVIDOR
> ID de aplicacin ASF: EJPL_WS_SERVIDOR
> alias "localkey": servidor_ws
- CLIENTE
> ID de aplicacin ASF: EJPL_WS_CLIENTE
> alias "localkey": cliente_ws
> alias "remotekey": servidor_ws_cert

En la respuesta se mostrarn los datos de configuracin necesarios para el servicio web (apartado SERVIDOR) y
para las pruebas unitarias del cliente en el mdulo lib (apartado CLIENTE).

4.2.2.

Paso 2: Configuracin del Servicio

Una vez que se ha dado de alta en ASF y con los de SERVIDOR tenemos que incluir en el fichero
src/main/resources/environment.properties lo siguiente:
src/main/resources/environment.properties
# Ids de aplicacion
app.id.asf=EJPL_WS_SERVIDOR
# Parametros de WS
El valor de la variable app.id.asf es el identificador de la aplicacin en la plataforma ASF (debe ser igual que la
aplicacin dada de alta en ASF). Este dato se corresponde con el ID de aplicacin en el apartado SERVIDOR de la

27 de 101

Framework Atlas
Manual usuario de Servicios Web
respuesta de la Unidad de Arquitectura de Aplicaciones.

4.2.3.

Paso 3: Actualizacin de configuracin en el fichero services.xml

En la lista de parmetros:

Fichero web/src/main/webapp/WEB-INF/services.xml
<service name="ComunicacionApertura">
...
<parameter name="asfInvokingApp">${app.id.asf}</parameter>

Donde dicha variable se corresponde con el cdigo ASF de nuestra aplicacin registrada en ASF.

Adems, se aade el transporte HTTPS dentro del mismo fichero:

Fichero web/src/main/webapp/WEB-INF/services.xml

<transports>
<transport>https</transport>
</transports>

Y por ltimo, se importa el mdulo de seguridad de atlas:

Fichero web/src/main/webapp/WEB-INF/services.xml
<module ref="atlasfrm-clientews-seguridad-https" />

Esta configuracin en nuestro servidor, har que los clientes que se conecten sean verificados contra ASF

4.2.4.

Paso 4: Modificacin de la interfaz para clientes en nuestro servidor

Una vez creado el servicio web ahora vamos a crear el cliente que se distribuir con una librera para que las
aplicaciones que tengan que integrarse con nuestra aplicacin lo hagan utilizando esta librera.

Los clientes de servicio web ATLAS se caracterizan por que no se generan a partir de un descriptor WSDL del

28 de 101

Framework Atlas
Manual usuario de Servicios Web
servicio sino que se parte de la clase de la interfaz del servicio y de las clases que representen a los parmetros
del mismo. La invocacin a los mtodos del servicio web va a ser dinmica. Para facilitar esta invocacin dinmica
dentro del framework Atlas existen varias clases base para la creacin de clientes de servicio web, en el caso
actual hablamos de clientes seguros con validacin de certificado.

AtlasHttpsWSClient: esta clase es la utilizada para servidores con seguridad a nivel de transporte HTTPS
y certificado de cliente

Por lo tanto, nuestra interfaz en vez de extender de AtlasUnsecuredWSClient, extender de AtlasHttpsWSClient,


por ejemplo as:

ClienteMiPrimerService.java
package prueba.client;
import java.util.Properties;
import prueba.services.MiPrimerService;

import atlas.clientews.client.AtlasHttpsWSClient;
import atlas.core.exceptions.ServiceException;
public class ClienteMiPrimerService extends AtlasHttpsWSClient implements MiPrimerService{
/** Constructor que recibe como parmetro el endpoint del servicio
Se le pasar en el fichero de contexto de Spring y lo coger del fichero
enviroment.properties
**/
public ClienteMiPrimerService(String endpoint) {
super(endpoint, "http://services.prueba123");
}
/** Propiedades */
private Properties properties;
@Override
public String getFechaString() throws ServiceException {
return invoke("getFechaString", properties, String.class);
}
/**
* Establece el valor de las propiedades
* @param properties las propiedades
*/
public void setProperties(Properties properties) {
this.properties = properties;
}
}

4.2.5.

Acceso al certificado de cliente (para comprobaciones personalizadas)

Hemos configurado un servicio web para que los clientes que conectan sean verificados contra ASF.. Sin embargo,
el servicio web puede tener otros requisitos de seguridad respecto del cliente, como saber si el certificado que
conecta, aun siendo aceptado por ASF, es vlido para nuestro servicio.

29 de 101

Framework Atlas
Manual usuario de Servicios Web

Dentro del cdigo del servicio web es sencillo recoger el certificado digital cliente de firma, tal y como se muestra a
continuacin:
Obtencin del certificado de cliente del mensaje entrante
@Service
public class EjemploServicioImpl implements EjemploServicio {
...
private void getClientCertificate() {
try {
String cert = AtlasRampartUtils.getSigningCert();
log.info("Certificado de firma: \n\n" + cert + "\n\n");
} catch (AtlasSecurityException e) {
log.error("Error al capturar certificado de firma.", e);
}
}
}
En el ejemplo anterior se ha marcado en amarillo la sentencia con la que se recoge el certificado de firma del
mensaje del cliente (el resto del cdigo es solo un ejemplo de implementacin). Hay que tener las siguientes
consideraciones:
Si el mensaje no contiene seguridad, se devolver un valor null.
Si se produce algn problema en la exploracin del mensaje entrante para la captura del certificado, se
devolver una excepcin AtlasSecurityException.
Si se desea obtener los datos de este certificado, ser necesario realizar las llamadas correspondientes al
servicio de ASF de ATLAS (CryptService.getDatosCertificado(String)). Para ms informacin, consultar
el documento ATLAS_MUS_Servicio_Certificados.doc.

4.3.

CREACIN DE UN SERVIDOR CON SEGURIDAD EN MENSAJE WS-SECURITY

En los servicios web en los que haya que implementar seguridad a nivel de mensaje, utilizaremos WS Security.

En este apartado se muestra cmo configurar un servicio web para incluir seguridad de WS-Security que consiste
en que la seguridad va dentro del mensaje SOAP.

Dentro de este modelo de seguridad existen las siguientes posibilidades:


-

Firmado digital del mensaje SOAP Garantiza la procedencia del mensaje, integridad de los datos y
no repudio.

Cifrado del mensaje SOAP Garantiza la confidencialidad del mensaje.

Antes de implementar la seguridad en un servicio web lo primero es crear el servicio web y probar su correcto

30 de 101

Framework Atlas
Manual usuario de Servicios Web
funcionamiento sin incluir seguridad tal y como se indica en los apartados anteriores.

Para cada servicio web al que se quiera incluir seguridad, ha de asociale una poltica de seguridad. Dentro del
arquetipo en el mdulo lib podemos encontrarnos dos politicas (lib/src/main/resources/META-INF):
politicaWSSFirmado.xml
politicaWSSFirmadoCifrado.xml

En estos ficheros se definen las restricciones de seguridad a aplicar siguiendo los estndares de WS SecurityPolicy.

Alguna de las caractersticas de estas politicas son las siguientes:


En el intercambio de informacin se utilizarn claves asimtricas, pares clave pblica (certificado) +
clave privada.
El certificado a usar deber ser del tipo X509v3 y adems deber contar con una referencia de tipo
thumbprint (tags RequireThumbprintReference y WssX509V3Token10).
La cabecera de seguridad del mensaje deber contener una fecha de creacin de este (tag
IncludeTimestamp).
Se firmar digitalmente el cuerpo del mensaje (tag SignedParts/Body).
Se cifrar el contenido del cuerpo del mensaje (tag EncryptedParts/Body).
El mensaje firmado contendr una copia del certificado pblico del firmante (tag X509Token
IncludeToken=/Always).

Para las operaciones de firma, cifrado y validacin de firma y cifrado se utilizar la plataforma ASF.

Suponiendo que ya tenemos un Servicio creado y funcionando pasamos a incorporale WSSecurity


4.3.1.

Paso 1: Alta de la aplicacin en la plataforma ASF

Antes de configurar la aplicacin, debemos darla de alta en el entorno ASF y configurarla. Para el entorno de
desarrollo, esto se debe realizar mediante una consulta a la Unidad de Arquitectura de Aplicaciones en la categora
de ASF a travs de la web de soporte. Para el resto de entornos (validacin, produccin, etc.) se incluye dicha
informacin en la ficha de entrega.

La informacin que se ha de incluir en la solicitud es la siguiente:


-

operacin: WSS - seguridad servicio web

aplicacin: Nombre de aplicacin que se desea dar de alta en ASF

certificado de servidor a utilizar: Indicar qu certificado de servidor se desea utilizar, o si se quiere


utilizar uno genrico.

A continuacin se muestra un ejemplo de solicitud:

31 de 101

Framework Atlas
Manual usuario de Servicios Web
Ejemplo de solicitud a la Unidad de Arquitectura de Aplicaciones
Operacion: WSS - seguridad servicio web
Aplicacion: EJPL_WS_SERVIDOR
Certificado de servidor: certificado genrico

Como respuesta a la solicitud, la Unidad de Arquitectura de Aplicaciones contestar con un mensaje como este:

Ejemplo de respuesta de la Unidad de Arquitectura de Aplicaciones

Se han realizado actuaciones en la plataforma ASF 5.0 para definir servidor y cliente del alta solicitada para el
mdulo "EJPL_WS_SERVIDOR".
Los datos para configurar los desarrollos son los siguientes:
- SERVIDOR
> ID de aplicacin ASF: EJPL_WS_SERVIDOR
> alias "localkey": servidor_ws
- CLIENTE
> ID de aplicacin ASF: EJPL_WS_CLIENTE
> alias "localkey": cliente_ws
> alias "remotekey": servidor_ws_cert

En la respuesta se mostrarn los datos de configuracin necesarios para el servicio web (apartado SERVIDOR) y
para las pruebas unitarias del cliente en el mdulo lib (apartado CLIENTE).
4.3.2.

Paso 2: Configuracin del Servicio

Una vez que se ha dado de alta en ASF y con los de SERVIDOR tenemos que incluir en el fichero
src/main/resources/environment.properties lo siguiente:
src/main/resources/environment.properties
# Ids de aplicacion
app.id.asf=EJPL_WS_SERVIDOR
# Parametros de WS
miPrimerService.localKey=servidor_ws

El valor de la variable app.id.asf es el identificador de la aplicacin en la plataforma ASF (debe ser igual que la
aplicacin dada de alta en ASF). Este dato se corresponde con el ID de aplicacin en el apartado SERVIDOR de la
respuesta de la Unidad de Arquitectura de Aplicaciones.

Es necesario crear una variable con la siguiente nomenclatura <nombreServicio>.localKey con el valor del alias
localkey proporcionado (alias del certificado con el que se va a firmar la respuesta). Ejpl:
miPrimerService.localkey.

32 de 101

Framework Atlas
Manual usuario de Servicios Web

ATENCION
Recordar que cada vez que se modifica el valor de una variable en el fichero
src/main/resources/environment.properties es necesario tambin modificar todos los ficheros
war/(nombreEntorno)/environment.properties.

4.3.3.

Paso 3: Actualizacin de configuracin en el fichero services.xml

Para asociar una poltica de seguridad para un servicio web determinado, hay que incluir una serie de lneas dentro
del tag <service> asociado al servicio en el fichero services.xml. En un fichero services.xml podr haber servicios
seguros y servicios no seguros conviviendo sin problemas.

Como hemos dicho hay dos polticas por lo tanto dos configuraciones distintas a incluir dependiendo de cual se
elija:

33 de 101

Framework Atlas
Manual usuario de Servicios Web

Servicio con politicaWSSFirmado


<service name="MiServicioWebWSSecurity1">
<parameter name="ServiceObjectSupplier" locked="false">
org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier
</parameter>
<parameter name="SpringBeanName" locked="false">miPrimerService</parameter>
<parameter name="ServiceClass" locked="false">
prueba123.services.MiPrimerService
</parameter>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
</messageReceivers>
<module ref="atlasfrm-clientews-seguridad" />
<wsp:Policy wsu:Id="politicaWSSFirmado"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurityutility-1.0.xsd"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:ExactlyOne>
<wsp:All>
<sp:AsymmetricBinding
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:InitiatorToken>
<wsp:Policy>
<sp:X509Token
sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Always">
<wsp:Policy>
<sp:RequireThumbprintReference />
<sp:WssX509V3Token10 />
</wsp:Policy>
</sp:X509Token>
</wsp:Policy>
</sp:InitiatorToken>
<sp:RecipientToken>
<wsp:Policy>
<sp:X509Token
sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Always">
<wsp:Policy>
<sp:RequireThumbprintReference />
<sp:WssX509V3Token10 />
</wsp:Policy>
</sp:X509Token>
</wsp:Policy>
</sp:RecipientToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:TripleDesRsa15 />
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Strict />
</wsp:Policy>
</sp:Layout>
<sp:IncludeTimestamp />
<sp:OnlySignEntireHeadersAndBody />
</wsp:Policy>
</sp:AsymmetricBinding>

34 de 101

Framework Atlas
Manual usuario de Servicios Web
<sp:SignedParts
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<sp:Body/>
</sp:SignedParts>
<atlas:ASFConfig xmlns:atlas="http://atlas.madrid.org/security/policy">
<atlas:invokingApp>${app.id.asf}</atlas:invokingApp>
<atlas:operationMode>server</atlas:operationMode>
<atlas:localKey>${miPrimerService.localKey}</atlas:localKey>
<sp:Wss10
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:MustSupportRefKeyIdentifier/>
<sp:MustSupportRefIssuerSerial/>
</wsp:Policy>
</sp:Wss10>
<atlas:wsuTsLife>300000</atlas:wsuTsLife>
</atlas:ASFConfig>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
</service>

Servicio con politicaWSSFirmadoCifrado

35 de 101

Framework Atlas
Manual usuario de Servicios Web
<service name="MiServicioWebWSSecurity1">
<parameter name="ServiceObjectSupplier" locked="false">
org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier
</parameter>
<parameter name="SpringBeanName" locked="false">miPrimerService</parameter>
<parameter name="ServiceClass" locked="false">
prueba123.services.MiPrimerService
</parameter>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
</messageReceivers>
<module ref="atlasfrm-clientews-seguridad" />
<wsp:Policy wsu:Id="politicaWSSFirmadoCifrado"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurityutility-1.0.xsd"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:ExactlyOne>
<wsp:All>
<sp:AsymmetricBinding
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:InitiatorToken>
<wsp:Policy>
<sp:X509Token
sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Always">
<wsp:Policy>
<sp:RequireThumbprintReference />
<sp:WssX509V3Token10 />
</wsp:Policy>
</sp:X509Token>
</wsp:Policy>
</sp:InitiatorToken>
<sp:RecipientToken>
<wsp:Policy>
<sp:X509Token
sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Always">
<wsp:Policy>
<sp:RequireThumbprintReference />
<sp:WssX509V3Token10 />
</wsp:Policy>
</sp:X509Token>
</wsp:Policy>
</sp:RecipientToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:TripleDesRsa15 />
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Strict />
</wsp:Policy>
</sp:Layout>
<sp:IncludeTimestamp />
<sp:OnlySignEntireHeadersAndBody />
</wsp:Policy>
</sp:AsymmetricBinding>

36 de 101

Framework Atlas
Manual usuario de Servicios Web
<sp:SignedParts
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<sp:Body/>
</sp:SignedParts>
<sp:EncryptedParts
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<sp:Body/>
</sp:EncryptedParts>
<atlas:ASFConfig xmlns:atlas="http://atlas.madrid.org/security/policy">
<atlas:invokingApp>${app.id.asf}</atlas:invokingApp>
<atlas:operationMode>server</atlas:operationMode>
<atlas:localKey>${miPrimerService.localKey}</atlas:localKey>
<sp:Wss10
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:MustSupportRefKeyIdentifier/>
<sp:MustSupportRefIssuerSerial/>
</wsp:Policy>
</sp:Wss10>
<atlas:wsuTsLife>300000</atlas:wsuTsLife>
</atlas:ASFConfig>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
</service>

La variable incluida en amarillo es la nica que hay que configurar. El resto es igual para todos los servicios que
necesiten esta politica de firma y cifrado. Se ha de poner el nombre de la variable incluida en el fichero
enviroment.properties.

Aunque en el listado anterior se han incluido las variables de configuracin bsicas, si se necesita una
configuracin avanzada puede utilizarse cualquiera de las variables definidas en la siguiente tabla:

Propiedad

Descripcin

Valor

invokingApp

Nombre de la aplicacin en ASF 5. Parmetro Ej: EJPL_WS_SERVIDOR


obligatorio.

operationMode

Modo de operacin del mdulo de seguridad. Solo se Ej: server


admiten dos valores: client o server. Parmetro
obligatorio.

localKey

Nombre del certificado propio a usar en la Ej: servidor_ws


comunicacin segura. Parmetro obligatorio.
Este certificado se utilizar para las operaciones de
firmado del mensaje de peticin y desencriptado del
mensaje de respuesta.

wsuTsLife

Tiempo de validez del mensaje en milisegundos.

signatureOperation

Nombre de la operacin en ASF para el firmado digital Por defecto:


del mensaje. Parmetro no obligatorio. Ser
FIRMA_SIMPLE
comunicado en la respuesta a la solicitud en ASF si es
necesario configurarlo

37 de 101

Ej: 300000 (5 minutos)

Framework Atlas
Manual usuario de Servicios Web
encryptionOperation

Nombre de la operacin en ASF para el cifrado del Por defecto: CIFRADO


mensaje. Parmetro no obligatorio. Ser comunicado
en la respuesta a la solicitud en ASF si es necesario
configurarlo

decryptionOperation

Nombre de la operacin en ASF para el descifrado del Por defecto:


mensaje. Parmetro no obligatorio. Ser comunicado
DESCIFRADO
en la respuesta a la solicitud en ASF si es necesario
configurarlo

validationOperation

Nombre de la operacin en ASF para la validacin de Por defecto:


la firma de un mensaje. Parmetro no obligatorio. Ser
VERIFICACION
comunicado en la respuesta a la solicitud en ASF si es
necesario configurarlo

applySecurityOnFault

Por defecto se aplica la seguridad configurada a todos Por defecto: true


los mensajes del servicio. En algunos casos (red
SARA) es necesario no aplicar seguridad a los
mensajes que generan un <soap:fault>. Si se desea
este comportamiento se debe configurar un valor false
en este parmetro

4.3.4.

Paso 4: Modificacin de la interfaz para clientes en nuestro servidor

Una vez creado el servicio web ahora vamos a crear el cliente que se distribuir con una librera para que las
aplicaciones que tengan que integrarse con nuestra aplicacin lo hagan utilizando esta librera.

Los clientes de servicio web ATLAS se caracterizan por que no se generan a partir de un descriptor WSDL del
servicio sino que se parte de la clase de la interfaz del servicio y de las clases que representen a los parmetros
del mismo. La invocacin a los mtodos del servicio web va a ser dinmica. Para facilitar esta invocacin dinmica
dentro del framework Atlas existen varias clases base para la creacin de clientes de servicio web, en el caso
actual hablamos de clientes seguros con validacin de certificado.

AtlasSecuredWSClient: esta clase es la utilizada para servidores con seguridad a nivel de mensaje a
travs de WS-Security

Por lo tanto, nuestra interfaz en vez de extender de AtlasUnsecuredWSClient, extender de AtlasSecuredWSClient,


por ejemplo as:

ClienteMiPrimerService.java

38 de 101

Framework Atlas
Manual usuario de Servicios Web
package prueba123.client;
import
import
import
import

java.util.Properties;
prueba123.services.MiPrimerService;
atlas.clientews.client.AtlasSecuredWSClient;
atlas.core.exceptions.ServiceException;

public class ClienteMiPrimerServiceWSS1 extends AtlasSecuredWSClient implements


MiPrimerService{
public ClienteMiPrimerServiceWSS1(String endpoint) {
super(endpoint, "http://services.prueba123");
}
/** Propiedades */
private Properties properties;

@Override
public String getFechaString() throws ServiceException {
return invoke("getFechaString", properties, String.class);
}
/**
* Establece el valor de las propiedades
* @param properties las propiedades
*/
public void setProperties(Properties properties) {
this.properties = properties;
}
}

4.4.

CREACIN DE UN SERVIDOR CON WS-SECURITY + CERTIFICADO DE CLIENTE

En caso de tener que realizar un servidor con seguridad a nivel de mensaje + seguridad a nivel de transporte
concertificado de cliente.
La configuracin de este tipo de servicio web es la misma que la del punto anterior (Servidor con WS-Security) solo
que aadiremos tambin el mdulo de seguridad.
ATENCION
Este apartado describe la configuracin para un servidor con seguridad a nivel de mensaje y a
nivel de transporte con certificado de cliente.
En caso de la seguridad a nivel de transporte es a travs de certificado de cliente, el servidor
verificar los clientes conectados.
Si no se va a comprobar los clientes conectados (si no se requiere esta validacin) basta con
seguir los pasos del punto anterior:
CREACIN DE UN SERVIDOR CON SEGURIDAD EN MENSAJE WS-SECURITY

39 de 101

Framework Atlas
Manual usuario de Servicios Web

4.4.1.

Paso 1: Actualizacin de configuracin en el fichero services.xml

Una vez seguidos los pasos del punto anterior, aadir al fichero services.xml las siguientes lneas, de tal manera
que el fichero services.xml quedara as:
services.xml
[...]
<service name="EjemploServicioSeguroFirmadoHttps">
[...]
<parameter name="asfInvokingApp">${app.id.asf}</parameter>
<transports>
<transport>https</transport>
</transports>
<module ref="atlasfrm-clientews-seguridad-https" />
<module ref="atlasfrm-clientews-seguridad" />
<wsp:Policy wsu:Id="politicaWSSFirmado" ...>
[...]
<sp:SignedParts xmlns:sp="...">
<sp:Body/>
</sp:SignedParts>
[...]
</wsp:Policy>
</service>
[...]

4.4.2.

Paso 2: Modificacin de la interfaz para clientes en nuestro servidor

Una vez creado el servicio web ahora vamos a crear el cliente que se distribuir con una librera para que las
aplicaciones que tengan que integrarse con nuestra aplicacin lo hagan utilizando esta librera.

Los clientes de servicio web ATLAS se caracterizan por que no se generan a partir de un descriptor WSDL del
servicio sino que se parte de la clase de la interfaz del servicio y de las clases que representen a los parmetros
del mismo. La invocacin a los mtodos del servicio web va a ser dinmica. Para facilitar esta invocacin dinmica
dentro del framework Atlas existen varias clases base para la creacin de clientes de servicio web, en el caso
actual hablamos de clientes seguros con validacin de certificado.

AtlasSecuredWSClient: esta clase es la utilizada para servidores con seguridad a nivel de mensaje a
travs de WS-Security + Seguridad de transporte con certificado de cliente

40 de 101

Framework Atlas
Manual usuario de Servicios Web
Por lo tanto, nuestra interfaz en vez de extender de AtlasUnsecuredWSClient, extender de AtlasSecuredWSClient,
por ejemplo as:

ClienteMiPrimerService.java
package prueba123.client;
import
import
import
import

java.util.Properties;
prueba123.services.MiPrimerService;
atlas.clientews.client.AtlasSecuredWSClient;
atlas.core.exceptions.ServiceException;

public class ClienteMiPrimerServiceWSS1 extends AtlasSecuredWSClient implements


MiPrimerService{
public ClienteMiPrimerServiceWSS1(String endpoint) {
super(endpoint, "http://services.prueba123");
}
/** Propiedades */
private Properties properties;

@Override
public String getFechaString() throws ServiceException {
return invoke("getFechaString", properties, String.class);
}
/**
* Establece el valor de las propiedades
* @param properties las propiedades
*/
public void setProperties(Properties properties) {
this.properties = properties;
}
}

41 de 101

Framework Atlas
Manual usuario de Servicios Web
5. DESARROLLO DE UN SERVICIO WEB (CLIENTE)

En este documento se diferencian dos formas de acceder a un servicio web. Si queremos acceder a un servicio
web creado con ATLAS, es mucho ms fcil ya que al crear el servicio web se gener una librera preparada para
usarla desde la parte cliente. Si no se trata de un servicio web creado con ATLAS, entonces se tendr que partir
del fichero WSDL que describe el servicio web, y generar las clases a partir de ste.

5.1.

ATLAS - CREACION DE UN CLIENTE (HTTP y HTTPS SIN CERTIFICADO CLIENTE)

Para usar un servicio web creado con ATLAS debemos disponer de la librera que se gener junto con el
servicio web. A continuacin se describen los pasos para incorporar dicha librera en nuestro proyecto y definir las
propiedades de conexin al servicio web.

5.1.1.

Paso 1: Inclusin de la dependencia

Para usar la librera generada en nuestro proyecto, ser necesario realizar la inclusin de esta dependencia en el
fichero pom.xml, segn se muestra a continuacin:
ejemplo de inclusin de dependencia en pom.xml de proyecto
<dependencies>
[...]
<dependency>
<groupId>xxxx</groupId>
<artifactId>xxxx_ws_lib</artifactId>
<version>y.y.y</version>
</dependency>
[...]
</dependencies>

Los valores de las distintas variables nos los deben proporcionar los responsables de dicha librera.

5.1.2.

Paso 2: Configuracin del contexto de Spring

Para usar la librera correctamente debemos modificar el fichero de configuracin de Spring de nuestro proyecto
denominado applicationContext-services.xml, incluyendo la lnea que importa el fichero de contexto de la librera
(modificar xxxx_ws_lib por el nombre del fichero de contexto que aparece dentro de la librera):

applicationContext-services.xml de proyecto
<beans>
[...]
<!-- Importar fichero de contexto de la librera -->
<!-- contiene definicin de bean 'miServicioWeb' -->
<import resource="classpath:/conf/applicationContext-xxxx_ws_lib.xml" />
[...]

42 de 101

Framework Atlas
Manual usuario de Servicios Web

5.1.3.

Paso 3: Configuracin del endpoint en environment.properties

El ltimo paso para configurar la URL de conexin al servicio web es definir una nueva variable en el fichero
src/main/resources/environment.properties de nuestra aplicacin, segn se muestra a continuacin:

src/main/resources/environment.properties de proyecto
[...]
# Definicin del endpoint del servicio MiServicioWeb
miPrimerService.endpoint=http://desarrollo.madrid.org/ejemplo_ws/services/MiServicioWeb

[...]

Sustituir ejemplo_ws por el mdulo tcnino del web servce y MiServicioWeb por el nombre del servicio web al que
se llama.

ATENCION
Recordar que cada vez que se modifica el valor de una variable en el fichero
src/main/resources/environment.properties es necesario tambin modificar todos los ficheros
war/<nombreEntorno>/environment.properties para incluir la nueva variable.

43 de 101

Framework Atlas
Manual usuario de Servicios Web
5.2.

ATLAS - CREACION DE UN CLIENTE CON VALIDACIN DE CERTIFICADO DE CLIENTE

Para realizar llamadas a un servicio web de atlas que dispone de seguridad a nivel de transporte con certificado de
cliente, es necesario realizar los siguientes pasos:

5.2.1.
Para

Paso 1: Aadir variables de environment

configurar

nuestro

cliente

correctamente,

tenemos

que

modificar

el

fichero

src/main/resources/environment.properties, incluyendo las lneas marcadas en amarillo en el siguiente ejemplo:

src/main/resources/environment.properties de proyecto
[...]
# Ids de aplicacion
app.id.asf=EJPL_WS_CLIENTE
# Definicin del endpoint del servicio MiServicioWeb
miServicioWeb.endpoint=http://desarrollo.madrid.org/ejemplo_ws/services/MiServicioWeb

https.keystore.path=<a rellenar por Paso a Produccin>


https.keystore.pass=CA655C9BB562C317811001D666CFD99B
https.secure.port=443
[...]

Los valores de las variables son los siguientes:


Parmetro

Descripcion

Valor por defecto

app.id.asf

Nombre de la aplicacin en ASF

Ej.: EJPL_WS_CLIENTE

[nombreServicio].endpoint

URL del servicio

Ej.:
https://desarrollo.madrid.org/<ejemplo_
ws>/services/<nombreServicio>

https.keystore.path

Ruta al almacn de certificados con

Ej.: ssl/keystore.keystore

el certificado de cliente de conexin


https.keystore.pass

Contrasea de acceso al almacn

Ej.: desarrollo

del certificado de cliente (configurar


cifrada)
https.secure.port

Puerto seguro de conexin

44 de 101

Ej.: 443

Framework Atlas
Manual usuario de Servicios Web
5.2.2.

Paso 2: Configuracin de Spring

Adems es necesario modificar en el fichero de contexto de Spring del modulo lib (applicationcontextxxxx_ws_lib.xml) el bean del cliente para aadirles las propiedades relacionadas con la seguridad tal y como se
puede ver en este ejemplo:

applicationContext-xxxx_ws_lib.xml
<beans>

<bean id="miPrimerService" class="prueba123.client.ClienteMiPrimerService">


<constructor-arg value="${miPrimerService.endpoint}" />
<property name="properties">
<props>
<prop key="keyStorePath">${https.keystore.path}</prop>
<prop key="keyStorePassword">${https.keystore.pass}</prop>
<prop key="securePort">${https.secure.port}</prop>
</props>
</property>
</bean>
</beans>
El bloque marcado en amarillo tendr que aadirse tal cual pero modificando los nombre de las variables:

El bloque marcado en amarillo tendr que aadirse sin modificaciones a la definicin del cliente. Y por ltimo,
debern aadirse al fichero environment.properties para los test unitarios las propiedades definidas en el
fichero de Spring para el servicio:
src/test/resources/environment.properties
# Ids de aplicacion
app.id.asf=EJPL_WS_CLIENTE
# Definicin del endpoint del servicio EjemploServicioHttps
miServicioWeb.endpoint=https://desarrollo.madrid.org/ejemplo_ws/services/MiServicioWeb
https.keystore.path=<a rellenar por Paso a Produccin>
https.keystore.pass=CA655C9BB562C317811001D666CFD99B
https.secure.port=443

ATENCION
Los valores de los parametros de contraseas (https.keystore.pass) han de ser cifrados antes
de configurarlos en el fichero environment.properties.

45 de 101

Framework Atlas
Manual usuario de Servicios Web
Las variables a configurar son:
Parmetro

Descripcion

Valor por defecto

app.id.asf

Nombre de la aplicacin en ASF

Ej.: EJPL_WS_CLIENTE

[nombreServicio].endpoint

URL del servicio

Ej.:
https://desarrollo.madrid.org/<ejemplo_
ws>/services/<nombreServicio>

https.keystore.path

Ruta al almacn de certificados con

Ej.: ssl/keystore.keystore

el certificado de cliente de conexin


https.keystore.pass

Contrasea de acceso al almacn

Ej.: desarrollo

del certificado de cliente (configurar


cifrada)
https.secure.port

Puerto seguro de conexin

46 de 101

Ej.: 443

Framework Atlas
Manual usuario de Servicios Web
5.3.

ATLAS - CREACION DE UN CLIENTE CON SEGURIDAD EN MENSAJE WS-SECURITY

Para realizar llamadas a un servicio web de atlas que dispone de seguridad a nivel de mensaje, tenemos que
realizar las siguientes modificaciones en nuestro cliente.

5.3.1.

Paso 1: Aadir variables de environment

Para configurar nuestro cliente para conectar con WS-Security tenemos que aadr el mdulo de seguridad,
modificando el fichero src/main/resources/environment.properties, incluyendo las lneas marcadas en amarillo
en el siguiente ejemplo:

src/main/resources/environment.properties de proyecto
[...]
# Ids de aplicacion
app.id.asf=EJPL_WS_CLIENTE
# Definicin del endpoint del servicio MiServicioWeb
miServicioWeb.endpoint=http://desarrollo.madrid.org/ejemplo_ws/services/MiServicioWeb
miServicioWeb.localKey=cliente_ws
miServicioWeb.remoteKey=servidor_ws_cert

[...]

Los valores de las variables son los siguientes:

Parmetro
app.id.asf

Descripcion
Nombre de la aplicacin

Valor por defecto


Ej.: EJPL_WS_CLIENTE

en ASF
[nombreServicio].endpoint

URL del servicio

Ej.:
http://desarrollo.madrid.org/ejempl
o_ws/services/MiServicioWeb

[nombreServicio].localKey

Alias de la clave del cliente


usada para firmar el
mensaje. Se corresponde
con el alias del certificado
dado de alta en asf para la
operacin de firma.

47 de 101

Ej.: cliente_ws

Framework Atlas
Manual usuario de Servicios Web
[nombreServicio].remoteKey

Alias del certificado del

Ej.: servidor_ws_cert

servidor utilizado para


cifrar el mensaje. Se
corresponde con el alias
del certificado dado de alta
en asf para la operacin
de firma.

5.3.2.

Paso 2: Configuracin de Spring

Adems es necesario modificar en el fichero de contexto de Spring del modulo lib (applicationcontextxxxx_ws_lib.xml) el bean del cliente para aadirles las propiedades relacionadas con la seguridad tal y como se
puede ver en este ejemplo:

applicationContext-xxxx_ws_lib.xml
<beans>

<bean id="miPrimerService" class="prueba123.client.ClienteMiPrimerService">


<constructor-arg value="${miPrimerService.endpoint}" />
<property name="properties">
<props>
<prop key="policyPath">META-INF/politicaWSSFirmado.xml</prop>
<prop key="invokingApp">${app.id.asf}</prop>
<prop key="operationMode">client</prop>
<prop key="localKey">${miPrimerService.localKey}</prop>
<prop key="remoteKey">${miPrimerService.remoteKey}</prop>
<prop key="wsuTsLife">300000</prop>
</props>
</property>
</bean>
</beans>
El bloque marcado en amarillo tendr que aadirse tal cual pero modificando los nombre de las variables:

En el campo policyPath se ha de indicar el fichero de politica de firma:


politicaWSSFirmado.xml
politicaWSSFirmadoCifrado.xml

Sustituir las siguientes variables por las correspondientes de nuestro servicio.


-

miServicioWeb.localKey

miServicioWeb.remoteKey.

El siguiente paso es definir las propiedades de ASF indicadas para el CLIENTE en el fichero de configuracin del
mdulo lib para poder hacer las pruebas con los Test Unitarios.

48 de 101

Framework Atlas
Manual usuario de Servicios Web

Fichero lib/src/test/resources/environment.properties
[...]
# Ids de aplicacion
app.id.asf= ejpl_ws_cliente
# Datos de WS
miPrimerService.endpoint=http://localhost:9080/services/MiServicioWeb
miPrimerService.localKey=cliente_ws
miPrimerService.remoteKey=servidor_ws_cert
[...]

En amarillo se han marcado las nuevas variables que se han de incluir.

A continuacin se describen cada una de las variables:

Parmetro

Descripcion

Valor por defecto

app.id.asf

Nombre de la aplicacin en ASF

Ej.: EJPL_WS_CLIENTE

[nombreServicio].endpoint

URL del servicio

Ej.:
http://localhost:9080/services/
<nombreServicio>

[nombreServicio].localKey

Alias de la clave del cliente usada para

Ej.: cliente_ws

firmar el mensaje. Se corresponde con el


alias del certificado dado de alta en asf para
la operacin de firma.
[nombreServicio].remoteKey

Alias del certificado del servidor utilizado


para cifrar el mensaje. Se corresponde con
el alias del certificado dado de alta en asf
para la operacin de firma.

49 de 101

Ej.: servidor_ws_cert

Framework Atlas
Manual usuario de Servicios Web
5.4.

ATLAS - CREACION DE UN CLIENTE CON WS-SECURITY + CERTIFICADO DE CLIENTE

Para realizar llamadas a un servicio web de atlas que dispone de seguridad a nivel de mensaje ms seguridad a
nivel de transporte con certificado de cliente, tenemos que realizar las siguientes modificaciones en nuestro cliente.

ATENCION
Esta configuracin de cliente es solo para Servicios Web ATLAS que dispongan de seguridad
tanto a nivel de mensaje como a nivel de transporte CON certificado de cliente.
En caso de no tener que certificar nuestro acceso con un certificado, seguir los pasos del punto
anterior.

5.4.1.

Paso 1: Aadir variables de environment

Para configurar nuestro cliente para conectar con WS-Security tenemos que aadr el mdulo de seguridad,
modificando el fichero src/main/resources/environment.properties, incluyendo las lneas marcadas en amarillo
en el siguiente ejemplo:

src/main/resources/environment.properties de proyecto
[...]
# Ids de aplicacion
app.id.asf=EJPL_WS_CLIENTE
# Definicin del endpoint del servicio MiServicioWeb
miServicioWeb.endpoint=http://desarrollo.madrid.org/ejemplo_ws/services/MiServicioWeb
miServicioWeb.localKey=cliente_ws
miServicioWeb.remoteKey=servidor_ws_cert

https.keystore.path=<a rellenar por Paso a Produccin>


https.keystore.pass=CA655C9BB562C317811001D666CFD99B
https.secure.port=443
[...]

50 de 101

Framework Atlas
Manual usuario de Servicios Web
Los valores de las variables son los siguientes:

Parmetro
app.id.asf

Descripcion
Nombre de la aplicacin

Valor por defecto


Ej.: EJPL_WS_CLIENTE

en ASF
[nombreServicio].endpoint

URL del servicio

Ej.:
http://desarrollo.madrid.org/ejempl
o_ws/services/MiServicioWeb

[nombreServicio].localKey

Alias de la clave del cliente

Ej.: cliente_ws

usada para firmar el


mensaje. Se corresponde
con el alias del certificado
dado de alta en asf para la
operacin de firma.
[nombreServicio].remoteKey

Alias del certificado del

Ej.: servidor_ws_cert

servidor utilizado para


cifrar el mensaje. Se
corresponde con el alias
del certificado dado de alta
en asf para la operacin
de firma.
https.keystore.path

Ruta al almacn de

Ej.: ssl/keystore.keystore

certificados con el
certificado de cliente de
conexin
https.keystore.pass

Contrasea de acceso al

Ej.: desarrollo

almacn del certificado de


cliente (configurar cifrada)
https.secure.port

Puerto seguro de conexin

51 de 101

Ej.: 443

Framework Atlas
Manual usuario de Servicios Web
5.4.2.

Paso 2: Configuracin de Spring

Adems es necesario modificar en el fichero de contexto de Spring del modulo lib (applicationcontextxxxx_ws_lib.xml) el bean del cliente para aadirles las propiedades relacionadas con la seguridad tal y como se
puede ver en este ejemplo:

applicationContext-xxxx_ws_lib.xml
<beans>

<bean id="miPrimerService" class="prueba123.client.ClienteMiPrimerService">


<constructor-arg value="${miPrimerService.endpoint}" />
<property name="properties">
<props>
<prop key="policyPath">META-INF/politicaWSSFirmado.xml</prop>
<prop key="invokingApp">${app.id.asf}</prop>
<prop key="operationMode">client</prop>
<prop key="localKey">${miPrimerService.localKey}</prop>
<prop key="remoteKey">${miPrimerService.remoteKey}</prop>
<prop key="wsuTsLife">300000</prop>
<prop key="keyStorePath">${https.keystore.path}</prop>
<prop key="keyStorePassword">${https.keystore.pass}</prop>
<prop key="securePort">${https.secure.port}</prop>
</props>
</property>
</bean>
</beans>
El bloque marcado en amarillo tendr que aadirse tal cual pero modificando los nombre de las variables:

En el campo policyPath se ha de indicar el fichero de politica de firma:


politicaWSSFirmado.xml
politicaWSSFirmadoCifrado.xml

Sustituir las siguientes variables por las correspondientes de nuestro servicio.


-

miServicioWeb.localKey

miServicioWeb.remoteKey.

El siguiente paso es definir las propiedades de ASF indicadas para el CLIENTE en el fichero de configuracin del
mdulo lib para poder hacer las pruebas con los Test Unitarios.

52 de 101

Framework Atlas
Manual usuario de Servicios Web

Fichero lib/src/test/resources/environment.properties
[...]
# Ids de aplicacion
app.id.asf= ejpl_ws_cliente
# Datos de WS
miPrimerService.endpoint=http://localhost:9080/services/MiServicioWeb
miPrimerService.localKey=cliente_ws
miPrimerService.remoteKey=servidor_ws_cert

https.keystore.path=<a rellenar por Paso a Produccin>


https.keystore.pass=CA655C9BB562C317811001D666CFD99B
https.secure.port=443
[...]

En amarillo se han marcado las nuevas variables que se han de incluir.

A continuacin se describen cada una de las variables:

Parmetro

Descripcion

Valor por defecto

app.id.asf

Nombre de la aplicacin en ASF

Ej.: EJPL_WS_CLIENTE

[nombreServicio].endpoint

URL del servicio

Ej.:
http://localhost:9080/services/
<nombreServicio>

[nombreServicio].localKey

Alias de la clave del cliente usada para

Ej.: cliente_ws

firmar el mensaje. Se corresponde con el


alias del certificado dado de alta en asf para
la operacin de firma.
[nombreServicio].remoteKey

Alias del certificado del servidor utilizado

Ej.: servidor_ws_cert

para cifrar el mensaje. Se corresponde con


el alias del certificado dado de alta en asf
para la operacin de firma.
https.keystore.path

Ruta al almacn de certificados con el


certificado de cliente de conexin

53 de 101

Ej.: ssl/keystore.keystore

Framework Atlas
Manual usuario de Servicios Web
https.keystore.pass

Contrasea de acceso al almacn del

Ej.: desarrollo

certificado de cliente (configurar cifrada)


https.secure.port

Puerto seguro de conexin

54 de 101

Ej.: 443

Framework Atlas
Manual usuario de Servicios Web
5.5.

WS EXTERNOS (NO ATLAS) - CREACIN DE UN CLIENTE (HTTP y HTTPS)

Cuando se necesite conectar a un servicio web externo, se utilizarn los siguientes pasos para la creacin de un
cliente de servicio web. Los clientes de servicio web NO ATLAS se caracterizan por ser de cdigo generado a partir
de un descriptor WSDL. A diferencia del cliente de servicio web ATLAS, este cliente debe generarse en cada
proyecto en que se quiera establecer comunicacin con un servicio web. Para generar un cliente a partir de un
fichero WSDL ser necesario hacer uso del mdulo maven de ATLAS llamado altasfrm-clientews-wsdl2codemaven-plugin.

ATENCION
Este tipo de cliente de servicio web, es para los clientes que no requieran seguridad a nivel de
mensaje ni seguridad a nivel de transporte con certificado de cliente.
Esta configuracin es apta tanto para HTTP como para HTTPS. Siempre y cuando el transporte
NO requiera certificado de cliente.

5.5.1.

Paso 1: Incluir fichero wsdl en el proyecto

El fichero wsdl que nos hayan proporcionado hay que incluirlo en el proyecto en la carpeta
src/main/resources/wsdl. Del mdulo lib del arquetipo generado

5.5.2.

Paso 2: Inclusin de la dependencia y configuracin del plugin

Aadir en la siguiente dependencia en el fichero pom.xml (del modulo lib) del proyecto donde se vaya a generar el
cliente compilado:

pom.xml
<dependency>
<groupId>atlasfrm</groupId>
<artifactId>atlasfrm-clientews-lib</artifactId>
<version>${atlasfrm-clientews-lib.version}</version>
<scope>provided</scope>
</dependency>

Dentro de la seccin de plugins del fichero pom.xml de nuestro proyecto es necesario incluir el plugin de Maven
atlasfrm-clientews-wsdl2code-maven-plugin. Este plugin generar tanto las clases de cliente del webservice
como las clases de tests para las pruebas contra dicho servicio. A continuacin se muestra un ejemplo de
configuracin del plugin:
pom.xml (mdulo lib)

55 de 101

Framework Atlas
Manual usuario de Servicios Web
<!--

Plugin para invocador de servicios de negocio.


Descomentar si se desea utilizar esta caracterstica -->
<plugin>
<groupId>atlasfrm</groupId>
<artifactId>atlasfrm-clientews-wsdl2code-maven-plugin</artifactId>
<version>${atlasfrm-clientews-wsdl2code-plugin.version}</version>
<configuration>
<packageName>xxxx.ws.client</packageName>
<serviceNameAsPackage>true</serviceNameAsPackage>
<overWrite>false</overWrite>
</configuration>
<executions>
<execution>
<id>xxxxService</id>
<configuration>
<wsdlFile>src/main/resources/wsdl/xxxxService.wsdl</wsdlFile>
</configuration>
<goals>
<goal>wsdl2code</goal>
</goals>
</execution>
</executions>
</plugin>

ATENCION
Si se ha partido de uno de los arquetipos de Atlas, el plugin se encuentra comentado en el
fichero pom.xml del arquetipo, slo ser necesario descomentarlo.

Segn la configuracin anterior a partir del fichero xxxxService.wsdl se generarn las clases cliente del servicio
xxxxService en el directorio src/main/java

en el paquete xxxx.ws.client.xxxxService (suponiendo que

xxxxService sea el nombre del servicio). Tambin se generar un fichero applicationContext-xxxxService.xml


en el directorio src/main/resources, para que el cliente est dado de alta en el contexto de Spring. Puede ser
necesario incluir manualmente en los configLocations del fichero web.xml este nuevo archivo de definiciones.

Adems se generarn los test unitarios del servicio en el directorio src/test/java, en el mismo paquete en que se
han generado las clases del cliente. El test unitario contendr el fichero de definiciones de Spring creado para el
servicio.

En caso de tener que generar varios clientes de servicio web, se debern generarse tantos tags <execution>
como clientes deban generarse, cada uno con su configuracin.

Los parmetros que se pueden configurar en este plugin son, adems de los propios del plugin wsdl2codemaven-plugin (y que podemos encontrar descrita en la siguiente url: http://ws.apache.org/axis2/tools/1_4/mavenplugins/maven-wsdl2code-plugin.html), los incluidos en la siguiente tabla:

56 de 101

Framework Atlas
Manual usuario de Servicios Web
Propiedad
wsdlFile

Descripcin

Valor

Esta etiqueta indica la ruta dentro del Ej:


proyecto al fichero de descripcin del servicio
src/main/resources/wsdl/xxxx_ws.
web del que se va a generar el cliente.
wsdl
Por defecto:
src/main/resources/rservice.wsdl

packageName

Nombre del paquete base donde se Ej: xxxx.ws.client


generarn las clases java del cliente de
servicio web (en src/main/java)

serviceNameAsPackage

Si es true se aadir el nombre del servicio Por defecto: true


como paquete al final de packageName. El
nombre del servicio se modificar para
cumplir la normativa de nomenclatura de
paquetes.

overWrite

Si es false se comprueba si ya existe el Por defecto: false


fichero y en caso afirmativo, no se generar
de nuevo. Se recomienda siempre este valor
para que los ficheros se generen solo una
vez y no se pierdan modificaciones manuales
en las clases generadas.

skipGeneratioin

Si es true el plugin no intentar generar Por defecto: false


ningn cliente. Se recomienda usar este
parmetro cuando se modifiquen los nombres
de los ficheros generados, de lo contrario se
generarn ficheros nuevos con los nombres
originales.

outputDirectory

Directorio de fuentes donde se generarn las Por defecto: src/main/java


clases del cliente de servicio web

resourceOutputDirectory

Directorio de recursos donde se generarn Por defecto:


los ficheros de spring del cliente.
src/main/resources/conf

testOutputDirectory

Directorio de fuentes donde se generarn los Por defecto: src/test/java


tests unitarios

testResourceOutputDirec

Directorio de recursos de test donde se Por defecto:


generarn los ficheros de configuracin de
src/test/resources/conf
Spring necesarios (si los hubiere)

tory
syncMode

Modo de conexin al webservice

Por defecto: sync (sncrono)

generateTestcase

Indica si generar o no una clase de test para


el cliente de webservice.

Por defecto: true

unpackClasses

Genera las clases en distintos ficheros

Por defecto: true

generateServerSideInterf

Genera el intefaz java del servicio web

Por defecto: true

ace

57 de 101

Framework Atlas
Manual usuario de Servicios Web
unwrap

Desempaqueta los parmetros de entrada y Por defecto: true


salida de los mtodos del webservice

namespaceToPackages

Lista de Namespaces del fichero WSDL Por defecto: todas las clases se
relacionandolos con nombres de paquete generan en el mismo paquete
para generar en estas ubicaciones los datos del cliente del servicio web.
asociados a cada Namespace.

Una vez que este plugin est configurado se puede pasar a la generacin de las clases del cliente del servicio web.
5.5.3.

Paso 3: Generacin de la clases del Cliente

La generacin a partir del plugin atlas-wsdl2code-maven-plugin se basa en el documento WSDL para generar el
cliente. A continuacin de muestra un ejemplo de generacin en el mdulo lib para el servicio MiServicioWeb. La
configuracin del plugin es:

pom.xml
<plugin>
<groupId>atlasfrm</groupId>
<artifactId>atlasfrm-clientews-wsdl2code-maven-plugin</artifactId>
<version>${atlasfrm-clientews-wsdl2code-plugin.version}</version>
<configuration>
<packageName>prueba123.ws.client</packageName>
<serviceNameAsPackage>true</serviceNameAsPackage>
<overWrite>false</overWrite>
</configuration>
<executions>
<execution>
<id>miPrimerService</id>
<configuration>
<wsdlFile>src/main/resources/wsdl/miPrimerService.wsdl</wsdlFile>
</configuration>
<goals>
<goal>wsdl2code</goal>
</goals>
</execution>
</executions>
</plugin>
Para que se generen las clases del cliente simplemente hay que compilar el proyecto. Para que las clases
generadas aparezcan en Eclipse es necesario refrescar el proyecto.

A continuacin se muestra un ejemplo de los ficheros generados para el servicio MiServicioWeb:

58 de 101

Framework Atlas
Manual usuario de Servicios Web

Clases del cliente generadas en src/main/java:


Paquete base: xxxx.ws.client
Nombre del Servicio: MiServicioWeb
Nombre de servicio como paquete: Si
Interfaz del servicio: MiServicioWeb.java
Implementacin del cliente:
MiServicioWebStub.java
Mapeo de datos:paquete .domain.

Configuracin de Spring generada en


src/main/resources:
Configuracin de Spring:
applicationContext-MiServicioWeb.xml

Clases de test generadas en src/test/java:


Test unitario: MiServicioWebTest.java

Una vez generadas las clases del cliente, el fichero de Spring y el test unitario, habr que editar este ltimo para
proporcionar datos para las llamadas que reciban parmetros. Si no se modifica el fichero de test para aadir estos
datos, el test unitario fallar. En cada mtodo de test en que sea necesario aportar datos para hacer la llamada, se
generar un comentario como el siguiente para indicar el sitio donde introducir estos:

TestCase.java
// TODO : Rellenar aqu los valores de xxxxxxxxxxxxxx
// El test unitario no ejecutara correctamente hasta que no se
// rellenen valores correctos
Es importante revisar los ficheros de contexto de String incluidos en el test a ver si son los correspondientes a los
de la aplicacin en la que se est generando el cliente para ver si son los correctos y en su caso modificarlos para
que funcione correctamente.

59 de 101

Framework Atlas
Manual usuario de Servicios Web
5.5.4.

Paso 4: Configuracin y uso del Cliente

En este apartado se demostrar el uso del cliente generado. Se utilizar como ejemplo el cliente del servicio
MiServicioWeb generado en apartados anteriores.

ATENCION
Esta configuracin, es para clientes que necesiten conectarse a un servicio web no altas
(externo) mediante:
HTTP
HTTPS sin certificado de cliente.
El certificado del servidor para los transportes HTTPS se encuentra en los almacenes de
confianza utilizados por ICM. En caso de que el servidor al que queramos conectar disponga de
un certificado que ICM no contempla, pedid a la unidad de arquitectura la incorporacin de dicho
certificado a su almacen.

La primera modificacin que habr que hacer al cdigo generado ser parametrizar el endpoint por defecto en el
fichero environment.properties (marcado en amarillo). Para ello habr de consultarse el fichero de Spring
generado para el servicio. En los comentarios de la definicin de este servicio se indicar que variable ha de darse
de alta:
applicationContext-MiServicioWeb.xml
<!-- ================================================================
Definicin de ws 'MiServicioWeb'.
*** ATENCIN *** Aadir en environment.properties:
miServicioWeb.endpoint=http://...
================================================================ -->
<bean id="miServicioWeb" class="atlas.clientews.client.ClientFactory" ...>
<constructor-arg value="atlas.ws...MiServicioWebStub" />
<constructor-arg type="..." value="${miServicioWeb.endpoint}" />
</bean>

environment.properties del mdulo donde se usar el cliente


[...]
# Endpoints de webservice
miPrimerService.endpoint=http://desarrollo.madrid.org/ejemplo_ws/services/MiServicioWeb

Sustituir ejemplo_ws por el mdulo tcnino del web servce y MiServicioWeb por el nombre del servicio web al que
se llama.

ATENCIN

60 de 101

Framework Atlas
Manual usuario de Servicios Web
Es

OBLIGATORIO

parametrizar

el

endpoint

de

servicio

en

los

ficheros

environment.properties,

independientemente del valor que figure en el descriptor WSDL a partir del que se ha creado el cliente.
Los parmetros endpoint han de crearse en TODOS los ficheros environment.properties del proyecto donde se
usar la librera cliente, aunque no se sepan las URLs en los distintos entornos.

A continuacin se ha de incluir la definicin del invocador en el contexto de Spring en el proyecto donde se har
uso de la librera cliente. La forma recomendada de cargar el fichero de Spring es mediante una sentencia include
en el fichero de servicios.

applicationContext-services.xml
<beans>
<import resource="applicationContext-MiServicioWeb.xml"/>
<!-- ============================================================== -->
<!-Definicin de todos los servicios de la aplicacin -->
<!-- ============================================================== -->
[...]
</beans>

En este mismo fichero applicationContext-services.xml estn las definiciones de los servicios del proyecto. Debe
aadirse la dependencia como se hara con cualquier otro servicio del proyecto. Una vez aadida, podrn
implementarse mtodos de uso en esta que utilicen el invocador creado.

applicationContext-services.xml
<beans>
<import resource="applicationContext-MiServicioWeb.xml"/>
<!-- ============================================================== -->
<!-Definicin de todos los servicios de la aplicacin -->
<!-- ============================================================== -->
<bean id="miServicio" class="atlasfrm...services.MiServicioImpl"
p:miServicioWeb-ref="MiServicioWeb"
/>
[...]
</beans>
MiServicioImpl.java

61 de 101

Framework Atlas
Manual usuario de Servicios Web
@Service
public class MiServicioImpl implements MiServicio {
private MiServicioWeb miServicioWeb;
public void setMiServicioWeb(MiServicioWeb miServicioWeb) {
this.miServiciWeb = miServicioWeb;
}
/**
* Llamada al WS de Ejemplo
* @return String
*/
public String getFechaString() throws java.lang.Exception {
String result = miServicioWeb.getFechaString();
// Imprimir el resultado si se necesita comprobacion visual (solo en test)
System.out.println("Resultado de la llamada: " + result);
assertNotNull(result);
return null;
}

ATENCION
Para simplificar el uso de clientes compilados, estos pueden ser inyectados en un servicio si
requieren de lgicas de proceso y manipulacin de los objetos del cliente compilado (objeto
DatosEntrada en el ejemplo anterior).

62 de 101

Framework Atlas
Manual usuario de Servicios Web
5.6.

WS EXTERNOS (NO ATLAS) - CREACIN DE UN CLIENTE CON CERTIFICADO DE CLIENTE

En ocasiones necesitaremos la creacin de un cliente de servicio web que conecte con el servidor externo usando
un certificado de cliente. Esto significa que el servidor, comprobar los clientes que se conecten a travs de
HTTPS, y requerir un certificado al cliente que verificar si es correcto o no.

5.6.1.

Paso 1: Configuracin y uso del Cliente

En este apartado se demostrar el uso del cliente generado. Se utilizar como ejemplo el cliente del servicio
MiServicioWeb generado en apartados anteriores.

ATENCION
Esta configuracin, es para clientes que necesiten conectarse a un servicio web no altas
(externo) mediante:
HTTPS con certificado de cliente.
La seguridad a nivel de transporte (HTTPS) puede llevar o no verificacin de cliente.
Esto significa que los clientes que conectan al servicio web requieren de un certificado que el
servidor comprobar.
Esta configuracin es solo para los casos descritos, si se necesita un cliente de servicio web con
seguridad a nivel de transporte (HTTPS) sin certificado de cliente, consultar el punto anterior:
WS EXTERNOS (NO ATLAS) - CREACIN DE UN CLIENTE (HTTP y HTTPS SIN
CERTIFICADO CLIENTE)

La primera modificacin que habr que hacer al cdigo generado ser parametrizar el endpoint por defecto en el
fichero environment.properties (marcado en amarillo). Para ello habr de consultarse el fichero de Spring
generado para el servicio. En los comentarios de la definicin de este servicio se indicar que variable ha de darse
de alta:

applicationContext-MiServicioWebHttps.xml
<beans>
[...]
<bean id="MiServicioWebHttps" class="atlas.clientews.client.HttpsClientFactory">
<constructor-arg value="ejpl.services.MiServicioWebHttpsStub" />
<constructor-arg type="java.lang.String" value="${miServicioWebHttps.endpoint}" />
</bean>
[...]
</beans>

63 de 101

Framework Atlas
Manual usuario de Servicios Web
Adems de este cambio, tambin tendrn que definirse las credenciales de seguridad, especificando donde se
encuentra nuestro certificado de cliente:
applicationContext-EjemploServicioHttps.xml
<beans>
[...]
<bean id="MiServicioWebHttps" class="atlas.clientews.client.HttpsClientFactory">
<constructor-arg value="ejpl.services.MiServicioWebHttpsStub" />
<constructor-arg type="java.lang.String" value="${MiServicioWebHttps.endpoint}" />
<property name="properties">
<props>
<prop key="keyStorePath">${https.keystore.path}</prop>
<prop key="keyStorePassword">${https.keystore.pass}</prop>
<prop key="securePort">${https.secure.port}</prop>
</props>
</property>
</bean>
[...]
</beans>
El bloque marcado en amarillo tendr que aadirse sin modificaciones a la definicin del cliente. Y por ltimo,
debern aadirse al fichero environment.properties las propiedades definidas en el fichero de Spring para el
servicio:
src/test/resources/environment.properties
# Ids de aplicacion
app.id.asf=EJPL_WS_CLIENTE
# Definicin del endpoint del servicio EjemploServicioHttps
miServicioWeb.endpoint=https://desarrollo.madrid.org/ejemplo_ws/services/MiServicioWeb
https.keystore.path=<a rellenar por Paso a Produccin>
https.keystore.pass=CA655C9BB562C317811001D666CFD99B
https.secure.port=443

ATENCION
Los valores de los parametros de contraseas (https.keystore.pass) han de ser cifrados antes
de configurarlos en el fichero environment.properties.

Las variables a configurar son:


Parmetro

Descripcion

Valor por defecto

app.id.asf

Nombre de la aplicacin en ASF

Ej.: EJPL_WS_CLIENTE

[nombreServicio].endpoint

URL del servicio

Ej.:
https://desarrollo.madrid.org/<ejemplo_
ws>/services/<nombreServicio>

64 de 101

Framework Atlas
Manual usuario de Servicios Web
https.keystore.path

Ruta al almacn de certificados con

Ej.: ssl/keystore.keystore

el certificado de cliente de conexin


https.keystore.pass

Contrasea de acceso al almacn

Ej.: desarrollo

del certificado de cliente (configurar


cifrada)
https.secure.port

5.7.

Puerto seguro de conexin

Ej.: 443

WS EXTERNOS (NO ATLAS) - CREACIN DE UN CLIENTE CON SEGURIDAD WS-SECURITY

Para la creacin de un cliente de servicio web con seguridad a nivel de mensaje, utilizaremos WS-Security, cuya
configuracin es sencilla.

ATENCION
Esta configuracin, es para clientes que necesiten conectarse a un servicio web no altas
(externo) mediante:
HTTP + seguridad a nivel de mensaje WS-Security Firmado o Firmado y Cifrado
HTTPS sin certificado de cliente + seguridad a nivel de mensaje WS-Security Firmado o
Firmado y Cifrado
La seguridad a nivel de mensaje significa que el canal (el transporte) puede ser o no seguro, en
ambos casos, si no requiere de certificado de cliente, no hay que configurar nada ms que los
siguientes pasos, es decir, solo hay que configurar la seguridad WS-Security, tanto como si el
canal es HTTP como HTTPS

5.7.1.

Paso 1: Configuracin y uso del Cliente

applicationContext-EjemploServicioSeguro.xml
<beans>
[...]
<bean id="miServicioWeb" class="atlas.clientews.client.SecureClientFactory">
<constructor-arg value="ejpl.services.MiServicioWebStub" />
<constructor-arg type="java.lang.String" value="${miServicioWeb.endpoint}" />
[...]
</beans>

Adems de este cambio, tambin tendrn que definirse las credenciales de seguridad:
applicationContext-.xml

65 de 101

Framework Atlas
Manual usuario de Servicios Web
<beans>
[...]
<bean id=" miServicioWeb " class="atlas.clientews.client.SecureClientFactory">
<constructor-arg index="0" value="ejpl.services. MiServicioWebStub " />
<constructor-arg index="1" type="java.lang.String"
value="${ miServicioWeb.endpoint}" />
<constructor-arg index="2" value="ejpl_ws_lib ></constructor-arg>
<constructor-arg index="3" value="META-INF/politicaWSSFirmadoCifrado.xml" />
<property name="properties">
<props>
<prop key="invokingApp">${app.id.asf}</prop>
<prop key="operationMode">client</prop>
<prop key="localKey">${miServicioWeb.localKey}</prop>
<prop key="remoteKey">${miServicioWeb.remoteKey}</prop>
<prop key="wsuTsLife">300000</prop>
</props>
</property>
</bean>
[...]
</beans>

ATENCION
El bloque marcado en azul dispone de un value (constructor-arg index=2) que no se encuentra
en el enviroment.properties, su valor ha de ser el nombre del mdulo lib de nuestro proyecto
(artifactId del mdulo lib), por ejemplo ejpl_ws_lib. Este es necesario para que el plugin de
maven de tomcat sepa diferenciar entre los mdulos .mar de un jar y los mdulos del jar de
nuestro proyecto. Este comportamiento es diferente utilizando el plugin de maven de jetty
(anteriormente se enviaba null o ./META-INF/modules), pero si utilizamos tomcat7:run es
necesario incluir el valor indicado.

El bloque marcado en amarillo tendr que aadirse tal cual pero modificando los nombre de las variables:
En el campo index=3 se ha de indicar el fichero de poltica de firma:
politicaWSSFirmado.xml
politicaWSSFirmadoCifrado.xml

Sustituir las siguientes variables por las correspondientes de nuestro servicio.


-

miServicioWeb.localKey

miServicioWeb.remoteKey.

Y por ltimo, debern aadirse al fichero environment.properties las propiedades definidas en el fichero de
Spring para el servicio:
src/test/resources/environment.properties

66 de 101

Framework Atlas
Manual usuario de Servicios Web
# Ids de aplicacion
app.id.asf=EJPL_WS_CLIENTE
# Datos de WS
miServicioWeb.endpoint=http://localhost:9080/services/MiServicioWeb
miServicioWeb.localKey=cliente_ws
miServicioWeb.remoteKey=servidor_ws_cert
Las variables a configurar son:
Parmetro

Descripcion

Valor por defecto

app.id.asf

Nombre de la aplicacin en ASF

Ej.: EJPL_WS_CLIENTE

[nombreServicio].endpoint

URL del servicio

Ej.:
http://localhost:9080/services/<nombr
eServicio>

[nombreServicio].localKey

Alias de la clave del cliente

[nombreServicio].remoteKey Alias del certificado del servicio

Ej.: cliente_ws
Ej.: servidor_ws_cert

ATENCION
Para poder incluir WS en un cliente de un servicio web es necesario previamente dar de alta la aplicacin en ASF
tal y como se describe en el apartado 3.2 Los valores de localKey y remoteKey sern los alias de los certificados
asociados a la aplicacin en ASF.

5.8.

WS EXTERNOS (NO ATLAS) - CREACIN DE UN CLIENTE CON SEGURIDAD WS-SECURITY +


CERTIFICADO DE CLIENTE

Para la creacin de un cliente de servicio web con seguridad a nivel de mensaje, utilizaremos WS-Security,
adems si el servidor requiere certificado de cliente, aadiremos tambin la configuracin para el canal HTTPS con
certificado.

ATENCION

67 de 101

Framework Atlas
Manual usuario de Servicios Web
Esta configuracin, es para clientes que necesiten conectarse a un servicio web no altas
(externo) mediante:
HTTPS con certificado de cliente + seguridad a nivel de mensaje WS-Security Firmado o
Firmado y Cifrado
Esta configuracin es seguridad a nivel de transporte con certificado de cliente y seguridad a
nivel de mensaje con WS-Security.
Debemos configurar ambas opciones de seguridad. Si el cliente que debemos realizar es con
seguridad a nivel de mensaje a travs de canal seguro (HTTPS), debemos saber si el servidor
comprobar los clientes que intenten contectarse. Si el servidor acepta todas las conexiones
HTTPS, la configuracin a elegir es la del punto anterior:
WS EXTERNOS (NO ATLAS) - CREACIN DE UN CLIENTE CON SEGURIDAD EN MENSAJE
WS-SECURITY

La configuracin de WS-Secrurity es la misma que el punto anterior, solo que en la configuracin de Spring,
realizaremos el siguiente cambio:
5.8.1.

Paso 1: Configuracin y uso del Cliente

applicationContext-.xml
<beans>
[...]
<bean id=" miServicioWeb " class="atlas.clientews.client.SecureClientFactory">
<constructor-arg index="0" value="ejpl.services. MiServicioWebStub " />
<constructor-arg index="1" type="java.lang.String"
value="${ miServicioWeb.endpoint}" />
<constructor-arg index="2" value="ejpl_ws_lib ></constructor-arg>
<constructor-arg index="3" value="META-INF/politicaWSSFirmadoCifrado.xml" />
<property
<props>
<prop
<prop
<prop
<prop
<prop

name="properties">
key="invokingApp">${app.id.asf}</prop>
key="operationMode">client</prop>
key="localKey">${miServicioWeb.localKey}</prop>
key="remoteKey">${miServicioWeb.remoteKey}</prop>
key="wsuTsLife">300000</prop>

<prop key="keyStorePath">${https.keystore.path}</prop>
<prop key="keyStorePassword">${https.keystore.pass}</prop>
<prop key="securePort">${https.secure.port}</prop>
</props>
</property>
</bean>
[...]
</beans>

68 de 101

Framework Atlas
Manual usuario de Servicios Web
El bloque marcado en amarillo tendr que aadirse sin modificaciones a la definicin del cliente. Y por ltimo,
debern aadirse al fichero environment.properties las propiedades definidas en el fichero de Spring para el
servicio:
src/test/resources/environment.properties
# Ids de aplicacion
app.id.asf=EJPL_WS_CLIENTE
# Definicin del endpoint del servicio EjemploServicioHttps
miServicioWeb.endpoint=https://desarrollo.madrid.org/ejemplo_ws/services/MiServicioWeb
https.keystore.path=<a rellenar por Paso a Produccin>
https.keystore.pass=CA655C9BB562C317811001D666CFD99B
https.secure.port=443

ATENCION
Los valores de los parametros de contraseas (https.keystore.pass) han de ser cifrados antes
de configurarlos en el fichero environment.properties.

6. CONFIGURACIONES ADICIONALES
En los siguientes apartados, se explica cmo agregar opciones extras en los servicios web si fuera necesario.

6.1.1.

Aadir configuracin de PROXY a un cliente

Es muy probable que para llamar a un servicio web externo sea necesaria la configuracin del proxy para que
nuestro cliente pueda conectar a la URL indicada por el servidor.
El proxy solo ser necesario para clientes NO atlas (generados a partir de WSDL) ya que para clientes atlas no es
necesario proxy.
Lo nico que tenemos que hacer es aadir los siguientes parmetros en nuestra configuracin de Spring del cliente
del servicio Web:

applicationContext-MiServicioWeb.xml

69 de 101

Framework Atlas
Manual usuario de Servicios Web
<!-- ================================================================
Definicin de ws 'MiServicioWeb'.
*** ATENCIN *** Aadir en environment.properties:
miServicioWeb.endpoint=http://...
================================================================ -->
<bean id="miServicioWeb" class="atlas.clientews.client.ClientFactory" ...>
<constructor-arg value="atlas.ws...MiServicioWebStub" />
<constructor-arg type="..." value="${miServicioWeb.endpoint}" />
<property name="properties">
<props>

<prop
<prop
<prop
<prop
<prop

key="proxy.activo">${http.proxyActivo}</prop>
key="proxy.host">${http.proxyHost}</prop>
key="proxy.port">${http.proxyPort}</prop>
key="proxy.user">${http.proxyUser}</prop>
key="proxy.password">${http.proxyPassword}</prop>

</props>
</property>
</bean>

ATENCION
La clase marcada en azul puede ser diferente dependiendo del cliente generado, en el ejemplo
es un cliente No seguro HTTP o HTTPS sin certificado de cliente, pero podra ser otro de los
casos descritos en el manual.

Tan solo tendremos que parametrizar la variables del proxy en el fichero environment.properties, ingresar los
valores correctos para host, puerto, usuario y clave de acceso al proxy:
environment.properties del mdulo donde se usar el cliente
[...]
#Propiedades del proxy
http.proxyActivo=true
http.proxyHost=icmupx01.madrid.org
http.proxyPort=80
http.proxyUser=prueba
http.proxyPassword=prueba

6.1.2.

Personalizar configuracin de TIMEOUT a un cliente

Para agregar un timeout a un cliente de un servicio web se deber agregar dicho tiempo al constructor del stub del
servicio web. A continuacin se muestra un ejemplo, las lneas que hay que agregar estn resaltadas en color
amarillo, concretamente el mtodo setTimeOutInMilliSeconds.

70 de 101

Framework Atlas
Manual usuario de Servicios Web

MiServicioImpl.java
@Service
public class MiServicioImpl implements MiServicio {
[. . .]
/**
* Constructor that takes in a configContext and useseperate listner
*/
public MiServicioWebStub(org.apache.axis2.context.ConfigurationContext
configurationContext, String targetEndpoint, boolean useSeparateListener)
throws org.apache.axis2.AxisFault {
//To populate AxisService
populateAxisService();
populateFaults();
_serviceClient = new
org.apache.axis2.client.ServiceClient(configurationContext,_service);

_serviceClient.getOptions().setTo(new org.apache.axis2.addressing.EndpointReference(
targetEndpoint));
_serviceClient.getOptions().setUseSeparateListener(useSeparateListener);
//Set the soap version
_serviceClient.getOptions().setSoapVersionURI(
org.apache.axiom.soap.SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
//El tiempo se establece en milisegudos, en este ejemplo se establece 5 minutos
int timeOutInMilliSeconds = 300000;
_serviceClient.getOptions().setTimeOutInMilliSeconds(timeOutInMilliSeconds);

}
[. . .]

6.1.3.

Llamadas a Servicios Web Con Usuario y Password usando HHTP Basic

En caso de que dispongamos de la necesidad de llamar a un Servicio Web que requiere una autenticacin de
usuario y password mediante transporte http Bsico, con un cliente NO ATLAS, ser necesario modificar el cdigo
generado en nuestra clase Stub, de tal manera que al realizar la llamada al constructor desde Spring se incluya la
seguridad requerida.
Al crear el objeto con Spring, utilizamos el constructor ya autogenerado de 3 parmetros, endpoint, username y
password (obtenidos de nuestro enviroment.properties):

applicationContext(nombreWS)Service.xml

71 de 101

Framework Atlas
Manual usuario de Servicios Web
=============================================================================== -->
<bean id="SI_ConsultasGastos_OutService"
class="gtri.client.nexus.si_consultasgastos_outservice.SI_ConsultasGastos_OutServiceStub">
<constructor-arg type="java.lang.String"
value="${sI_ConsultasGastos_OutService.endpoint}" />
<constructor-arg type="java.lang.String"
value="${sI_ConsultasGastos_OutService.username}" />
<constructor-arg type="java.lang.String"
value="${sI_ConsultasGastos_OutService.password}" />
</bean>

Y en la clase autogenerada Stub, localizamos nuestro constructor


Clase autogenerada Stub
/**
* Constructor that takes in a configContext and useseperate listner
*/
public SI_ConsultasGastos_OutServiceStub(java.lang.String targetEndpoint,
java.lang.String userName, java.lang.String password)
throws org.apache.axis2.AxisFault {

En este constructor, observaremos el siguiente cdigo:


Clase autogenerada Stub
/**
* Constructor that takes in a configContext and useseperate listner
*/
public SI_ConsultasGastos_OutServiceStub(java.lang.String targetEndpoint,
java.lang.String userName, java.lang.String password)
throws org.apache.axis2.AxisFault {
//Resto de codigo
_serviceClient.getOptions().setUserName(userName);
_serviceClient.getOptions().setPassword(password);
}

El cual, debe ser sustituido por lo siguiente para habilitar la autenticacin Bsica:
Clase autogenerada Stub

72 de 101

Framework Atlas
Manual usuario de Servicios Web
/**
* Constructor that takes in a configContext and useseperate listner
*/
public SI_ConsultasGastos_OutServiceStub(java.lang.String targetEndpoint,
java.lang.String userName, java.lang.String password)
throws org.apache.axis2.AxisFault {
//Resto de codigo
HttpTransportProperties.Authenticator auth = new
HttpTransportProperties.Authenticator();
auth.setUsername(userName);
auth.setPassword(password);
ArrayList<String> authSchemes = new ArrayList<String>();
authSchemes.add(HttpTransportProperties.Authenticator.BASIC);
auth.setAuthSchemes(authSchemes);
auth.setPreemptiveAuthentication(true);
_serviceClient.getOptions().setProperty(HTTPConstants.CHUNKED, false);
_serviceClient.getOptions().setProperty(HTTPConstants.AUTHENTICATE,
auth);
}

6.1.4.

Configuracin de Truststore desde puesto LOCAL

Como ya hemos explicado en el resto de apartados, no se debe configurar en los clientes de Axis, tanto atlas como
externos, ningn almacn de confianza a la hora de llamar a los servicios web.
No obstante, esta configuracin es slo vlida para los entornos de ICM (desarrollo, validacin, produccin, etc),
para el correcto funcionamiento en local, hay que seguir los siguientes pasos:

ATENCION

73 de 101

Framework Atlas
Manual usuario de Servicios Web
Por defecto, axis utiliza el almacn de la mquina virtual de java (cacerts) al ejecutarse. A partir
de la versin 1.2.9 de atlas se cambia este comportamiento, en caso de disponer una versin
anterior, es necesario incluir el siguiente cdigo (versin mnima 1.2.7) sobre el fichero pom.xml
del mdulo Web de nuestra aplicacin, sobre el plugin de Tomcat, en el tag systemProperties
aadir las 2 siguientes propiedades

<systemProperties>
<log4j.configuration>log4j.xml</log4j.configuration>
<javax.net.ssl.trustStore>
${project.build.testOutputDirectory}/ssl/truststore.keystore
</javax.net.ssl.trustStore>
<javax.net.ssl.trustStorePassword>
desarrollo
</javax.net.ssl.trustStorePassword>
</systemProperties>

(La propiedad de log4j.xml ya existe, se ha incluido como referencia).


En caso de necesitar incluir un almacn de certificado como cliente,
existen tambin las variables keyStore:

<systemProperties>
<log4j.configuration>log4j.xml</log4j.configuration>
<javax.net.ssl.trustStore>
${project.build.testOutputDirectory}/ssl/truststore.keystore
</javax.net.ssl.trustStore>
<javax.net.ssl.trustStorePassword>
desarrollo
</javax.net.ssl.trustStorePassword>
<javax.net.ssl.keyStore>
${project.build.testOutputDirectory}/ssl/keystore.keystore
</javax.net.ssl.keyStore>
<javax.net.ssl.keyStorePassword>
desarrollo
</javax.net.ssl.keyStorePassword>
</systemProperties>

Los almacenes que generan los arquetipos estn preparados con las CAs de prueba de ICM, no obstante, en caso
de necesitar agregar ms entradas a dichos almacenes, lo haremos siguiendo los siguientes pasos:

Haremos uso de la utilidad proporcionada por Java, Keytool, para realizar esta operacin.
Paso 1
Copiamos el almacn utilizado por las aplicaciones de atlas, localizado en la carpeta test:

74 de 101

Framework Atlas
Manual usuario de Servicios Web

Ejemplo de estructura de aplicacin Web atlas.

A la ruta donde se encuentra la utilidad Keytool

Ejemplo de instalacin Java sobre c:/Archivos de programa/Java/xxxx

Paso 2
Recuperamos certificado de servidor
Para recuperar el certificado del servidor, podemos hacerlo a travs del navegador:

75 de 101

Framework Atlas
Manual usuario de Servicios Web
Copiamos la url en un navegador:

Pulsamos en Datos del certificado, en la pestaa Detalles hacemos click en botn Copiar en Archivo

Seleccionamos el siguiente formato de exportacin y escribimos un nombre para el fichero:

76 de 101

Framework Atlas
Manual usuario de Servicios Web

Copiamos el fichero del certificado de servidor, para que se ubique en la misma ruta:

ATENCION

77 de 101

Framework Atlas
Manual usuario de Servicios Web
Los certificados de desarrollo se encuentran en la web de arquitectura
http://www.madrid.org/arquitecturasw/otras-tecnologias/seguridad/certificados

Una vez estemos posicionados en dicha ruta con el almacn y el certificado a importar, podremos ejecutar la
utilidad java para importar certificados, abrimos consola de comandos y nos posicionamos en la carpeta bin:
Inicio -> Ejecutar -> escribimos cmd

La consola de comandos se abrir y nos posicionamos sobre la carpeta con el comando cd


cd C:\Archivos de programa\Java\jdk1.6.0_45\bin

ATENCION

78 de 101

Framework Atlas
Manual usuario de Servicios Web
Es probable que la ruta por defecto al ejecutar cmd sea una unidad diferente de donde est
instalado Java, para cambiar de unidad tan solo tenemos que escribir la letra de la unidad
seguido de :
Tal que as:
C:

Una vez posicionados en la carpeta donde tenemos nuestro almacn y certificado, realizamos el siguiente
comando:

keytool -import -file desaCertificado.cer -keystore truststore.keystore

La contrasea del almacn de certificados incluido con las aplicaciones de altas es: desarrollo

Escribiendo desarrollo y pulsando intro nos importar el certificado al almacn, como ltimo paso solo nos queda
copiar el fichero truststore.keystore a su ruta original:

Copiamos a ruta Destino:

79 de 101

Framework Atlas
Manual usuario de Servicios Web

Ruta Destino: Ruta Workspace/nombre Aplicacin / web/src/test/resources/ssl

80 de 101

Framework Atlas
Manual usuario de Servicios Web
UTILIDADES
A continuacin se muestran las distintas utilidades del framework para facilitar los desarrollos de servicios web.
6.2.

Mdulo de log de mensajes

Este mdulo de log permitir visualizar en trazas todos los mensajes enviados y recibidos por un cliente o servicio
web. A continuacin se muestra un ejemplo de la salida de este mdulo:

salida log consola


13:20:16,625
13:20:16,766
13:20:16,766
13:20:16,766
13:20:16,766
13:20:16,781
13:20:16,938

DEBUG
DEBUG
DEBUG
DEBUG
DEBUG
DEBUG
DEBUG

Servicio creado. Devolviendo instancia.


*************************************************
** Mensaje de SALIDA
** Accion: urn:alterar
** Hacia: Address: http://.../EjemploServicioNoSeguro.../
*************************************************

<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope


xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><ns3:alterar
xmlns:ns3="http://services.ws163.atlas"><ns3:args0><ns2:cadena1
xmlns:ns2="http://domain.ws163.atlas/xsd">Ejemplo de cadena de
entrada</ns2:cadena1><ns2:limite xmlns:ns2="http://domain.ws163.atlas/xsd">1</ns2:limite></ns3:args0></ns3:alterar></soapenv:Body></soapenv:Envelope>

ATENCION
El uso de este mdulo solo es recomendable para entornos de desarrollo. En ningn caso se
permitir su uso en entornos productivos.

Para poder activar la salida de log tanto en clientes como en servicios web, ser necesario realizar las siguientes
acciones:

Paso 1: incluir la dependencia en el fichero pom.xml (en los arquetipos de servicio web ya est incluida).

pom.xml
<dependencies>
[...]
<dependency>
<groupId>atlasfrm</groupId>
<artifactId>atlasfrm-clientews-message-logger-lib</artifactId>
<version>${atlasfrm-clientews-message-logger-lib.version}</version>
<type>mar</type>
</dependency>
[...]
</dependencies>

81 de 101

Framework Atlas
Manual usuario de Servicios Web
Paso 2: activar trazas de debug para el paquete atlas.ws.util.MESSAGE.

log4j.xml
<category name="atlas.ws.util.MESSAGE" class="atlas.core.log.AtlasLogger">
<level value=debug />
</category>

Paso 3: solo en el caso del servicio web (los clientes activarn el mdulo si est disponible como
dependencia), habr que activar el mdulo en el fichero services.xml para cada servicio.

services.xml
<service name="EjemploServicioNoSeguro">
[...]
<messageReceivers>
[...]
</messageReceivers>
<module ref="atlasfrm-clientews-message-logger" />
</service>

6.3.

Personalizacin de mensajes de error

En algunas situaciones es necesario personalizar los mensajes Soap Fault que se retornan como resultado de un
error de aplicacin o de seguridad. Las excepciones de seguridad pueden producir mensajes Soap Fault
personalizados a las necesidades funcionales con las siguientes instrucciones:
1. Implementar la interfaz atlas.clientews.fault.SoapFaultProvider

atlas.clientews.fault.SoapFaultProvider

82 de 101

Framework Atlas
Manual usuario de Servicios Web

public interface SoapFaultProvider {


/**
* Mtodo al que se llamar desde el Framework cuando se
* produzca una excepcin
*
* @param msgCtx contexto del mensaje de Axis2
* @param t excepcion producida durante la validacin o
* procesamiento del mensaje
* @throws AxisFault
*/
void processException(MessageContext msgCtx, AtlasSecurityException t)
throws AxisFault;
}

Esta interfaz solo contiene un mtodo processException al que se le pasan dos parmetros: el contexto del
mensaje de Axis 2 y la excepcin de seguridad lanzada. La implementacin de este mtodo deber lanzar una
excepcin AxisFault personalizada con la que Axis 2 generar el mensaje Soap Fault.

2. Configurar la implementacin de SoapFaultProvider en el fichero services.xml.

Para que ATLAS pueda delegar la gestin del error a la implementacin de SoapFaultProvider, se deber
configurar el parmetro errorTranslator en el fichero services.xml como un parmetro del servicio:

services.xml
<service name="EjemploServiceWSS2">
<parameter name="...</parameter>
...
<parameter name="errorTranslator">mi.gestor.de.excepciones</parameter>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
...

El gestor de errores Soap Fault por defecto del framework es la clase atlas.clientews.fault.
DefaultSoapFaultProvider.

6.3.1.

Especificacin SoapFault SCSPv3

La especificacin SCSPv3 se encarga de definir las comunicaciones de servicios web entre las distintas
administraciones pblicas. En ATLAS se ha dado soporte a la especificacin de Soap Fault a travs de la
implementacin atlas.clientews.fault.SCSP3SoapFaultProvider. La configuracin debe realizarse segn el apartado
anterior:

83 de 101

Framework Atlas
Manual usuario de Servicios Web
Configuarcin SCSPv3 en services.xml
<service name="EjemploServiceWSS2">
<parameter name="...</parameter>
...
<parameter name="errorTranslator">atlas.clientews.fault.SCSP3SoapFaultProvider</parameter>

<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
...

Con esta configuracin, se generarn errores de seguridad con la siguiente forma:

Ejemplo de SoapFault SCSPv3 (Soap 1.1)


<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<soapenv:Fault>
<faultcode xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis200401-wss-wssecurity-secext-1.0.xsd">wsse:InvalidSecurity</faultcode>
<faultstring>[0302] Certificado caducado</faultstring>
<detail>
<Atributos
xmlns="http://intermediacion.redsara.es/scsp/esquemas/V3/soapfaultatributos">
<IdPeticion>001_DIR_MINHAP_FNUX0_9CC4</IdPeticion>
<NumElementos>1</NumElementos>
<TimeStamp>2014-04-07T14:25:53.422+0200</TimeStamp>
<Estado>
<CodigoEstado>0302</CodigoEstado>
<LiteralError>Certificado caducado</LiteralError>
<TiempoEstimadoRespuesta>0</TiempoEstimadoRespuesta>
</Estado>
<CodigoCertificado>SDVSTCFWNS10</CodigoCertificado>
</Atributos>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>

7. CREACION DE TESTS UNITARIOS PARA SOAPUI


En la creacin de un proyecto de servicio web, se crean tres mdulos: el mdulo web para generar un servicio web,
el mdulo lib para la generacin del cliente de dicho servicio web, y el mdulo test que contiene proyectos de
SoapUI para realizar tests del servicio web sin utilizar el cliente Java del mdulo lib.

En el proyecto de servicio web inicial, se incluyen ejemplos de proyectos sin seguridad, con seguridad https y con
seguridad de cifrado y firmado en el mensaje SOAP. A continuacin se muestra como crear proyectos nuevos para

84 de 101

Framework Atlas
Manual usuario de Servicios Web
los servicios web a implementar.

7.1.1.

Proyecto SoapUI sin seguridad

En este caso, se importar el proyecto desde el WSDL del servicio web. Para ello, deber ejecutarse primero el
servicio web con el comando:
mvn clean install jetty:run
Una vez arrancado el servidor Jetty, se acceder a la URL: http://localhost:9080/index.html para listar los servicios
disponibles. Pulsar con el botn derecho en el nombre del servicio y guardar el enlace con extensin .wsdl en el
mdulo test, directorio src/main/resources/wsdl.

Una vez guardado el descriptor WSDL del servicio, abrir el programa SoapUI y generar un nuevo proyecto.

85 de 101

Framework Atlas
Manual usuario de Servicios Web

Project Name: nombre del servicio.


Initial WSDL/WADL: buscar el fichero WSDL del servicio guardado.
Marcar elementos en rojo en la imagen.
Guardar el proyecto en la carpeta soapui.

Antes de ejecutar operaciones, comprobar que la URL del servicio est correctamente configurada (puede faltar el
puerto).

7.1.2.

Proyecto SoapUI con seguridad https

86 de 101

Framework Atlas
Manual usuario de Servicios Web

Generar un proyecto nuevo siguiendo las instrucciones del apartado anterior. Como en el caso anterior, comprobar
que las URLs del servicio estn correctamente configuradas con el protocolo HTTPS (y el puerto, que en jetty es
9443).
Hacer doble click en el nombre del proyecto para abrir sus propiedades. Pulsar en la pestaa WS-Security
Configurations y en la pestaa inferior Keystores/Certificates. Pulsar el botn + y aadir el almacen client_ssl.jks
(o cualquier otro de que se disponga en el proyecto). Introducir la contrasea del almacn.

Una vez hecho esto solo es necesario asignar el almacn de certificados a cada peticin y asegurarse que la URL
del servicio web es correcta:

87 de 101

Framework Atlas
Manual usuario de Servicios Web

7.1.3.

Proyecto SoapUI con seguridad firmado/cifrado

Ya que la configuracin de seguridad en este apartado es compleja, a continuacin se muestran los pasos
necesarios para configurar un proyecto nuevo tomando como referencia el proyecto de EjemploServicioSeguro ya
existente.

Como en el caso del servicio sin seguridad, ha de guardarse a disco el descriptor WSDL del servicio seguro. A
continuacin, cargar el proyecto de ejemplo EjemploServicioSeguro-soapui-project.xml en la carpeta
src/main/resources/soapui del mdulo test.

88 de 101

Framework Atlas
Manual usuario de Servicios Web

Pulsar con el botn derecho en las entradas Soap11Binding y Soap12Binding y eliminarlas.

89 de 101

Framework Atlas
Manual usuario de Servicios Web

A continuacin, pulsar con el botn derecho en el nombre de proyecto y seleccionar la opcin Add WSDL.

Seleccionar el fichero WSDL del proyecto guardado y asegurarse de marcar la opcin Create sample requests for
all operations?.

90 de 101

Framework Atlas
Manual usuario de Servicios Web

Cambiar el nombre de proyecto por el nombre del servicio web implementado.

Por ltimo, solo es necesario seleccionar la seguridad en cada operacin del proyecto. Para ello, una vez abierta la
pantalla de la operacin, pulsar en Aut y establecer los valores de Outgoing WSS e Incoming WSS.

91 de 101

Framework Atlas
Manual usuario de Servicios Web

En el caso de Outoing WSS, se seleccionara politicaWSSFirmadoCifrado_salida para operaciones Soap12 y


politicaWSSFirmadoSoap11_salida para operaciones Soap11. Para Incoming WSS se seleccionar siempre
politicaWSSFirmadoCifrado_entrada.

Por ltimo solo quedar ejecutar la operacin para comprobar que la configuracin es correcta.

92 de 101

Framework Atlas
Manual usuario de Servicios Web

7.1.3.1.

Utilizar otro certificado de cliente

En este apartado se mostrarn las modificaciones a la configuracin de seguridad del proyecto SoapUI si se quiere
utilizar otro certificado de cliente. En el ejemplo mostrado a continuacin se utilizar el fichero pf-5m.p12
descargado de la web de certificados de ICM.

Abrimos el proyecto SoapUI y hacemos doble click en el nombre para abrir las propiedades y tener acceso a la
configuracin de seguridad.

93 de 101

Framework Atlas
Manual usuario de Servicios Web
Seleccionamos la pestaa WS-Security Configurations, y en ella la pestaa Keystores / Certificates. En esta
pantalla, aadimos el almacn .p12 que contiene el certificado de cliente que se quiere utilizar.

En la pestaa Incoming WS-Security Configurations, en la columna Decrypt Keystore seleccionamos el nuevo


almacn que contiene el certificado de cliente. Configuramos la contrasea del almacn.

Por ltimo, en la pestaa Outgoing WS-Security Configurations, en cada una de las dos entradas
(politicaWSSFirmadoCifrado_salida y politicaWSSFirmadoCifradoSoap11_salida), en la pestaa Signature,
modificamos las entradas Keystore, Alias y Password con los datos del nuevo certificado cliente.

94 de 101

Framework Atlas
Manual usuario de Servicios Web

Con estos cambios, el certificado cliente que se utilizar en la seguridad corresponder al fichero pf-5m.p12 usado
para el ejemplo.

7.1.4.

Tests de SoapUI WS-Security + Transporte con validacin de certificado

Partiendo del proyecto del apartado anterior (7.1.4) simplemente habr que aadir el almacn de certificados para
la conexin y configurarla en cada peticin:
En primer lugar, se aadir el nuevo almacn de certificados para la conexin HTTPS:

Haciendo doble click en el nombre del proyecto se abrirn las propiedades de este. En la pestaa WS-Security

95 de 101

Framework Atlas
Manual usuario de Servicios Web
Configurations iremos a Keystores / Certificates y aadiremos el almacn de certificados.

Despus iremos aadiendo a cada peticin el almacn de seguridad, asegurndonos que el endpoint del servicio
apunta a una direccin HTTPS:

96 de 101

Framework Atlas
Manual usuario de Servicios Web

8. ERRORES MS COMUNES
8.1.

No se encuentra el fichero WSDL de un servicio (no autogenerado)

Esta caso suele darse en el entorno de desarrollo. Consutar el apartado 3.1.6 de este documento para ms
informacin. Muy probablemente, el error se deba a no haber modificado el fichero weblogic.xml para aadir la
sentencia <wls:show-archived-real-path-enabled>.

La solucin ms adecuada es aadir la lnea en amarillo en el fichero weblogic.xml del proyecto:

Fichero web/src/main/webapp/WEB-INF/weblogic.xml
<wls:container-descriptor>
<wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
<wls:show-archived-real-path-enabled>true</wls:show-archived-real-path-enabled>
</wls:container-descriptor>

97 de 101

Framework Atlas
Manual usuario de Servicios Web
8.2.

No se reconoce el mtodo en un cliente de Axis2 en la llamada a un servicio de Axis1

Se han detectado problemas de llamada en clientes Atlas de Axis2 que llaman a servicios web generados con Axis
1 en los que el error enviado por el servicio es:

consola

org.apache.axis2.AxisFault: No such operation 'xxxxxxxxxxxx'

En el caso concreto de ser un servicio web de Axis1 al que se llama desde un cliente ATLAS realizado con Axis2 el
problema son los parmetros con valor null. Es necesario pasar en dichos parmetros un valor de cadena vaca
para que la llamada no produzca error. El mtodo de utilidad StringUtils.nullToBlank() toma una cadena String

como parmetro y devuelve una cadena vacia si el parmetro es nulo.

8.3.

Error al generar un cliente de Axis2 a partr del WSDL del servicio

El error producido al generar un cliente en base a su WSDL es:


consola
org.apache.axis2.schema.SchemaCompilationException: can not find type
{http://schemas.xmlsoap.org/soap/encoding/}Array from the parent schema ...

En este caso el WSDL del servicio ha sido generado con Axis1 en formato rpc/encoded, formato que no es
soportado por Axis2 ya que no es un estndar de servicios web. La nica solucin en este caso es generar el
cliente con el plugin maven de Atlas para Axis1.

Es este caso se deber solicitar autorizacin a Arquitectura y les indicaremos el manual


ATLAS_MUS_Servicio_Invocador_de_Servicios_axis1 para hacer clientes de Axis1

98 de 101

Framework Atlas
Manual usuario de Servicios Web
8.4.

Error al ejecutar Peticiones a Servicios Web Seguro desde entorno local

El error producido cuando se ejecuta una aplicacin que realice peticiones a un servicio web seguro desde nuestro
entorno local es el siguiente:
consola
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:
PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid
certification path to requested target

Por favor, en caso de disponer de este error, revisad configuracin de almacn de java, en el punto 4.3.0
8.5.

Error al llamar al un servicio web no seguro

Al realizar la llamada a un servicio web no seguro (a travs de http), en ocasiones puede producirse el siguiente
error:
Consola
org.apache.axis2.AxisFault: The service cannot be found for the endpoint reference
(EPR)
Este error se produce porque el servidor est configurado para utilizar solo el transporte https, para solucionarlo,
revisar que el fichero services.xml del servicio web (servidor) est incluyendo el transporte http adems del https:
services.xml
<service name="nombreServicio">

<transports>
<transport>http</transport>
<transport>https</transport>
</transports>

8.6.

Generacin de TODAS las clases necesarias con WSDL2Code con Axis2

Al utilizar el plugin de maven Wsdl2code con Axis2 para la creacin de un cliente de servicio web, es probable que
Axis2 no sea capaz de generar todas las interfaces necesarias para el correcto funcionamiento del cliente.
El error aparecer al ejecutar la llamada al Servicio web, indicando que no reconoce un objeto del WSDL (un tipo
complejo).
Para evitar esto, y que axis genere todas las clases con el plugin (y no dinmicamente con la clase Stub), hay que
agregar los siguientes parmetros en el plugin de maven:

99 de 101

Framework Atlas
Manual usuario de Servicios Web
pom.xml
<plugin>
<groupId>atlasfrm</groupId>
<artifactId>atlasfrm-clientews-wsdl2code-maven-plugin</artifactId>
<version>${atlasfrm-clientews-wsdl2code-plugin.version}</version>
<configuration>
<packageName>atlas.ws.client</packageName>
<serviceNameAsPackage>true</serviceNameAsPackage>
<overWrite>false</overWrite>
</configuration>
<executions>
<execution>
<id>xxxxService</id>
<configuration>
<generateServerSide>true</generateServerSide>
<generateAllClasses>true</generateAllClasses>
<wsdlFile>src/main/resources/wsdl/xxxx.wsdl</wsdlFile>
</configuration>
<goals>
<goal>wsdl2code</goal>
</goals>
</execution>
</executions>
</plugin>

100 de 101

Framework Atlas
Manual usuario de Servicios Web
ENLACES RELACIONADOS

Producto

URL

Axis2

http://ws.apache.org/axis2/

Certificados ICM

http://desarrollo.madrid.org/certificados/

Descarga certificados de prueba

http://desarrollo.madrid.org/certificados/descarga_de_certificados.htm

101 de 101