FRAMEWORK 2 Creación de Servicios Web



Documentos relacionados
WEBSERVICES CON FIRMA DIGITAL Versión 1.2

CREACIÓN DE WEBSERVICES

ATLAS MANUAL DE USUARIO DEL ARQUETIPO WEB CON DOCUMENTUM

CFDi Client Manual de Usuario

RESOLUCIÓN DE ERRORES EN MOODLE CAMPUS VIRTUAL-BIRTUALA UPV-EHU

Guía rápida Factura Electrónica Versión para proveedores de Sacyr

MANEJO DE FICHEROS XML Versión 1.0

ATLAS MANUAL DE USUARIO ARBOL ACCESIBLE

Gestión Documental PREPARACION DEL ENTORNO DE DESARROLLO

Alta. En la plataforma. Uned- lued - Formatic. Patricia Rodríguez Mara Aguiar

1. INTRODUCCIÓN 3 2. INSTALACIÓN DE LA APLICACIÓN PACK PYME Proceso de Instalación y Arranque... 5

Manual básico BSCW. 1. Acceder al espacio de trabajo. Hacer clic en Acceder a su área de trabajo.

ATLAS MANUAL DE INTEGRACIÓN

El proceso de edición digital en Artelope y CTCE

INSTALACIÓN - SERVER MANUAL TÉCNICO INSTALACIÓN SERVER MANUAL TÉCNICO 1

GUÍA DE INSTALACIÓN Y USO PISIS CLIENTE

Introducción a Visual Studio.Net

Para crear formularios se utiliza la barra de herramientas Formulario, que se activa a través del comando Ver barra de herramientas.

Administrador certificado de Salesforce.com Guía de estudio

JOOMLA MANUAL USUARIO Creación del portal

Proyectos de Innovación Docente

<SOLICITUD DE CLAVE SAC> MANUAL DE USUARIO

Manual para Declaración Anual

COPPEL MANUAL TÉCNICO MCC DE SISTEMAS PROGRAMACIÓN DESCRIPCIÓN DEL PROCESO DE ARQUITECTURA DE SOFTWARE

Manual Time One Software control de horarios

SISTEMA InfoSGA Manual de Actualización Mensajeros Radio Worldwide C.A Código Postal 1060

Instalación y configuración inicial del sistema SIU-Kolla Versión 3.0.0

INSTALACIÓ N A3ERP. Informática para empresas INTRODUCCIÓN CONSIDERACIONES GENERALES DE LA INSTALACIÓN PAQUETES DE INSTALACIÓN PREDEFINIDOS

FAQ: SEPA 03/11/2015 Página 1 de 16

Solución de firma de pdf (Servidor) PDF_SIGN Versión 1.4

Curso Internet Básico - Aularagon

MANUAL DEL PROVEEDOR

(Altas de prestaciones por ERE S): guía para las empresas

Descarga Automática. Manual de Usuario. Operador del Mercado Ibérico de Energía - Polo Español Alfonso XI, Madrid

Inside. Gestión de Expedientes y Documentos Electrónicos

DESCARGA E INSTALACIÓN DE LA DOCUMENTACIÓN PARA LAS CLASES DEL API DE JAVA. CONSULTAR EN LOCAL O EN INTERNET? (CU00910C)

INSTALACIÓN A3ERP INTRODUCCIÓN CONSIDERACIONES GENERALES DE LA INSTALACIÓN PAQUETES DE INSTALACIÓN PREDEFINIDOS

Gestión Documental con Microsoft Office SharePoint Server 2007 (MOSS) Ignacio López - Ingeniero en Informática Software Architect en Alhambra-Eidos

Notas de la versión CTL 1.1

Guía del usuario de DocuShare Agent

TEMA 4: CORREO ELECTRÓNICO: OUTLOOK 2007 CORREO ELECTRÓNICO: OUTLOOK EJECUTAR EL ENTORNO DE TRABAJO GESTIÓN DE CORREO ELECTRÓNICO 3

PREPARANDO EL ENTORNO DE DESARROLLO PARA PROGRAMAR EN PHP. DESCARGAR E INSTALAR NOTEPAD++ (CU00808B)

MANUAL PLATAFORMA SMSWORLD

Actualización de versión a Bizagi 10.x

IVOOX. 1º.-Subir y gestionar archivos.

Preguntas Frecuentes. Plataforma ScienTI. Aplicativos CvLAC y GrupLAC

Tener la WiFi abierta implica tener nuestra conexión a Internet compartida, además de otros riesgos:

ATLAS MANUAL DE USUARIO DEL ARQUETIPO WEBSERVICE

Sincronización de carpetas con el disco duro virtual en sistemas GNU/Linux

GOOGLE NOTICIAS Y ALERTAS

CONSIDERACIONES GENERALES DEL FUNCIONAMIENTO DEL PROGRAMA

(altas de trabajadores afectados por EREs): guía para las empresas

Manual del Ciudadano para el Uso del Portal de Cambio de Domicilio. Proyecto: Portal Cambio de Domicilio Revisión: 1.1 Fecha: Octubre 2015

Guía rápida de la Oficina Virtual Área Web y Administración Electrónica

Programa de Fabricación para Android

INSTALACIÓN DE ORACLE 8i (8.1.7) SOBRE NT

Manual de suscripción a fuentes RSS.

JOOMLA MANUAL USUARIO Creación del portal

Instalación del programa PSPP y obtención de una distribución de frecuencias.

MANUAL DE USUARIO MÓDULO Web

MIGRACIÓN DEL MOODLE A MESTRE A CASA

Manual del estudiante

SECRETARÍA VIRTUAL Perfil Ciudadano

REGISTRO ELECTRÓNICO DE FACTURAS

Manual de usuario para Android de la aplicación PORTAFIRMAS MÓVIL

Servicios de Formación:

Guía de migración a firma HMAC SHA256 Conexión por Redirección

Organizando mi clase en el GES Material de apoyo

Características y ventajas de WinZip

QUÉ ES HOMEBASE? Encontrar Libros

HERRAMIENTA DE CONTROL DE PLAGIOS MANUAL DE AYUDA

PROYECTO MASI MODELO DE ADMINISTRACIÓN DEL SISTEMA IMPOSITIVO

JOOMLA MANUAL USUARIO Creación del portal

Configuración factura electrónica. construsyc instasyc

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

PROGRAMA INFORMÁTICO PARA LA CUMPLIMENTACIÓN DE RECETAS EN FORMATO XML VERSIÓN: 1.0

ATLAS PERSISTENCIA DE SESIONES EN BASE DE DATOS CON WEBLOGIC 9.2

- MANUAL TÉCNICO - Software de diagnóstico de la seguridad de la información y autoimplantación de LOPD. Rev. 01- FEBRERO 2013

Amnistía Internacional Sección Española

La publicación. Pere Barnola Augé P08/93133/01510

Manual de ayuda para crear y gestionar Tareas, como actividad evaluable

Guía rápida del alumno. Versión 6.2

Preparación del Entorno de Trabajo J OOMLA! LA WEB EN ENTORNOS EDUCATIVOS

DIRECCIÓN DE SISTEMAS DE INFORMACIÓN DEPARTAMENTO CERES

GUÍA BÁSICA DE USO DEL SISTEMA RED

ADAPTACIÓN DE SICALWIN AL SEPA (actualizado a 31 de marzo de 2014)

Tipos de ítems de menús

Manual de Uso Web profesional

bla bla Guard Guía del usuario

Exporta la construcción para su visualización en Internet, es decir, como applet dentro de una página html.

Aplicación de gestión TPC Manual usuario: Tramitación

Manual de ayuda para la utilización del Correo Interno en el Campus Virtual

Jefe del Servicio de Contratación y Patrimonio

Manual de iniciación Aula Virtual del IES El Greco

REGISTRO ELECTRÓNICO DEL FONDO ESPAÑOL DE GARANTÍA AGRARIA

Guía de instalación de Gesclivet.

DIRECCIÓN DE SISTEMAS DE INFORMACIÓN DEPARTAMENTO CERES

MODULO ADMINISTRATIVO

Tutorial de uso. ScanIPTV V.4.7

Transcripción:

Creación de Versión 1.1 Área de Aplicaciones Especiales y Arquitectura de Software Página 1 de 21

Hoja de Control Título Documento Referencia Responsable de Creación de Área de Aplicaciones Especiales y Arquitectura de Software Versión 1.1 Fecha Versión 06/02/2014 Registro de Cambios Versión Causa del Cambio Responsable del Cambio Fecha del Cambio 1.0 Versión inicial del documento 1.1 Se restructura el documento incluyendo la configuración de seguridad y se indica la configuración en cliente para utilizar HTTP 1.1 Unidad de Arquitectura y Soporte de Aplicaciones 09/05/2011 Área de Aplicaciones Especiales y 06/02/2014 Arquitectura de Software Página 2 de 21

Índice 1 INTRODUCCIÓN... 4 1.1 AUDIENCIA OBJETIVO... 4 1.2 CONOCIMIENTOS PREVIOS... 4 2 INFORMACIÓN GENERAL SOBRE DESARROLLO... 5 2.1 HERRAMIENTAS EN PUESTO LOCAL... 5 2.1.1 Apache ANT... 5 2.1.2 Apache AXIS... 5 2.1.3 URLS PLANTILLAS... 5 3 DESARROLLO DE UN SERVICIO WEB... 6 3.1 CREACIÓN DEL SERVICIO WEB... 6 3.1.1 Paso 1: Creación del Servicio Web Partiendo de la plantilla... 6 3.1.2 Paso 2: Creación e implementación de la clase Servicio Web... 6 3.1.3 Paso 3: Generación del Servicio Web... 6 3.1.4 Paso 4: Actualización de los ficheros descriptores de despliegue... 6 3.1.5 Paso 5: Realización de un primer despliegue... 7 3.2 IMPLEMENTACION DE SEGURIDAD A NIVEL DE TRANSPORTE... 7 3.2.1 Paso 1: Configuración de la aplicación en el entorno ASF... 8 3.2.2 Paso 2: Creación del Servicio Web Partiendo de la plantilla... 8 3.2.3 Paso 3: Creación e implementación de la clase Servicio Web... 9 3.2.4 Paso 4: (Opcional): Obtención del certificado de cliente... 9 3.2.5 Paso 5: Generación del servicio Web... 10 3.2.6 Paso 6: Actualización de los ficheros de descriptores de despliegue... 10 3.3 FIRMA Y VERIFICACION MENSAJE XML DSIG EN EL SERVICIO WEB... 10 3.3.1 Paso 1: Configuración de la aplicación en el entorno ASF... 10 3.3.2 Paso 2: Creación del Servicio Web Partiendo de la plantilla... 10 3.3.3 Paso 3: Creación e implementación de la clase Servicio Web... 11 3.3.4 Paso 4: Actualización de los ficheros de descriptores de despliegue... 11 4 DESARROLLO DE UN CLIENTE DE SERVICIO WEB... 14 4.1 CREACIÓN CLIENTE DEL SERVICIO WEB... 14 4.1.1 Paso 1: Generar el cliente a partir de la WSDL... 14 4.1.2 Paso 2: Configurar protocolo HTTP 1.1... 14 4.2 FIRMA Y VERIFICACION MENSAJE XML DSIG EN EL CLIENTE... 15 4.2.1 Paso 1: Configuración de la aplicación en el entorno ASF... 15 4.2.2 Paso 2: Actualización de los ficheros de descriptores de despliegue... 15 5 CREACIÓN DE TEST UNITARIOS... 17 6 FICHEROS DE EJEMPLO... 17 7 ENLACES RELACIONADOS... 21 Página 3 de 21

1 INTRODUCCIÓN Este presente documento muestra como construir servicios web y clientes de servicios web. Estos servicios podrán ser públicos, es decir, sin seguridad, o podrán ser seguros: utilizando la firma digital del mensaje o el cifrado del mensaje. En el caso de servicios web seguros, se recoge la posibilidad de firmar el mensaje de petición y de respuesta utilizando el estándar XML-Dsig, y la de cifrar el mensaje con certificado digital de cliente y de servidor. Para realizar las operaciones de firma, verficación de la firma, y verificación del certificado tanto de cliente como de servidor, se utilizará la plataforma ASF. Por tanto, en el caso de servicios web seguros tanto el servicio como su cliente deberán cumplir todos los pasos necesarios para estar de alta en la plataforma ASF, tal como se explica en el manual de la misma. 1.1 AUDIENCIA OBJETIVO Este documento está orientado a desarrolladores o personal de mantenimiento que vaya a desarrollar servicios web o clientes para consumir de servicios web ya existentes. 1.2 CONOCIMIENTOS PREVIOS Para un completo entendimiento del documento, el lector deberá tener conocimientos previos sobre las siguientes tecnologías: Framework 2 AXIS ASF Para saber más sobre dichas tecnologías, consultar el apartado de este documento, Enlaces Relacionados. Página 4 de 21

2 INFORMACIÓN GENERAL SOBRE DESARROLLO A continuación se incluye la información general sobre el desarrollo de servicios web y clientes de servicios web. 2.1 HERRAMIENTAS EN PUESTO LOCAL Para el desarrollo y mantenimiento de las aplicaciones en el nuevo entorno es necesario disponer en local de las siguientes herramientas: 2.1.1 Apache ANT Para la creación de los servicios web y de los clientes de los mismos, se utilizará la herramienta Ant. Un proyecto de código abierto de Apache Software Fondation. Dentro de un fichero de configuración de ANT, como el fichero build.xml que se muestra de ejemplo más adelante, cada una de las tareas que se puenden realizar se denominan target. Además se pueden establecer variables que podrá ser accesibles por cualquier tarea, a través de la marca property. Dentro de la página http://ant.apache.org podemos encontrar una relación del significado de cada una de las marcas y sus parámetros. 2.1.2 Apache AXIS Como motor de utilizamos Apache AXIS 1.4. Para lo cual será necesario: 1. Descargar la versión 1.4. de axis de la dirección http://www.apache.org/dyn/closer.cgi/ws/axis/1_4. 2. Descomprimir el zip de axis en cualquier directorio. A partir de ahora esa ruta será la variable "axis.home", que habrá que cambiar dentro del build.xml de la plantilla. 2.1.3 URLS PLANTILLAS En el portal de arquitecturasw están disponibles las siguientes plantillas de servicios web con Axis 1.4 en Framework2: fw2_ws_pub: plantilla para la creción de un servicio web público, es decir sin seguridad. fw2_ws_privcert: plantilla para la creción de un servicio web seguro, con certificado de cliente. fw2_ws_priv: plantilla para la creción de un servicio web seguro, con firma digital. Página 5 de 21

3 DESARROLLO DE UN SERVICIO WEB En este apartado se describen los pasos a seguir para crear un servicio web con Axis 1.4 en Framework 2 utilizando las plantillas disponibles, e incorporarles las configuraciones de seguridad en caso necesario, integrándose con la plataforma de seguridad ASF. 3.1 CREACIÓN DEL SERVICIO WEB Pasos a seguir para la creación de un Servicio Web: 3.1.1 Paso 1: Creación del Servicio Web Partiendo de la plantilla Descargar del portal de arquitecturasw la plantilla para el desarrollo de webservices públicos fw2_ws_pub. Se deberá cambiar el nombre del proyecto. 3.1.2 Paso 2: Creación e implementación de la clase Servicio Web Crear la clase que hará de servicio web, para ello se debe heredar de la clase de sistemas: sistemas.ws.servicioweb. Usar el constructor de esta clase para indicar el nombre del fichero de configuración y que recoja las variables del mismo. Además en esta clase se definirán las operaciones a las que va a dar servicio nuestro WebService. Como ejemplo, en la plantilla se encuentra fw2_ws_pub.servicio.serviciows. Completar las operaciones del servicio con la lógica de negocio necesaria para cumplir el objetivo esperado por nuestro servicio web. 3.1.3 Paso 3: Generación del Servicio Web Modificar el fichero ANT build.xml de la plantilla: o cambiando el nombre del proyecto y las variables que afecten a las rutas físicas de nuestro proyecto. Además es necesario modificar los nombres de los paquetes y ficheros de configuración para que cumplan con la normativa de aseguramiento de calidad relativa a este punto. o Actualizar la tarea SERVICE - Generar wsdl con los datos de nuestro servicio. Es recomendable que si va a haber varios webservices se cree una tarea para cada servicio. Ejecutar la tarea SERVICE - Generar wsdl ANT del build.xml. Se crea un fichero descriptor de nuestro servicio web con extensión wsdl y nombre el que nosotros le hayamos indicado. 3.1.4 Paso 4: Actualización de los ficheros descriptores de despliegue Página 6 de 21

Actualizar el fichero server-config.wsdd, con la información del servicio web. Este archivo indicará al servidor de aplicaciones que clases definen el servicio web y como están configuradas. Además será donde se pueda integrar cualquier tipo de configuración y manejadores (handlers) para los servicios web. Dicho archivo, debe contener los deserializaadores de los beans que se utilicen el intercambio de informacion. 3.1.5 Paso 5: Realización de un primer despliegue Realizar un primer despliegue del servicio en un servidor de aplicaciones usando para ello la tarea deploy que esta incluida en el fichero build.xml. La tarea deploy solo crea el ear a partir de la web y copia el fichero en el directorio "deploy.dest". Será necesario desplegar el EAR en el servidor local. ATENCION Para comprobar que nuestro servicio se encuentra dado de alta y responde a peticiones, puede hacerse una petición a la dirección correspondiente a nuestro servicio y siguiendo la estructura: http://servidor:puerto/aplicación/services/claseservicio Esta petición nos debe responder un mensaje de AXIS para saber que esta funcionando correctamente. 3.2 IMPLEMENTACION DE SEGURIDAD A NIVEL DE TRANSPORTE En este apartado se muestra como configurar un servicio web para incluir seguridad en el canal de transmisión. En este modelo de seguridad, los mensajes se intercambian en un canal cifrado HTTPS y el certificado del cliente usado en la comunicación es analizado en el servidor para comprobar si este tiene derechos de acceso. La comprobación de acceso se hace en base a la configuración de ASF. En ASF se añadirán todas las entidades de certificación de las que se admitirán certificados digitales. Si se quiere admitir únicamente un certificado concreto, o una lista determinada de estos, será posteriormente el servicio web el que deberá realizar esta última validación de acceso. En los siguientes apartado se muestra cómo configurar la seguridad en un servicio web, descrito en varios pasos a seguir. Página 7 de 21

3.2.1 Paso 1: Configuración de la aplicación en el entorno ASF Antes de configurar la aplicación, 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 categoría de ASF. Para el resto de entornos (validación, producción, etc.) se incluye dicha información en la ficha de entrega. La información que se ha de incluir en la solicitud es la siguiente: - operación: WSS - seguridad servicio web - aplicación: Nombre de aplicación que se desea dar de alta en ASF - certificado de servidor a utilizar: Indicar qué certificado de servidor se desea utilizar, o si se quiere utilizar uno genérico. A continuación se muestra un ejemplo de solicitud: Ejemplo de solicitud a la Unidad de Arquitectura de Aplicaciones Operacion: WSS - seguridad servicio web Aplicacion: EJPL_WS_SERVIDOR Certificado de servidor: certificado genérico Como respuesta a la solicitud, la Unidad de Arquitectura de Aplicaciones contestará con un mensaje como este: Ejemplo de respuesta de la Unidad de Arquitectura de Aplicaciones Se han realizado actuaciones en la plataforma ASF 5.0 para definir servidor y cliente del alta solicitada para el módulo "EJPL_WS_SERVIDOR". Los datos para configurar los desarrollos son los siguientes: SERVIDOR > ID de aplicación ASF: EJPL_WS_SERVIDOR > alias "localkey": servidor_ws CLIENTE > ID de aplicación ASF: EJPL_WS_CLIENTE > alias "localkey": cliente_ws > alias "remotekey": servidor_ws_cert 3.2.2 Paso 2: Creación del Servicio Web Partiendo de la plantilla Descargar del portal de arquitecturasw la plantilla para el desarrollo de webservices seguros con certificado de cliente fw2_ws_privcert. Se deberá cambiar el nombre del proyecto. Página 8 de 21

3.2.3 Paso 3: Creación e implementación de la clase Servicio Web Crear la clase que hará de servicio web, para ello se debe heredar de la clase de sistemas: sistemas.ws.servicioweb. Usar el constructor de esta clase para indicar el nombre del fichero de configuración y que recoja las variables del mismo. Además en esta clase se definirán las operaciones a las que va a dar servicio nuestro WebService. Como ejemplo, en la plantilla se encuentra fw2_ws_privcert.servicio.serviciows. Completar las operaciones del servicio con la lógica de negocio necesaria para cumplir el objetivo esperado por nuestro servicio web. 3.2.4 Paso 4: (Opcional): Obtención del certificado de cliente Uno de los requisitos de seguridad que puede tener un servicio web es la obtención del certificado público del cliente con el que se realiza la conexión. La seguridad aplicada solo se encarga de verificar que el certificado de cliente está firmado por una CA admitida. Sin embargo, el servicio web puede tener otros requisitos de seguridad respecto del cliente, como el permitir solo el acceso a un determinado certificado. En este caso, en la plantilla se recupera el certificado cliente y se comprueba que su clave pública es una de las autorizadas a acceder a la aplicación: [...] fw2_ws_privcert.handler.certificatehandler.java DatosCertificado dcf = null; try { dcf = GestorCertificados.getCertificado(req); Trazas.impLog("DatosCertificado: " + dcf.getcommonname()); if (GestorCertificados.tieneCertificado(req)) { KeystoreHandler kshandler = new KeystoreHandler("JKS", new FileInputStream(rutaKeystore), clavekeystore.tochararray()); if (!kshandler.contains(gestorcertificados.getcertificado(req).getcertificado().getpublickey())) { Trazas.impExc("El certificado de cliente suministrado no" + " tiene acceso a la aplicación."); throw new AxisFault( "El certificado de cliente suministrado no" + " tiene acceso a la aplicación."); } } else { Trazas.impExc("No se ha suministrado certificado cliente"); throw new AxisFault("No se ha suministrado certificado cliente"); } } catch (KeyStoreException e) { Trazas.impExc("Error KeyStoreException"); Trazas.imprimeErrorExtendido(e); throw new AxisFault( "Error al cargar el almacen de certficados de confianza.",e); Página 9 de 21

[...] } 3.2.5 Paso 5: Generación del servicio Web Modificar el fichero ANT build.xml de la plantilla: como se indica en el paso 3 de Servicicios Web sin seguridad y ejecutar la tarea SERVICE - Generar wsdl. 3.2.6 Paso 6: Actualización de los ficheros de descriptores de despliegue Modificar el fichero ANT build.xml de la plantilla: Comprobar que en el fichero server-config.wsdd, se encuentra el handler que maneja el certificado, el el fragmento <requestflow>: [...] Server-config.wsdd <requestflow> [...] <handler type="java:fw2_ws_privcert.handler.certificatehandler"> name="configfile" value="fw2_ws_privcert.conf" </handler> </requestflow> [...] 3.3 FIRMA Y VERIFICACION MENSAJE XML Dsig EN EL SERVICIO WEB 3.3.1 Paso 1: Configuración de la aplicación en el entorno ASF Como en el caso anterior, antes de configurar la aplicación, 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 categoría de ASF. Para el resto de entornos (validación, producción, etc.) se incluye dicha información en la ficha de entrega. Para ello se debe solicitar a la Unidad de Arquitectura e Integración de aplicaciones, que para nuestra aplicación se den de alta dentro de la plataforma las operaciones de FIRMA y VERIFICACION, indicando las ca s que debe verificar y el certificado con el que se van a firmar las peticiones. 3.3.2 Paso 2: Creación del Servicio Web Partiendo de la plantilla Página 10 de 21

Descargar del portal de arquitecturasw la plantilla para el desarrollo de webservices seguros preparada para la firma y verificación de la petición fw2_ws_priv. Se deberá cambiar el nombre del proyecto, y seguir los pasos de generación como en los casos anteriores. 3.3.3 Paso 3: Creación e implementación de la clase Servicio Web Se genera el servicio web y se implementan la las operaciones como en los casos anteriores. 3.3.4 Paso 4: Actualización de los ficheros de descriptores de despliegue La forma de firmar la petición y la respuesta es mediante el uso de una clase Handler (librería ws_sign_handler.jar) donde ya está implementada la firma y la validación de un mensaje con el formato XMLDSig con ayuda de la plataforma de ASF. Para hacer que el servicio web valide la petición tenemos que editar el fichero server_config.wsdd. En este fichero tenemos que insertar la información que indica abajo sobre los handlers van a manejar las peticiones y las respuestas del servicio web. Es decir, utilizaremos estos manejadores para obtener la información de la petición firmada (validar la firma y sacar la información) y tambien para firmar la respuesta del servicio web. Para la validación de la petición, en el elemento requestflow de este fichero añadiremos otro elemento handler aparte de los que ya existen, con las variables de configuración de esta operación en la plataforma ASF. Y que corresponden a la aplicación que esta dada de alta en ASF y la operación de verificación asociada a la misma en este caso VERIFICACION: VERIFICACION <handler type="java:handlers.validationhandler"> name="aplicacion.asf.verify.verifysignatureapplicationid" value="ejemplo_ws" name="aplicacion.asf.verify.verifysignatureoperationtypeid" value="verificacion" name="aplicacion.asf.verify.registronorepudio" value="false" name="aplicacion.asf.verify.signaturecheckrevocation" value="false" name="aplicacion.asf.verify.ignoreverificationcaches" value="false" name="aplicacion.asf.invokingapp" value="ejemplo_ws" /handler> Página 11 de 21

Para la firma de la respuesta, en el elemento responseflow de este fichero añadiremos otro elemento handler aparte de los que ya existen, con las variables de configuración de esta operación en la plataforma ASF. Y que corresponden a la aplicación que esta dada de alta en ASF y la operación de firma asociada a la misma en este caso FIRMA: FIRMA <handler type="java:handlers.signerhandler"> name="aplicacion.asf.sign.signapplicationid" value="ejemplo_ws" name="aplicacion.asf.sign.signoperationtypeid" value="firma" name="aplicacion.asf.sign.ignoreverificationcaches" value="false" name="aplicacion.asf.sign.registerrevocation" value="false" name="aplicacion.asf.sign.alias" value="demo_abogacia" name="aplicacion.asf.invokingapp" value="ejemplo_ws" /handler> De esta forma, el fichero server_config.wsdd quedará de la siguiente forma: server_config.wsdd <?xml version="1.0" encoding="utf-8"?> <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <globalconfiguration> name="adminpassword" value="admin" name="attachments.implementation" value="org.apache.axis.attachments.attachmentsimpl" name="sendxsitypes" value="true" name="sendmultirefs" value="true" name="sendxmldeclaration" value="true" name="axis.sendminimizedelements" value="true" <requestflow> <handler type="java:org.apache.axis.handlers.jwshandler"> name="scope" value="session" </handler> <handler type="java:org.apache.axis.handlers.jwshandler"> name="scope" value="request" name="extension" value=".jwr" </handler> <handler type="java:handlers.validationhandler"> name="aplicacion.asf.verify.verifysignatureapplicationid" value="ejemplo_ws" name="aplicacion.asf.verify.verifysignatureoperationtypeid" value="verificacion " name="aplicacion.asf.verify.registronorepudio" value="false" name="aplicacion.asf.verify.signaturecheckrevocation" value="false" name="aplicacion.asf.verify.ignoreverificationcaches" value="false" name="aplicacion.asf.invokingapp" value="ejemplo_ws" </handler> Página 12 de 21

</requestflow> <responseflow> <handler type="java:handlers.signerhandler"> name="aplicacion.asf.sign.signapplicationid" value="ejemplo_ws" name="aplicacion.asf.sign.signoperationtypeid" value="firma" name="aplicacion.asf.sign.ignoreverificationcaches" value="false" name="aplicacion.asf.sign.registerrevocation" value="false" name="aplicacion.asf.sign.alias" value="demo_abogacia" name="aplicacion.asf.invokingapp" value="ejemplo_ws" </handler> </responseflow> </globalconfiguration> <handler name="localresponder" type="java:org.apache.axis.transport.local.localresponder" <handler name="urlmapper" type="java:org.apache.axis.handlers.http.urlmapper" <handler name="authenticate" type="java:org.apache.axis.handlers.simpleauthenticationhandler" <handler name="validation" type="java:handlers.validationhandler" <handler name="signer" type="java:handlers.signerhandler" <service name="adminservice" provider="java:msg"> name="allowedmethods" value="adminservice" name="enableremoteadmin" value="false" name="classname" value="org.apache.axis.utils.admin" <namespace>http://xml.apache.org/axis/wsdd/</namespace> </service> <service name="version" provider="java:rpc"> name="allowedmethods" value="getversion" name="classname" value="org.apache.axis.version" </service> <service name="servicioempleados" provider="java:rpc"> name="allowedmethods" value="*" name="scope" value="request" name="classname" value="servicioempleados.servicio.servicioempleados" <typemapping deserializer="org.apache.axis.encoding.ser.beandeserializerfactory" encodingstyle="http://schemas.xmlsoap.org/soap/encoding/" qname="ns1:empleadosbean" serializer="org.apache.axis.encoding.ser.beanserializerfactory" type="java:servicioempleados.beans.empleadosbean" xmlns:ns1="http://beans.servicioempleados" </service> <transport name="http"> <requestflow> <handler type="urlmapper" <handler type="java:org.apache.axis.handlers.http.httpauthhandler" </requestflow> </transport> <transport name="local"> <responseflow> <handler type="localresponder" Página 13 de 21

</responseflow> </transport> </deployment> 4 DESARROLLO DE UN CLIENTE DE SERVICIO WEB 4.1 CREACIÓN CLIENTE DEL SERVICIO WEB Una vez creado nuestro webservice, es hora de crear el cliente. Este punto también se puede seguir en el caso de que no hayamos creado nosotros el servicio, ya que lo únicamente necesario es el fichero wsdl que describe las operaciones del mismo. 4.1.1 Paso 1: Generar el cliente a partir de la WSDL Se parte del fichero descriptor del servicio web WSDL y se genera el cliente. Se debería definir tarea "axiswsdl2java" de Ant. Esta tarea nos creara todas las clases necesarias para invocar el webservice asi como una clase de test que nos permitirá testear el cliente generado en caso de ser necesario. Para poder ejecutar esta clase de test será necesario tener dentro de nuestro proyecto de Eclipse importado el jar de junit. 4.1.2 Paso 2: Configurar protocolo HTTP 1.1 En nuestro caso también observar que dentro de la carpeta de test se ha incluido el fichero client-config.wsdd donde se describe la configuración del funcionamiento del cliente, y en este caso el mapeo de los beans a través de los que recibe información del servicio. Además este fichero es básico en caso de que queramos incluir interceptores de la comunicación SOA, que nos permitan aunmentar la funcionalidad de nuestro producto. Por ejemplo, los interceptores de webservices seguros a través de ASF como podremos ver en el apartado de seguridad. Axis 1.x utiliza la implementación del API java.nex.* para el transporte HTTP por defecto, que a su vez, realiza las peticiones HTTP 1.0 de forma predeterminada. Axis se debe configurar para utilizar Apache Commons HTTP Client (commons-http) para aprovechar la funcionalidad HTTP 1.1 del commons-httpclient. Para hacer ésto es necesario incluir el httpclient.jar en el proyecto cliente (o en las librerías compartidas), e indicar la propiedad: <transport name="http" pivot="java:org.apache.axis.transport.http.commonshttpsender" Página 14 de 21

(en lugar de la que viene por defecto: <transport name="http" pivot="java:org.apache.axis.transport.http.httpsender" ) en el fichero descriptor client-config.wsdd: client-config.wsdd <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <transport name="java" pivot="java:org.apache.axis.transport.java.javasender" <transport name="http" pivot="java:org.apache.axis.transport.http.commonshttpsender" <transport name="local" pivot="java:org.apache.axis.transport.local.localsender" /deployment> 4.2 FIRMA Y VERIFICACION MENSAJE XML Dsig EN EL CLIENTE 4.2.1 Paso 1: Configuración de la aplicación en el entorno ASF Hay que tener en cuenta como para el servidor que se debe solicitar a la Unidad de Arquitectura e Integración de aplicaciones, que nuestra aplicación se den de alta dentro de la plataforma ASF con las operaciones de FIRMA y VERIFICACION, indicando las ca s que debe verificar y el certificado con el que se van a firmar las peticiones. 4.2.2 Paso 2: Actualización de los ficheros de descriptores de despliegue Para la operaciones de firma de peticiones y verificación en el cliente del servicio Web el procedimiento es similar a lo anteriormente especificado para el servidor. Aquí tendremos que indicar que clase es la que se encarga de firmar la petición y cual es la encargada de validar la respuesta igual que en el servidor, pero observando que en este caso se firmará la petición y se validará la respuesta. Para ello, modificaremos el fichero client-config.wsdd de la siguiente forma: Para la firma de la petición, en el elemento requestflow de este fichero añadiremos otro elemento handler aparte de los que ya existen, con las variables de configuración de esta operación en la plataforma ASF. Y que corresponden a la aplicación que esta dada de alta en ASF y la operación de firma asociada a la misma en este caso FIRMA: FIRMA <handler type="java:handlers.signerhandler"> name="aplicacion.asf.sign.signapplicationid" value="ejemplo_ws" name="aplicacion.asf.sign.signoperationtypeid" value="firma" name="aplicacion.asf.sign.ignoreverificationcaches" value="false" Página 15 de 21

name="aplicacion.asf.sign.registerrevocation" value="false" name="aplicacion.asf.sign.alias" value="demo_abogacia" name="aplicacion.asf.invokingapp" value="ejemplo_ws" </handler> Para la validación de la respuesta: En el elemento responseflow de este fichero añadiremos otro elemento handler aparte de los que ya existen, con las variables de configuración de esta operación en la plataforma ASF. Y que corresponden a la aplicación que esta dada de alta en ASF y la operación de verificación asociada a la misma en este caso VERIFICACION: VERIFICACION <handler type="java:handlers.validationhandler"> name="aplicacion.asf.verify.verifysignatureapplicationid" value="ejemplo_ws" name="aplicacion.asf.verify.verifysignatureoperationtypeid" value="verificacion" name="aplicacion.asf.verify.registronorepudio" value="false" name="aplicacion.asf.verify.signaturecheckrevocation" value="false" name="aplicacion.asf.verify.ignoreverificationcaches" value="false" name="aplicacion.asf.invokingapp" value="ejemplo_ws" </handler> Asi, el fichero client-config.wsdd quedaría de la siguiente manera: client-config.wsdd <?xml version="1.0" encoding="utf-8"?> <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <globalconfiguration> name="adminpassword" value="admin" name="sendxsitypes" value="true" name="sendmultirefs" value="true" name="sendxmldeclaration" value="true" name="axis.sendminimizedelements" value="true" <requestflow> <handler type="java:handlers.signerhandler"> name="aplicacion.asf.sign.signapplicationid" value="ejemplo_ws" name="aplicacion.asf.sign.signoperationtypeid" value="firma" name="aplicacion.asf.sign.ignoreverificationcaches" value="false" name="aplicacion.asf.sign.registerrevocation" Página 16 de 21

value="false" name="aplicacion.asf.sign.alias" value="demo_abogacia" name="aplicacion.asf.invokingapp" value="ejemplo_ws" </handler> </requestflow> <responseflow> <handler type="java:handlers.validationhandler"> name="aplicacion.asf.verify.verifysignatureapplicationid" value="ejemplo_ws" name="aplicacion.asf.verify.verifysignatureoperationtypeid" value="verificacion" name="aplicacion.asf.verify.registronorepudio" value="false" name="aplicacion.asf.verify.signaturecheckrevocation" value="false" name="aplicacion.asf.verify.ignoreverificationcaches" value="false" name="aplicacion.asf.invokingapp" value="ejemplo_ws" </handler> </responseflow> </globalconfiguration> <transport name="java" pivot="java:org.apache.axis.transport.java.javasender" <transport name="http" pivot="java:org.apache.axis.transport.http.httpsender" <transport name="local" pivot="java:org.apache.axis.transport.local.localsender" </deployment> 5 CREACIÓN DE TEST UNITARIOS Es de obligatorio cumplimiento la inclusión de test unitarios, que comprueben la funcionalidad correcta del servicio web entregado. Dentro de la carpeta de test de deben incluir tanto los recursos (ficheros de configuración ) y librerias necesarias para una correcta ejecución de los mismos. 6 FICHEROS DE EJEMPLO Fichero ant de ejemplo build.xml, que se puede encontrar en las plantillas de servicios web, será necesario adaptarlo a nuestra aplicación: build.xml <project name="fw2_ws_pub"> Página 17 de 21

<property name="appname" value="${ant.project.name}" <property name="src.dir" value="java/fuentes/src" <property name="web.dir" value="java/fuentes/web" <property name="build.dir" value="java/fuentes/web/web-inf" <property name="deploy.dir" value="java/ear" <!-- Sustituir por la ruta de axis 1.4. en su pc local--> <property name="axis.home" value="d:/soporte/axis-bin-1_4/axis-1_4" <!-- Sustituir por el directorio de despliegue de la aplicacion --> <property name="deploy.dest" value="c:/oracle/middleware/user_projects/domains/base_domain/servers/adminserver/upload" <!-- Sustituir por la maquina y el puerto de despliegue --> <property name="target.port" value="7001" <property name="target.server" value="localhost" <property name="target.appname" value="${appname}" <property name="endpoint-stub.wsdd" value="java/fuentes/web/web-inf/deploy.wsdd" <path id="axis.classpath"> <fileset dir="${axis.home}/lib"> <include name="**/*.jar" </fileset> <fileset dir="${build.dir}/lib"> <include name="**/*.jar" </fileset> <pathelement path="${build.dir}/classes" </path> <path id="compile.classpath"> <fileset dir="${src.dir}/../lib"> <include name="**/*.jar" </fileset> </path> <taskdef resource="axis-tasks.properties" classpathref="axis.classpath" <target name="service - Generar wsdl" description="crea el WSDL de la clase especificada"> <axis-java2wsdl classname="fw2_ws_pub.servicio.serviciows" namespace="fw2_ws_pub.servicio.serviciows" location="http://${target.server}:${target.port}/${appname}/services" output="${build.dir}/serviciows.wsdl" > <mapping namespace="urn:fw2_ws_pub.servicio" package="fw2_ws_pub.servicio" </axis-java2wsdl> </target> <target name="cliente - Generar.java" description="crea las clases necesarias para invocar un webservice"> <mkdir dir="${src.test.dir}" <axis-wsdl2java output="${src.test.dir}" testcase="true" Página 18 de 21

</target> verbose="true" url="${build.dir}/serviciows.wsdl" > <mapping namespace="urn:fw2_ws_pub.cliente" package="cliente" </axis-wsdl2java> <target name="compile Fuente" description="compila el directorio de fuentes java"> <mkdir dir="${build.dir}/classes" <javac destdir="${build.dir}/classes" debug="true" optimize="false" deprecation="false" failonerror="true"> <src path="${src.dir}" <classpath> <path refid="compile.classpath" </classpath> </javac> </target> <target name="compile Test" description="compila el directorio de test java"> <mkdir dir="${build.test.dir}" <javac destdir="${build.test.dir}" debug="true" optimize="false" deprecation="false" failonerror="true"> <src path="${src.test.dir}" <classpath> <path path="${build.test.dir}" <path refid="compile.classpath" <fileset dir="${src.test.dir}/../lib"> <include name="**/*.jar" </fileset> </classpath> </javac> </target> <target name="junit" depends="compile Test"> <junit printsummary="yes" haltonfailure="no"> <classpath> <pathelement location="${build.test.dir}" <path refid="compile.classpath" <fileset dir="${src.test.dir}/../lib"> <include name="**/*.jar" </fileset> </classpath> <formatter type="plain" <batchtest fork="yes" todir="${build.test.dir}"> <fileset dir="${src.test.dir}"> <include name="**/*test*.java" </fileset> </batchtest> </junit> </target> <target name="desplegar ear" description="crea el.ear de la aplicación y lo deja en el directorio ear"> Página 19 de 21

<war destfile="${deploy.dir}/${appname}.war" webxml="${build.dir}/web.xml"> <fileset dir="${web.dir}" </war> <ear destfile="${deploy.dir}/${appname}.ear" appxml="${deploy.dir}/meta- INF/application.xml"> <fileset dir="${deploy.dir}" includes="*.war" </ear> <delete> <fileset dir="${deploy.dir}" includes="**/*.war" </delete> <copy file="${deploy.dir}/${appname}.ear" todir="${deploy.dest}" </target> <target name="crear servicio en Axis" description="realiza el despliegue inicial del WebService en Axis"> <axis-admin port="${target.port}" hostname="${target.server}" failonerror="true" servletpath="${target.appname}/services/adminservice" debug="true" xmlfile="${endpoint-stub.wsdd}" </target> </project> Ejemplo de fichero deploy.wsdd: deploy.wsdd <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="serviciows" provider="java:rpc"> name="classname" value="fw2_ws_pub.servicio.serviciows" name="allowedmethods" value="*" </service> </deployment> Página 20 de 21

7 ENLACES RELACIONADOS Producto Portal Arquitectura ICM Apache AXIS Apache ANT Certificados ICM Descarga certificados de prueba URL http://intranet.madrid.org/arquitecturasw http://www.apache.org/dyn/closer.cgi/ws/axis/1_4. http://ant.apache.org http://desarrollo.madrid.org/certificados/ http://desarrollo.madrid.org/certificados/descarga_de_certificados.htm Página 21 de 21