Professional Documents
Culture Documents
MANUAL DE USUARIO
Servicios Web
Versin 2.0
Arquitectura de Software
Framework Atlas
Manual usuario de Servicios Web
Hoja de Control
Ttulo
Documento de Referencia
NORMATIVA ATLAS
Responsable
Arquitectura de Software
Versin
2.0
Fecha Versin
12/06/2015
Registro de Cambios
Versin
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.
2.
DESCRIPCIN .................................................................................................................................................................... 6
3.
4.
5.
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.
8.
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
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
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).
Servidor WS
HTTP
Cliente WS
HTTPS
Trusted CA
SSL Server
7 de 101
Framework Atlas
Manual usuario de Servicios Web
Servidor WS
Cliente WS
HTTPS
SSL Client
Server trusted
Client trusted
SSL Server
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.
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.
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.
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
12 de 101
Framework Atlas
Manual usuario de Servicios Web
4.1.
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.
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.
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:
-
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.
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.
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.
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
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>
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:
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.
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
4.1.7.
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.
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>
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.
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) ;
ClienteMiPrimerService.java
package prueba.client;
import
import
import
import
java.util.Properties;
prueba.services.MiPrimerService;
atlas.clientews.client.AtlasUnsecuredWSClient;
atlas.core.exceptions.ServiceException;
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:
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
repositoryRoot
"./META-INF/"
enableMTOM
false
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).
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);
}
}
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.
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.
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.
26 de 101
Framework Atlas
Manual usuario de Servicios Web
-
Como respuesta a la solicitud, la Unidad de Arquitectura de Aplicaciones contestar con un mensaje como este:
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.
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.
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.
Fichero web/src/main/webapp/WEB-INF/services.xml
<transports>
<transport>https</transport>
</transports>
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.
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
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.
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.
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.
Firmado digital del mensaje SOAP Garantiza la procedencia del mensaje, integridad de los datos y
no repudio.
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.
Para las operaciones de firma, cifrado y validacin de firma y cifrado se utilizar 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.
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:
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.
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.
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
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>
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
operationMode
localKey
wsuTsLife
signatureOperation
37 de 101
Framework Atlas
Manual usuario de Servicios Web
encryptionOperation
decryptionOperation
validationOperation
applySecurityOnFault
4.3.4.
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
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;
@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.
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.
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.
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;
@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.
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.
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.
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.
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.
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
configurar
nuestro
cliente
correctamente,
tenemos
que
modificar
el
fichero
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
Descripcion
app.id.asf
Ej.: EJPL_WS_CLIENTE
[nombreServicio].endpoint
Ej.:
https://desarrollo.madrid.org/<ejemplo_
ws>/services/<nombreServicio>
https.keystore.path
Ej.: ssl/keystore.keystore
Ej.: desarrollo
44 de 101
Ej.: 443
Framework Atlas
Manual usuario de Servicios Web
5.2.2.
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>
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
app.id.asf
Ej.: EJPL_WS_CLIENTE
[nombreServicio].endpoint
Ej.:
https://desarrollo.madrid.org/<ejemplo_
ws>/services/<nombreServicio>
https.keystore.path
Ej.: ssl/keystore.keystore
Ej.: desarrollo
46 de 101
Ej.: 443
Framework Atlas
Manual usuario de Servicios Web
5.3.
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.
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
[...]
Parmetro
app.id.asf
Descripcion
Nombre de la aplicacin
en ASF
[nombreServicio].endpoint
Ej.:
http://desarrollo.madrid.org/ejempl
o_ws/services/MiServicioWeb
[nombreServicio].localKey
47 de 101
Ej.: cliente_ws
Framework Atlas
Manual usuario de Servicios Web
[nombreServicio].remoteKey
Ej.: servidor_ws_cert
5.3.2.
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>
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
[...]
Parmetro
Descripcion
app.id.asf
Ej.: EJPL_WS_CLIENTE
[nombreServicio].endpoint
Ej.:
http://localhost:9080/services/
<nombreServicio>
[nombreServicio].localKey
Ej.: cliente_ws
49 de 101
Ej.: servidor_ws_cert
Framework Atlas
Manual usuario de Servicios Web
5.4.
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.
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
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
en ASF
[nombreServicio].endpoint
Ej.:
http://desarrollo.madrid.org/ejempl
o_ws/services/MiServicioWeb
[nombreServicio].localKey
Ej.: cliente_ws
Ej.: servidor_ws_cert
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
51 de 101
Ej.: 443
Framework Atlas
Manual usuario de Servicios Web
5.4.2.
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>
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
Parmetro
Descripcion
app.id.asf
Ej.: EJPL_WS_CLIENTE
[nombreServicio].endpoint
Ej.:
http://localhost:9080/services/
<nombreServicio>
[nombreServicio].localKey
Ej.: cliente_ws
Ej.: servidor_ws_cert
53 de 101
Ej.: ssl/keystore.keystore
Framework Atlas
Manual usuario de Servicios Web
https.keystore.pass
Ej.: desarrollo
54 de 101
Ej.: 443
Framework Atlas
Manual usuario de Servicios Web
5.5.
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.
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.
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
<!--
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
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
packageName
serviceNameAsPackage
overWrite
skipGeneratioin
outputDirectory
resourceOutputDirectory
testOutputDirectory
testResourceOutputDirec
tory
syncMode
generateTestcase
unpackClasses
generateServerSideInterf
ace
57 de 101
Framework Atlas
Manual usuario de Servicios Web
unwrap
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.
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.
58 de 101
Framework Atlas
Manual usuario de Servicios Web
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.
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>
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.
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.
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.
Descripcion
app.id.asf
Ej.: EJPL_WS_CLIENTE
[nombreServicio].endpoint
Ej.:
https://desarrollo.madrid.org/<ejemplo_
ws>/services/<nombreServicio>
64 de 101
Framework Atlas
Manual usuario de Servicios Web
https.keystore.path
Ej.: ssl/keystore.keystore
Ej.: desarrollo
5.7.
Ej.: 443
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.
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
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
app.id.asf
Ej.: EJPL_WS_CLIENTE
[nombreServicio].endpoint
Ej.:
http://localhost:9080/services/<nombr
eServicio>
[nombreServicio].localKey
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.
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.
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.
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.
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.
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>
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.
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>
<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
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
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
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:
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:
79 de 101
Framework Atlas
Manual usuario de Servicios Web
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.
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:
DEBUG
DEBUG
DEBUG
DEBUG
DEBUG
DEBUG
DEBUG
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.
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
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.
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.
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"
...
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.
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
Antes de ejecutar operaciones, comprobar que la URL del servicio est correctamente configurada (puede faltar el
puerto).
7.1.2.
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.
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
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
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
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.
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.
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.
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.
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>.
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.
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
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
8.3.
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.
98 de 101
Framework Atlas
Manual usuario de Servicios Web
8.4.
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.
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.
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/
http://desarrollo.madrid.org/certificados/descarga_de_certificados.htm
101 de 101