java modulo 8

90
Profesion Módulo 8: Dis nal en Plata Java señando servicios w aforma web Java

Upload: jose-gandia-serna

Post on 27-Nov-2015

123 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Java Modulo 8

Profesional en Plataforma

Módulo 8: Diseñando servicios web Java

Profesional en Plataforma

Java

Módulo 8: Diseñando servicios web Java

Profesional en Plataforma

Módulo 8: Diseñando servicios web Java

Page 2: Java Modulo 8

Módulo 8: Diseñando servicios web Java

Unidad 1. Analizando oportuniudades con los servicios

Unidad 2. Diseñando buenas prácticas y patrones para los servicios web

Unidad 3. Manejando excepciones en los servicios web

Unidad 4. Seguridad en los servicios web

Para uso exclusivo de los alumnos de CETICSA S.L.

Contenido

Módulo 8: Diseñando servicios web Java

Analizando oportuniudades con los servicios web

Diseñando buenas prácticas y patrones para los servicios web

Manejando excepciones en los servicios web

Seguridad en los servicios web

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Módulo 8: Diseñando servicios web Java

web

Diseñando buenas prácticas y patrones para los servicios web

Page 3: Java Modulo 8

Unidad 1: Analizando Oportunidades con los

Objetivos

� Describir la arquitectura orientada a servicios.

� Entender los servicios web como una implementación de SOA

Introducción

El término servicios Web designa una tecnología que permite que las aplicaciones se comuniquen en

una forma que no depende de la plataforma ni del

interfaz de software que describe un conjunto de operaciones a las cuales se puede acceder por la red

a través de mensajería XML estandarizada. Usa protocolos basados en el lenguaje XML con el objetivo

de describir una operación para ejecutar o datos para intercambiar con otro servicio Web. Un grupo de

servicios Web que interactúa de esa forma define la aplicación de un servicio Web específico en una

arquitectura orientada a servicios (SOA).

La arquitectura en capas se complementa entonces

que se hace necesaria una forma de comunicación eficiente y escalable, independientemente del

lenguaje de programación y plataforma de cada una de las aplicaciones. Es nec

desarrollar los servicios que se presentan y son

utilizados. Un servicio es una función que acepta una llamada y devuelve una respuesta mediante una

interfaz bien definida. La manera en la que un servicio procesa internamente la llamada par

la respuesta es independiente de la definición del servicio.

La arquitectura orientada a servicios proporciona, además, la posibilidad de orquestación de los

servicios, esto es, secuenciación, orden y control de los servicios, añadiendo la lógic

necesaria para el proceso.

Los elementos básicos que conforman SOA son:

� Proveedores de servicios

� Consumidores de servicios

� Bus de Servicios Empresariales.

En la siguiente unidad estudiaremos la arquitectura en servicios, servicios web implementa

análisis de casos típicos de SOA.

Algunas implementaciones SOAP

comunicaciones dinámicas.

Tipos de comunicación entre aplicaciones en Web Services

� Protocolo de Transporte:

o HTTP/HTTPS

� Codificación de datos

o Protocolo SOAP (Simple Object Access Protocol) y Esquema XML (DTD/XSD)

� Descripción de interfaces o puntos de acceso a aplicación

o WSDL (Web Services Description Language)

� Descripción de servicio y descubrimiento

o UDDI (Universal Descrip

Para uso exclusivo de los alumnos de CETICSA S.L.

Analizando Oportunidades con los

Servicios Web

arquitectura orientada a servicios.

los servicios web como una implementación de SOA.

designa una tecnología que permite que las aplicaciones se comuniquen en

una forma que no depende de la plataforma ni del lenguaje de programación. Un servicio Web es una

interfaz de software que describe un conjunto de operaciones a las cuales se puede acceder por la red

a través de mensajería XML estandarizada. Usa protocolos basados en el lenguaje XML con el objetivo

escribir una operación para ejecutar o datos para intercambiar con otro servicio Web. Un grupo de

servicios Web que interactúa de esa forma define la aplicación de un servicio Web específico en una

arquitectura orientada a servicios (SOA).

en capas se complementa entonces con la arquitectura orientada a servicios (SOA), ya

que se hace necesaria una forma de comunicación eficiente y escalable, independientemente del

lenguaje de programación y plataforma de cada una de las aplicaciones. Es nec

desarrollar los servicios que se presentan y son

utilizados. Un servicio es una función que acepta una llamada y devuelve una respuesta mediante una

interfaz bien definida. La manera en la que un servicio procesa internamente la llamada par

la respuesta es independiente de la definición del servicio.

La arquitectura orientada a servicios proporciona, además, la posibilidad de orquestación de los

servicios, esto es, secuenciación, orden y control de los servicios, añadiendo la lógic

Los elementos básicos que conforman SOA son:

Bus de Servicios Empresariales.

En la siguiente unidad estudiaremos la arquitectura en servicios, servicios web implementa

Algunas implementaciones SOAP también usan WSDL durante la ejecución para soportar

plicaciones en Web Services:

Protocolo SOAP (Simple Object Access Protocol) y Esquema XML (DTD/XSD)

Descripción de interfaces o puntos de acceso a aplicación

WSDL (Web Services Description Language)

Descripción de servicio y descubrimiento

UDDI (Universal Description, Discovery and Integration)

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Analizando Oportunidades con los

designa una tecnología que permite que las aplicaciones se comuniquen en

lenguaje de programación. Un servicio Web es una

interfaz de software que describe un conjunto de operaciones a las cuales se puede acceder por la red

a través de mensajería XML estandarizada. Usa protocolos basados en el lenguaje XML con el objetivo

escribir una operación para ejecutar o datos para intercambiar con otro servicio Web. Un grupo de

servicios Web que interactúa de esa forma define la aplicación de un servicio Web específico en una

la arquitectura orientada a servicios (SOA), ya

que se hace necesaria una forma de comunicación eficiente y escalable, independientemente del

lenguaje de programación y plataforma de cada una de las aplicaciones. Es necesario entonces

utilizados. Un servicio es una función que acepta una llamada y devuelve una respuesta mediante una

interfaz bien definida. La manera en la que un servicio procesa internamente la llamada para producir

La arquitectura orientada a servicios proporciona, además, la posibilidad de orquestación de los

servicios, esto es, secuenciación, orden y control de los servicios, añadiendo la lógica de datos

En la siguiente unidad estudiaremos la arquitectura en servicios, servicios web implementando SOA y el

también usan WSDL durante la ejecución para soportar

Protocolo SOAP (Simple Object Access Protocol) y Esquema XML (DTD/XSD)

Page 4: Java Modulo 8

� Seguridad

o WS-Security, XML Signature y XML Encription (Especificaciones JSR)

Las APIs de Java para los Web Services son las siguientes:

� JDOM

� JAXP: Java API for XML processing

� JAXB: Java API for XML binding

� JAX-RPC: Java API for RPC

� JAXR: Java API for UDDI registry

� SAAJ: SOAP API with Attachements

� JAX-WS: Java API for WebServices

o API de más alto nivel

o Usa todas las demás por debajo

o Permite manejo de WS sin conocimientos de XML, SOAP, etc

Servicios JAX-RS

API de Java que define una infraestructura (clases e interfaces) para implementar una

(paquete javax.ws.rs).

Vamos a visualizar primer que es una arquitectura REST:

REST (Representational State Transfer): Se define como un "estilo arquitectónico" para el

aplicaciones distribuidas.

Características de REST:

� Forma de construir aplicaciones distribuidas.

� Centrada en el concepto de RECURSO

� Mecanismos RPC centrados en concepto de operación

� El estado de los recursos reside en el servidor

� Los clientes acceden al estado de recurso mediante REPRESENTACIONES del mismo transferidas

desde el servidor o desde el cliente empleando el protocolo HTTP como mecanismo de

transporte (podrían emplearse otros, REST no es específico de un protocolo)

� Cada aplicación puede utilizar diferentes formatos para la representación de

o HTML para navegadores web

o XML, JSON para aplicaciones

Para uso exclusivo de los alumnos de CETICSA S.L.

Security, XML Signature y XML Encription (Especificaciones JSR)

Las APIs de Java para los Web Services son las siguientes:

JAXP: Java API for XML processing

JAXB: Java API for XML binding

JAXR: Java API for UDDI registry

SOAP API with Attachements

WS: Java API for WebServices

API de más alto nivel

Usa todas las demás por debajo

Permite manejo de WS sin conocimientos de XML, SOAP, etc

define una infraestructura (clases e interfaces) para implementar una

Vamos a visualizar primer que es una arquitectura REST:

presentational State Transfer): Se define como un "estilo arquitectónico" para el

Forma de construir aplicaciones distribuidas.

Centrada en el concepto de RECURSO

ecanismos RPC centrados en concepto de operación

El estado de los recursos reside en el servidor

es acceden al estado de recurso mediante REPRESENTACIONES del mismo transferidas

desde el servidor o desde el cliente empleando el protocolo HTTP como mecanismo de

transporte (podrían emplearse otros, REST no es específico de un protocolo)

puede utilizar diferentes formatos para la representación de

HTML para navegadores web

XML, JSON para aplicaciones

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Security, XML Signature y XML Encription (Especificaciones JSR)

define una infraestructura (clases e interfaces) para implementar una arquitectura REST

presentational State Transfer): Se define como un "estilo arquitectónico" para el desarrollo de

es acceden al estado de recurso mediante REPRESENTACIONES del mismo transferidas

desde el servidor o desde el cliente empleando el protocolo HTTP como mecanismo de

transporte (podrían emplearse otros, REST no es específico de un protocolo)

puede utilizar diferentes formatos para la representación de los recursos

Page 5: Java Modulo 8

o Con el parámetro Content

datos intercambiados (text/html, applicat

o El cliente puede informar al servidor del tipo de representación que necesita

Accept en cabecera de las peticiones HTTP)

� Los recursos son identificados y están accesibles mediante uno o varios URI (Uniform Resource

Identifier).

� Incluye un conjunto de anotaciones para especificar el mapeo entre las URIs de los recursos y los

métodos HTTP con los métodos Java de una clase de

� Gestiona automáticamente las representaciones

� Emplea JAXB para el tipo MIME application/xml

� Emplea la librería BadgerFish para mapeo de XML a JSON en el caso del

application/json

� La generación y tratamiento de otros tipos de representaciones debe manejarse manualmente

(imágenes, PDF, ...) implementando las interfaces javax.ws.rs.ext.MessageBodyReader,

javax.ws.rs.ext.MessageBodyWriter en

ANOTACIONES JAX-RS

@Path

La clase de implementación de los recursos REST (resource class)

@Path, especificando el path de alto nivel dentro del que se enmarcan las

de implementación (context root).

Pueden anotarse clases Java "normales" o EJBs sin estado.

En el caso de anotar clases "normales" se deberá especificar en el web.xml de la aplicación web el uso

del Servlet de JAX-RS.

En los métodos de dicha clase se puede especificar el path (dentro del path de la

implementación) al que se vinculan los métodos Java.

Podemos asociar nombres a los distintos fragmentos que componen el path

señalados entre los signos {...}.

Podemos especificar los fragmentos de

Anotaciones de métodos http

Especifican el método HTTP al que se vi

servicios web JAX-RS.

@GET

Vincula al método anotado las peticiones HTTP GET dirigidas al path

@PUT

Vincula al método anotado las peticiones HTTP PUT dirigidas al pa

@DELETE

Vincula al método anotado las peticiones HTTP DELETE dirigidas al

@POST

Vincula al método anotado las peticiones HTTP POST dirigidas al path

Para uso exclusivo de los alumnos de CETICSA S.L.

Con el parámetro Content-Type de las cabeceras HTTP se especifica el tipo MIME de los

datos intercambiados (text/html, application/xml, application/json)

El cliente puede informar al servidor del tipo de representación que necesita

Accept en cabecera de las peticiones HTTP)

Los recursos son identificados y están accesibles mediante uno o varios URI (Uniform Resource

Incluye un conjunto de anotaciones para especificar el mapeo entre las URIs de los recursos y los

métodos HTTP con los métodos Java de una clase de implementación (endpoint)

Gestiona automáticamente las representaciones de los recursos intercambi

Emplea JAXB para el tipo MIME application/xml

Emplea la librería BadgerFish para mapeo de XML a JSON en el caso del

La generación y tratamiento de otros tipos de representaciones debe manejarse manualmente

..) implementando las interfaces javax.ws.rs.ext.MessageBodyReader,

javax.ws.rs.ext.MessageBodyWriter en una clase anotada con @jax.ws.rs.ext.Provider.

La clase de implementación de los recursos REST (resource class) debe señalarse con

@Path, especificando el path de alto nivel dentro del que se enmarcan las URIs gestionadas por la clase

Pueden anotarse clases Java "normales" o EJBs sin estado.

ormales" se deberá especificar en el web.xml de la aplicación web el uso

En los métodos de dicha clase se puede especificar el path (dentro del path de la

implementación) al que se vinculan los métodos Java.

a los distintos fragmentos que componen el path

los fragmentos del path empleando expresiones regulares.

Especifican el método HTTP al que se vinculan los métodos Java anotados para compatibilidad con los

ncula al método anotado las peticiones HTTP GET dirigidas al path correspondiente a ese método

incula al método anotado las peticiones HTTP PUT dirigidas al path correspondiente a ese método

incula al método anotado las peticiones HTTP DELETE dirigidas al path correspondiente a ese método

incula al método anotado las peticiones HTTP POST dirigidas al path correspondiente a ese método

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Type de las cabeceras HTTP se especifica el tipo MIME de los

application/json)

El cliente puede informar al servidor del tipo de representación que necesita (parámetro

Los recursos son identificados y están accesibles mediante uno o varios URI (Uniform Resource

Incluye un conjunto de anotaciones para especificar el mapeo entre las URIs de los recursos y los

implementación (endpoint)

de los recursos intercambiados.

tipo MIME

La generación y tratamiento de otros tipos de representaciones debe manejarse manualmente

..) implementando las interfaces javax.ws.rs.ext.MessageBodyReader,

una clase anotada con @jax.ws.rs.ext.Provider.

señalarse con una anotación

URIs gestionadas por la clase

ormales" se deberá especificar en el web.xml de la aplicación web el uso

En los métodos de dicha clase se puede especificar el path (dentro del path de la clase de

a los distintos fragmentos que componen el path, dichos nombres irán

.

para compatibilidad con los

correspondiente a ese método.

correspondiente a ese método.

path correspondiente a ese método.

correspondiente a ese método.

Page 6: Java Modulo 8

Existe otro tipo de servicios web en java que son JAVA

Los estándares principales y tecnologías para construir y habilitar Web services son:

XML

Es el estándar de facto para estructurar datos, contenido y formatos para documentos electrónicos.

Es el lenguaje universal para intercambio de información entre aplicaciones, sistemas y dispositivos sobre

Internet.

SOAP

Es una especificación de un protocolo que define una forma uniforme

XML.

También define una forma de invocar procedimientos remotos (RPC: Remote Procedure Call) usando a

HTTP como el protocolo de comunicación.

SOAP parte de la premisa que no importa si el middleware es simple o complejo,

WAN wrapper (envoltorio).

El envío de mensajes como texto XML plano tiene ventajas en términos de que asegura la

interoperabilidad y en el middleware se acepta el costo del parsing y la serialización XML, para su

visibilidad en todas las redes.

Es un protocolo simple de mensajería XML sobre los protocolos HTTP, SMTP, FTP y otros de Internet. Permite

el intercambio de información entre dos o mas pares y permite que se comuniquen en un ambiente de

aplicación

distribuida.

Es independiente del modelo de objetos de la aplicación, del lenguaje y de la plataforma o dispositivo

sobre el cual corre

Es un protocolo del W3C y de Sun Microsystems, IBM, HP, SAP, Oracle y Microsoft. Estas empresas

participan en el W3C XML protocol-

Usa XML Infosets como formato para los mensajes y sus reglas de codificación para representar datos y

mensajes.

WSDL

Define a los servicios como colecciones de extremos de la red (network

endpoints) o puertos (ports).

Un documento WSDL usa los siguientes elementos en la definición de

Types – un contener de definiciones de tipos de datos usando algún tipo de

Message – una definición abstracta con tipos de los datos que se

Operation – una descripción abstracta de una acción soportada por el

Port Type – un conjunto abstracto de operaciones soportadas por uno o

Binding – un protocolo concreto y especificación de datos para un port type

en particular.

Para uso exclusivo de los alumnos de CETICSA S.L.

ro tipo de servicios web en java que son JAVA-WS y que describiremos en módulos posteriores.

Estándares Principales de Web Services

Los estándares principales y tecnologías para construir y habilitar Web services son:

ructurar datos, contenido y formatos para documentos electrónicos.

Es el lenguaje universal para intercambio de información entre aplicaciones, sistemas y dispositivos sobre

Es una especificación de un protocolo que define una forma uniforme de pasar datos codificados en

También define una forma de invocar procedimientos remotos (RPC: Remote Procedure Call) usando a

HTTP como el protocolo de comunicación.

SOAP parte de la premisa que no importa si el middleware es simple o complejo,

El envío de mensajes como texto XML plano tiene ventajas en términos de que asegura la

interoperabilidad y en el middleware se acepta el costo del parsing y la serialización XML, para su

Es un protocolo simple de mensajería XML sobre los protocolos HTTP, SMTP, FTP y otros de Internet. Permite

el intercambio de información entre dos o mas pares y permite que se comuniquen en un ambiente de

l modelo de objetos de la aplicación, del lenguaje y de la plataforma o dispositivo

Es un protocolo del W3C y de Sun Microsystems, IBM, HP, SAP, Oracle y Microsoft. Estas empresas

-working group. ebXML de UN/CEFACT usa SOAP.

Usa XML Infosets como formato para los mensajes y sus reglas de codificación para representar datos y

Define a los servicios como colecciones de extremos de la red (network

L usa los siguientes elementos en la definición de servicios:

un contener de definiciones de tipos de datos usando algún tipo de sistema (tal como XSD).

una definición abstracta con tipos de los datos que se transmiten.

scripción abstracta de una acción soportada por el servicio

un conjunto abstracto de operaciones soportadas por uno o mas endpoints.

un protocolo concreto y especificación de datos para un port type

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

WS y que describiremos en módulos posteriores.

Estándares Principales de Web Services

Los estándares principales y tecnologías para construir y habilitar Web services son:

ructurar datos, contenido y formatos para documentos electrónicos.

Es el lenguaje universal para intercambio de información entre aplicaciones, sistemas y dispositivos sobre

de pasar datos codificados en

También define una forma de invocar procedimientos remotos (RPC: Remote Procedure Call) usando a

SOAP parte de la premisa que no importa si el middleware es simple o complejo, todos requieren un

El envío de mensajes como texto XML plano tiene ventajas en términos de que asegura la

interoperabilidad y en el middleware se acepta el costo del parsing y la serialización XML, para su

Es un protocolo simple de mensajería XML sobre los protocolos HTTP, SMTP, FTP y otros de Internet. Permite

el intercambio de información entre dos o mas pares y permite que se comuniquen en un ambiente de

l modelo de objetos de la aplicación, del lenguaje y de la plataforma o dispositivo

Es un protocolo del W3C y de Sun Microsystems, IBM, HP, SAP, Oracle y Microsoft. Estas empresas

e UN/CEFACT usa SOAP.

Usa XML Infosets como formato para los mensajes y sus reglas de codificación para representar datos y

sistema (tal como XSD).

mas endpoints.

Page 7: Java Modulo 8

Port – un endpoint en particular, definido como una combinación de un

binding y una dirección de red

Resumiendo, WSDL es una plantilla (template) de cómo se describen servicios y los usan los clientes

UDDI

Provee un mecanismo para que los clientes dinámicamente puedan encon

Usando una interface UDDI, una aplicación comercial se puede conectar dinámicamente con los

servicios provistos por una aplicación comercial externa de otra empresa.

Un UDDI registry tiene dos tipos de clientes:

Aplicaciones comerciales que quieren publicar un servicio y sus interfaces de uso, y clientes que quieren

obtener servicios de un cierto tipo y vincularse

por medio de programas a ellos.

Es una capa superior sobre SOAP y asume que requerimientos y respuestas son objetos UDDI

como mensajes SOAP.

No soporta descubrimiento con todas las opciones (por ejemplo búsquedas limitadas geográficamente

o vinculación y negociación de contratos tipo

eLance).

Se espera que UDDI sea la base para servicios de capas superiores

El UDDI working group incluye a Sun Microsystems,IBM, HP, SAP, Oracle y Microsoft.

ebXML

Define un mercado electrónico global en el cual las empresas se encuentran unas a otras y realizan

operaciones comerciales y transacci

Define un conjunto de especificaciones para empresas para conducir negocios electrónicos sobre

Internet estableciendo un estándar común para

información comercial, colaboración en procesos

acuerdos y mensajería.

Es una iniciativa de United Nations Center for Trade Facilitation and Electronic Business (UN/CEFACT) y la

Organization for the Advancement of Structured Information Standards (OASIS).

Otras organizaciones de estándares como Open Travel Alliance (OTA), Open Application Group, Inc.

(OAGI), Global Commerce Initiative (GCI), Health

Level 7 (HL7, una organización de estándares dedicados a la salud), y RosettaNet (un comité de

estándares XML ) lo han adoptado.

Framework de ebXML

• ebXML Business Process Service Specifications (BPSS).

• ebXML CPP/CPA.

• ebXML Messaging Service Handler (MSH)

• ebXML registry

• ebXML Core components

Para uso exclusivo de los alumnos de CETICSA S.L.

en particular, definido como una combinación de un

Resumiendo, WSDL es una plantilla (template) de cómo se describen servicios y los usan los clientes

Provee un mecanismo para que los clientes dinámicamente puedan encontrar otros web services.

Usando una interface UDDI, una aplicación comercial se puede conectar dinámicamente con los

servicios provistos por una aplicación comercial externa de otra empresa.

Un UDDI registry tiene dos tipos de clientes:

iales que quieren publicar un servicio y sus interfaces de uso, y clientes que quieren

obtener servicios de un cierto tipo y vincularse

Es una capa superior sobre SOAP y asume que requerimientos y respuestas son objetos UDDI

No soporta descubrimiento con todas las opciones (por ejemplo búsquedas limitadas geográficamente

o vinculación y negociación de contratos tipo

Se espera que UDDI sea la base para servicios de capas superiores soportadas por otros estándares.

El UDDI working group incluye a Sun Microsystems,IBM, HP, SAP, Oracle y Microsoft.

Define un mercado electrónico global en el cual las empresas se encuentran unas a otras y realizan

operaciones comerciales y transacciones cooperativamente.

Define un conjunto de especificaciones para empresas para conducir negocios electrónicos sobre

Internet estableciendo un estándar común para especificar procesos de negocio, modelado de

información comercial, colaboración en procesos de negocio, perfiles de colaboración de socios,

Es una iniciativa de United Nations Center for Trade Facilitation and Electronic Business (UN/CEFACT) y la

Organization for the Advancement of Structured Information Standards (OASIS).

Otras organizaciones de estándares como Open Travel Alliance (OTA), Open Application Group, Inc.

(OAGI), Global Commerce Initiative (GCI), Health

Level 7 (HL7, una organización de estándares dedicados a la salud), y RosettaNet (un comité de

ebXML Business Process Service Specifications (BPSS).

ebXML Messaging Service Handler (MSH)

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Resumiendo, WSDL es una plantilla (template) de cómo se describen servicios y los usan los clientes

trar otros web services.

Usando una interface UDDI, una aplicación comercial se puede conectar dinámicamente con los

iales que quieren publicar un servicio y sus interfaces de uso, y clientes que quieren

Es una capa superior sobre SOAP y asume que requerimientos y respuestas son objetos UDDI enviados

No soporta descubrimiento con todas las opciones (por ejemplo búsquedas limitadas geográficamente

soportadas por otros estándares.

El UDDI working group incluye a Sun Microsystems,IBM, HP, SAP, Oracle y Microsoft.

Define un mercado electrónico global en el cual las empresas se encuentran unas a otras y realizan

Define un conjunto de especificaciones para empresas para conducir negocios electrónicos sobre

especificar procesos de negocio, modelado de

de negocio, perfiles de colaboración de socios,

Es una iniciativa de United Nations Center for Trade Facilitation and Electronic Business (UN/CEFACT) y la

Otras organizaciones de estándares como Open Travel Alliance (OTA), Open Application Group, Inc.

Level 7 (HL7, una organización de estándares dedicados a la salud), y RosettaNet (un comité de

Page 8: Java Modulo 8

La Arquitectura Orientada a Servicios

define la utilización de servicios para dar soporte a los requisitos del negocio.

Permite la creación de sistemas altamente escalables que reflejan el negocio de la organización, a su

vez brinda una forma bien definida de exposición e invocación de servicios (comúnmente pero no

exclusivamente servicios web), lo cual facilita la interacción entre diferentes sistemas propios o de

terceros.

SOA define las siguientes capas de software:

Aplicaciones básicas - Sistemas desarrollados bajo cualquier arquitectura o tecnología,

geográficamente dispersos y bajo cualquier figura de propiedad;

De exposición de funcionalidades -

forma de servicios (generalmente como servicios web);

De integración de servicios - Facilitan el intercambio de datos entre elementos de la capa aplicativa

orientada a procesos empresariales internos o en colaboración;

De composición de procesos - Que define el proceso en tér

varía en función del negocio;

De entrega - donde los servicios son desplegados a los usuarios finales.

SOA proporciona una metodología y un marco de trabajo para documentar las capacidades de

negocio y puede dar soporte a las actividades de integración y consolidación.

Los puntos de entrada definidos por

empresa a beneficiarse con la implementación de soluciones SOA predefinidas.

son impulsados por necesidades empresariales (puntos de entrada relacionados con personas, procesos

e información) y necesidades de TI (puntos de entrada relacionados con conectividad y reutilización).

He aquí algunas descripciones generales de los

Para uso exclusivo de los alumnos de CETICSA S.L.

Arquitectura orientada a servicios

La Arquitectura Orientada a Servicios de cliente, es un concepto de arquitectura de software que

define la utilización de servicios para dar soporte a los requisitos del negocio.

Permite la creación de sistemas altamente escalables que reflejan el negocio de la organización, a su

na forma bien definida de exposición e invocación de servicios (comúnmente pero no

), lo cual facilita la interacción entre diferentes sistemas propios o de

SOA define las siguientes capas de software:

Sistemas desarrollados bajo cualquier arquitectura o tecnología,

geográficamente dispersos y bajo cualquier figura de propiedad;

- Donde las funcionalidades de la capa aplicativa son expuestas en

generalmente como servicios web);

Facilitan el intercambio de datos entre elementos de la capa aplicativa

orientada a procesos empresariales internos o en colaboración;

Que define el proceso en términos del negocio y sus necesidades, y que

donde los servicios son desplegados a los usuarios finales.

SOA proporciona una metodología y un marco de trabajo para documentar las capacidades de

soporte a las actividades de integración y consolidación.

Los puntos de entrada definidos por -- basados en experiencias reales de clientes

empresa a beneficiarse con la implementación de soluciones SOA predefinidas.

son impulsados por necesidades empresariales (puntos de entrada relacionados con personas, procesos

e información) y necesidades de TI (puntos de entrada relacionados con conectividad y reutilización).

He aquí algunas descripciones generales de los cinco puntos de entrada:

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Arquitectura orientada a servicios

de cliente, es un concepto de arquitectura de software que

Permite la creación de sistemas altamente escalables que reflejan el negocio de la organización, a su

na forma bien definida de exposición e invocación de servicios (comúnmente pero no

), lo cual facilita la interacción entre diferentes sistemas propios o de

Sistemas desarrollados bajo cualquier arquitectura o tecnología,

Donde las funcionalidades de la capa aplicativa son expuestas en

Facilitan el intercambio de datos entre elementos de la capa aplicativa

minos del negocio y sus necesidades, y que

SOA proporciona una metodología y un marco de trabajo para documentar las capacidades de

basados en experiencias reales de clientes -- pueden ayudar su

empresa a beneficiarse con la implementación de soluciones SOA predefinidas. Esos puntos de entrada

son impulsados por necesidades empresariales (puntos de entrada relacionados con personas, procesos

e información) y necesidades de TI (puntos de entrada relacionados con conectividad y reutilización).

Page 9: Java Modulo 8

Personas: Este punto de entrada a SOA enfoca la experiencia del usuario para ayudar a generar

innovación y más colaboración, lo que posibilita la interacción consistente entre personas y procesos y,

consecuentemente, aumenta la pro

portlets basados en servicios para aumentar esa colaboración.

Procesos: El punto de entrada relacionado con procesos ayuda las compañías a saber qué está

sucediendo en los negocios, lo que le

SOA, puede transformar sus procesos empresariales en servicios reutilizables y flexibles, lo que le permite

mejorar y optimizar los nuevos procesos.

Información: Al usar ese punto de entrad

compañía en forma consistente y visible. Al facilitar informaciones consistentes y confiables a todas las

áreas de la empresa, habilita todas las áreas de la compañía a innovar y, consecuentemente, pu

competir con más eficiencia. Al usar SOA, se tiene un control mejor sobre sus informaciones; al alinear las

informaciones a sus procesos empresariales, puede descubrir relaciones nuevas e interesantes.

Conectividad: Aproveche el punto de entrada relaci

infraestructura con eficiencia, integrando todas las personas, procesos e informaciones de su compañía.

Al tener conexiones flexibles de SOA entre los servicios y en todo el entorno, puede tomar un proceso

empresarial ya existente y ofrecerlo sin mucho esfuerzo a través de otro canal empresarial. Puede

incluso conectarse a socios externos fuera de su firewall en una forma segura.

Reutilización: La reutilización de servicios con SOA permite aprovechar servicios que

compañía. Al basarse en los recursos ya existentes, puede optimizar sus procesos empresariales,

asegurar la consistencia en toda la compañía y reducir el tiempo de desarrollo. Todo ello ahorra tiempo

y dinero. Usted también reduce la dupli

de aprovechar las aplicaciones centrales comprobadas con las cuales el personal de su compañía está

familiarizado.

Propiedades de soa

Algunas de las más importantes propiedades de SOA son:

Orientación a la conversación. El foco de atención no está en los nodos sino en los mensajes que se

intercambian entre los mismos.

Vista Lógica: El servicio es una abstracción (vista lógica) de los programas, bases de datos, procesos de

negocio, etc.

Orientación a Mensajes: El servicio se define formalmente en términos de los mensajes que se

intercambian entre agentes proveedores y solicitantes. Esto posibilita que se incorpore un componente

“decorando” estos componentes con software de gestión y conversión

Abstracción del agente. La estructura interna del agente (lenguaje de programación, BD, etc.) se

abstrae en SOA, un nodo es una entidad computacional que participa en conversaciones con otros

nodos. No es necesario conocer las particularidades del lengua

problemas arquitectónicos derivados de la necesidad de conocer determinados sistemas a nivel

estructural.

Metadatos. SOA se asocian con metadatos, los mismos son descripciones acerca de la forma y tipo de

los elementos que transportan los mensajes, el orden de los mensajes, el significado de los mensajes, etc.

Orientación a la Internet: Los servicios tienden a usarse a través de la red, aunque este no es un requisito

absoluto.

Granularidad: Los servicios tienden a usar u

Para uso exclusivo de los alumnos de CETICSA S.L.

Personas: Este punto de entrada a SOA enfoca la experiencia del usuario para ayudar a generar

innovación y más colaboración, lo que posibilita la interacción consistente entre personas y procesos y,

consecuentemente, aumenta la productividad empresarial. Al usar SOA se puede, por ejemplo, crear

portlets basados en servicios para aumentar esa colaboración.

Procesos: El punto de entrada relacionado con procesos ayuda las compañías a saber qué está

sucediendo en los negocios, lo que les permite mejorar los modelos empresariales ya existentes. Al usar

SOA, puede transformar sus procesos empresariales en servicios reutilizables y flexibles, lo que le permite

mejorar y optimizar los nuevos procesos.

Información: Al usar ese punto de entrada a SOA, puede sacar provecho a las informaciones de su

compañía en forma consistente y visible. Al facilitar informaciones consistentes y confiables a todas las

áreas de la empresa, habilita todas las áreas de la compañía a innovar y, consecuentemente, pu

competir con más eficiencia. Al usar SOA, se tiene un control mejor sobre sus informaciones; al alinear las

informaciones a sus procesos empresariales, puede descubrir relaciones nuevas e interesantes.

Conectividad: Aproveche el punto de entrada relacionado con la conectividad para conectar su

infraestructura con eficiencia, integrando todas las personas, procesos e informaciones de su compañía.

Al tener conexiones flexibles de SOA entre los servicios y en todo el entorno, puede tomar un proceso

rial ya existente y ofrecerlo sin mucho esfuerzo a través de otro canal empresarial. Puede

incluso conectarse a socios externos fuera de su firewall en una forma segura.

Reutilización: La reutilización de servicios con SOA permite aprovechar servicios que

compañía. Al basarse en los recursos ya existentes, puede optimizar sus procesos empresariales,

asegurar la consistencia en toda la compañía y reducir el tiempo de desarrollo. Todo ello ahorra tiempo

y dinero. Usted también reduce la duplicación de funcionalidades en sus servicios y tiene la oportunidad

de aprovechar las aplicaciones centrales comprobadas con las cuales el personal de su compañía está

Algunas de las más importantes propiedades de SOA son:

Orientación a la conversación. El foco de atención no está en los nodos sino en los mensajes que se

Vista Lógica: El servicio es una abstracción (vista lógica) de los programas, bases de datos, procesos de

tación a Mensajes: El servicio se define formalmente en términos de los mensajes que se

intercambian entre agentes proveedores y solicitantes. Esto posibilita que se incorpore un componente

“decorando” estos componentes con software de gestión y conversión.

Abstracción del agente. La estructura interna del agente (lenguaje de programación, BD, etc.) se

abstrae en SOA, un nodo es una entidad computacional que participa en conversaciones con otros

nodos. No es necesario conocer las particularidades del lenguaje de implementación. Esto evita

problemas arquitectónicos derivados de la necesidad de conocer determinados sistemas a nivel

Metadatos. SOA se asocian con metadatos, los mismos son descripciones acerca de la forma y tipo de

transportan los mensajes, el orden de los mensajes, el significado de los mensajes, etc.

Orientación a la Internet: Los servicios tienden a usarse a través de la red, aunque este no es un requisito

Granularidad: Los servicios tienden a usar un pequeño número de operaciones con mensajes complejos.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Personas: Este punto de entrada a SOA enfoca la experiencia del usuario para ayudar a generar

innovación y más colaboración, lo que posibilita la interacción consistente entre personas y procesos y,

ductividad empresarial. Al usar SOA se puede, por ejemplo, crear

Procesos: El punto de entrada relacionado con procesos ayuda las compañías a saber qué está

s permite mejorar los modelos empresariales ya existentes. Al usar

SOA, puede transformar sus procesos empresariales en servicios reutilizables y flexibles, lo que le permite

a a SOA, puede sacar provecho a las informaciones de su

compañía en forma consistente y visible. Al facilitar informaciones consistentes y confiables a todas las

áreas de la empresa, habilita todas las áreas de la compañía a innovar y, consecuentemente, puede

competir con más eficiencia. Al usar SOA, se tiene un control mejor sobre sus informaciones; al alinear las

informaciones a sus procesos empresariales, puede descubrir relaciones nuevas e interesantes.

onado con la conectividad para conectar su

infraestructura con eficiencia, integrando todas las personas, procesos e informaciones de su compañía.

Al tener conexiones flexibles de SOA entre los servicios y en todo el entorno, puede tomar un proceso

rial ya existente y ofrecerlo sin mucho esfuerzo a través de otro canal empresarial. Puede

Reutilización: La reutilización de servicios con SOA permite aprovechar servicios que ya existen en la

compañía. Al basarse en los recursos ya existentes, puede optimizar sus procesos empresariales,

asegurar la consistencia en toda la compañía y reducir el tiempo de desarrollo. Todo ello ahorra tiempo

cación de funcionalidades en sus servicios y tiene la oportunidad

de aprovechar las aplicaciones centrales comprobadas con las cuales el personal de su compañía está

Orientación a la conversación. El foco de atención no está en los nodos sino en los mensajes que se

Vista Lógica: El servicio es una abstracción (vista lógica) de los programas, bases de datos, procesos de

tación a Mensajes: El servicio se define formalmente en términos de los mensajes que se

intercambian entre agentes proveedores y solicitantes. Esto posibilita que se incorpore un componente

Abstracción del agente. La estructura interna del agente (lenguaje de programación, BD, etc.) se

abstrae en SOA, un nodo es una entidad computacional que participa en conversaciones con otros

je de implementación. Esto evita

problemas arquitectónicos derivados de la necesidad de conocer determinados sistemas a nivel

Metadatos. SOA se asocian con metadatos, los mismos son descripciones acerca de la forma y tipo de

transportan los mensajes, el orden de los mensajes, el significado de los mensajes, etc.

Orientación a la Internet: Los servicios tienden a usarse a través de la red, aunque este no es un requisito

n pequeño número de operaciones con mensajes complejos.

Page 10: Java Modulo 8

Neutral a la Plataforma: Los mensajes se envían en un formato estándar y neutral a la plataforma,

utilizando XML

Un sistema distribuido es un conjunto de agentes software que colaboran entre si para

determinada funcionalidad. SOA es un tipo de sistema distribuido ya que los agentes rara vez trabajan

en el mismo entorno, necesitando alguna forma de comunicación entre ellos.

servicios que realizan una operación de

de una gran aplicación.

Desarrollo de servicios web con tecnología java

Un servicio web ofrece una infraestructura independiente de lenguaje y plataforma para comunicación.

Un servicio web tiene las siguientes características:

Independiente de lenguaje y plataforma: Separación de la especificación y la

Implementación.

Desacoplada: Basa en mensajes con interacción síncrona y asíncrona

Sobre una Internet: No existe control centralizado, se usan pro

establecidos y consideraciones de seguridad

Interoperable: Basado en estándares

Aplicación – Aplicación: Internet tradicional es Aplicación

HTTP); esquemas RPC (procedural), ORB y COM (objetos), MOM (mensajes

jms/mq) para aplicación – aplicación dentro de una Internet sin considerar interoperar

con otros sistemas.

Ejemplo de desarrollo web con tecnología java

En este ejemplo resalizaremos un servicio web que devuelva un simple mensaje, el servicio web lo

consumiremos desde una aplicación java, y posteriormente se consumirá a través de una aplicación

web:

Crear un proyecto Web Services con un método que devuelva un String.

Realizar un proyecto cliente que consuma el servicio web.

Para uso exclusivo de los alumnos de CETICSA S.L.

Neutral a la Plataforma: Los mensajes se envían en un formato estándar y neutral a la plataforma,

utilizando XML

Un sistema distribuido es un conjunto de agentes software que colaboran entre si para

SOA es un tipo de sistema distribuido ya que los agentes rara vez trabajan

en el mismo entorno, necesitando alguna forma de comunicación entre ellos.

servicios que realizan una operación determinada y que puede ser invocado desde afuera del contexto

Desarrollo de servicios web con tecnología java

nfraestructura independiente de lenguaje y plataforma para comunicación.

las siguientes características:

Independiente de lenguaje y plataforma: Separación de la especificación y la

Desacoplada: Basa en mensajes con interacción síncrona y asíncrona.

Sobre una Internet: No existe control centralizado, se usan protocolos bien

establecidos y consideraciones de seguridad.

Interoperable: Basado en estándares.

Aplicación: Internet tradicional es Aplicación – Humano (SMTP, FTP,

HTTP); esquemas RPC (procedural), ORB y COM (objetos), MOM (mensajes –

aplicación dentro de una Internet sin considerar interoperar

Ejemplo de desarrollo web con tecnología java

En este ejemplo resalizaremos un servicio web que devuelva un simple mensaje, el servicio web lo

desde una aplicación java, y posteriormente se consumirá a través de una aplicación

Crear un proyecto Web Services con un método que devuelva un String.

Realizar un proyecto cliente que consuma el servicio web.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Neutral a la Plataforma: Los mensajes se envían en un formato estándar y neutral a la plataforma,

utilizando XML

Un sistema distribuido es un conjunto de agentes software que colaboran entre si para implementar una

SOA es un tipo de sistema distribuido ya que los agentes rara vez trabajan

en el mismo entorno, necesitando alguna forma de comunicación entre ellos. En SOA los agentes son

terminada y que puede ser invocado desde afuera del contexto

Desarrollo de servicios web con tecnología java

nfraestructura independiente de lenguaje y plataforma para comunicación.

aplicación dentro de una Internet sin considerar interoperar

En este ejemplo resalizaremos un servicio web que devuelva un simple mensaje, el servicio web lo

desde una aplicación java, y posteriormente se consumirá a través de una aplicación

Page 11: Java Modulo 8

1. Abrir un proyecto de tipo web y llamar

2. Elegir el servidor GlassFish para que posteriormente nos resulte más sencillo enlazarnos al explorar

sitios web.

Para uso exclusivo de los alumnos de CETICSA S.L.

Abrir un proyecto de tipo web y llamarlo WSNombre.

Elegir el servidor GlassFish para que posteriormente nos resulte más sencillo enlazarnos al explorar

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Elegir el servidor GlassFish para que posteriormente nos resulte más sencillo enlazarnos al explorar

Page 12: Java Modulo 8

3. Agregamos un archivo de tipo WebService, le damos un nombre y un paquete donde guardarlo.

Para uso exclusivo de los alumnos de CETICSA S.L.

Agregamos un archivo de tipo WebService, le damos un nombre y un paquete donde guardarlo.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Agregamos un archivo de tipo WebService, le damos un nombre y un paquete donde guardarlo.

Page 13: Java Modulo 8

4. En la pestaña diseño agregamos una nueva operación. Esta opción nos creará un método

público que ofreceremos a los clientes que quieran consumir el servicio.

5. Modificamos el código que nos genera para devolver un mensaje predeterminado.

@WebMethod(operationName = "Nombre")

public String Nombre() {

return "Hola Pepe";

}

EJECUTAR EL PROYECTO PARA QUE GENERE LOS ARCHIVOS NECESARIOS.

6. Creación de un cliente que consuma el servicio. Seleccionamos un proyecto de tipo java

application y le llamaremos ConsumirWSNombre.

Para uso exclusivo de los alumnos de CETICSA S.L.

En la pestaña diseño agregamos una nueva operación. Esta opción nos creará un método

público que ofreceremos a los clientes que quieran consumir el servicio.

Modificamos el código que nos genera para devolver un mensaje predeterminado.

ationName = "Nombre")

EJECUTAR EL PROYECTO PARA QUE GENERE LOS ARCHIVOS NECESARIOS.

Creación de un cliente que consuma el servicio. Seleccionamos un proyecto de tipo java

remos ConsumirWSNombre.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

En la pestaña diseño agregamos una nueva operación. Esta opción nos creará un método

Modificamos el código que nos genera para devolver un mensaje predeterminado.

Creación de un cliente que consuma el servicio. Seleccionamos un proyecto de tipo java

Page 14: Java Modulo 8

7. Agregamos un archivo de tipo Web Service Client.

Para uso exclusivo de los alumnos de CETICSA S.L.

Agregamos un archivo de tipo Web Service Client.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Page 15: Java Modulo 8

8. Pulsamos sobre la opción examinar y elegimos el servicio web recién creado.

9.

10. Pulsamos botón derecho en código sobre la clase que tiene el método main y seleccionamos

insert code y Call Web Service Operation. Por último, elegimos el método nombre.

11. Nos generará el código necesario para invocar al método. Probarlo llamando desde el método

main.

public static void main(String[] args) {

System.out.println(nombre());

}

private static String nombre() {

consumirwsnombre.WebService1Service service = new consumirwsnombre.WebService1Service();

consumirwsnombre.WebService1 port = service.getWebService1Port();

return port.nombre();

}

Para uso exclusivo de los alumnos de CETICSA S.L.

Pulsamos sobre la opción examinar y elegimos el servicio web recién creado.

Pulsamos botón derecho en código sobre la clase que tiene el método main y seleccionamos

insert code y Call Web Service Operation. Por último, elegimos el método nombre.

Nos generará el código necesario para invocar al método. Probarlo llamando desde el método

public static void main(String[] args) {

consumirwsnombre.WebService1Service service = new consumirwsnombre.WebService1Service();

consumirwsnombre.WebService1 port = service.getWebService1Port();

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Pulsamos sobre la opción examinar y elegimos el servicio web recién creado.

Pulsamos botón derecho en código sobre la clase que tiene el método main y seleccionamos

insert code y Call Web Service Operation. Por último, elegimos el método nombre.

Nos generará el código necesario para invocar al método. Probarlo llamando desde el método

consumirwsnombre.WebService1Service service = new consumirwsnombre.WebService1Service();

Page 16: Java Modulo 8

CONSUMIR EL SERVICIO WEB DESDE UN PROYECTO WEB

Crear un proyecto web y en la página jsp insertar el mismo código que nos generó en la aplicación

cliente.

<%@page contentType="text/html" pageEncoding="UTF

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF

<title>JSP Page</title>

</head>

<body>

<% consumirwsnombre.WebService1Service service = new consumirwsnombre.WebService1Service();

consumirwsnombre.WebService1 port = service.getWebService1Port();

%>

<%= port.nombre()%>

</body>

Para uso exclusivo de los alumnos de CETICSA S.L.

CONSUMIR EL SERVICIO WEB DESDE UN PROYECTO WEB

Crear un proyecto web y en la página jsp insertar el mismo código que nos generó en la aplicación

<%@page contentType="text/html" pageEncoding="UTF-8"%>

//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

Type" content="text/html; charset=UTF-8">

consumirwsnombre.WebService1Service service = new consumirwsnombre.WebService1Service();

consumirwsnombre.WebService1 port = service.getWebService1Port();

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Crear un proyecto web y en la página jsp insertar el mismo código que nos generó en la aplicación

consumirwsnombre.WebService1Service service = new consumirwsnombre.WebService1Service();

Page 17: Java Modulo 8

</html>

Resultado:

API Java para Servicios Web

La especificación JAX-WS proporciona soporte para servicios web que utiliza la API JAXB para vincular

datos XML en objetos Java. La especificación JAX

así como técnicas para implementar punt

especificación J2EE describen el despliegue de servicios basados en clientes JAX

EJB y servlet también describe aspectos de ese desarrollo. Esto debe posibilitar el despliegue de

aplicaciones basadas en JAX-WS utilizando cualquiera de estos modelos de despliegue.

La especificación JAX-WS describe el soporte para los manejadores de mensajes que pueden procesar

mensajes de solicitud y respuesta. En general, estos manejadores de mensa

contenedor y con los mismo privilegios y contextos de ejecución que el JAX

componente punto final con el que esta asociado. Estos manejadores de mensajes tienen acceso a el

mismo espacio de nombres JNDI

deserializadores a la medida, si son soportados, son tratados de la misma forma que los manejadores de

mensaje.

Es la implementación por defecto que

La gestión de los documentos XML incluidos en las peticiones y respuestas SOAP se

JAX-WS define su propio conjunto de anotaciones para definir las clases y métodos que actúan como

puntos finales de los mensajes que conforman las invocaciones SOAP para especificar la d

fichero WSDL y del binding SOAP.

La implementación del servicio web puede desplegarse empleando un Servlet

endpoint.

En contenedores que soporten Java EE 6 el despliegue es automático en ambos

aplicación el contenedor inspecciona las clases en busca de las

los mapeos de URL pertinentes.

En contenedores que no son Java EE 6, debe configurarse en el descriptor de despliegue

aplicación (WEB-INF/web.xml) y en el servlet de "escucha" del API JAX

Definición de servicios web con JAX

El único requisito es contar con un interfaz y/o una clase de implementación

@WebService.

Para uso exclusivo de los alumnos de CETICSA S.L.

API Java para Servicios Web

WS proporciona soporte para servicios web que utiliza la API JAXB para vincular

datos XML en objetos Java. La especificación JAX-WS define APIs clientes para acceder a servicios web

así como técnicas para implementar puntos finales de servicios web. Los servicios web para la

especificación J2EE describen el despliegue de servicios basados en clientes JAX

EJB y servlet también describe aspectos de ese desarrollo. Esto debe posibilitar el despliegue de

WS utilizando cualquiera de estos modelos de despliegue.

WS describe el soporte para los manejadores de mensajes que pueden procesar

mensajes de solicitud y respuesta. En general, estos manejadores de mensajes se ejecutan en el mismo

contenedor y con los mismo privilegios y contextos de ejecución que el JAX

componente punto final con el que esta asociado. Estos manejadores de mensajes tienen acceso a el

mismo espacio de nombres JNDI java:comp/env como su componente asociado. Serializadores y

deserializadores a la medida, si son soportados, son tratados de la misma forma que los manejadores de

que se incluye en Java SE 6

XML incluidos en las peticiones y respuestas SOAP se

WS define su propio conjunto de anotaciones para definir las clases y métodos que actúan como

que conforman las invocaciones SOAP para especificar la d

La implementación del servicio web puede desplegarse empleando un Servlet

En contenedores que soporten Java EE 6 el despliegue es automático en ambos

aplicación el contenedor inspecciona las clases en busca de las anotaciones @WebService y establec

Java EE 6, debe configurarse en el descriptor de despliegue

el servlet de "escucha" del API JAX-WS.

Definición de servicios web con JAX-WS

El único requisito es contar con un interfaz y/o una clase de implementación

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

API Java para Servicios Web XML (JAX-WS)

WS proporciona soporte para servicios web que utiliza la API JAXB para vincular

WS define APIs clientes para acceder a servicios web

os finales de servicios web. Los servicios web para la

especificación J2EE describen el despliegue de servicios basados en clientes JAX-WS. La especificación

EJB y servlet también describe aspectos de ese desarrollo. Esto debe posibilitar el despliegue de

WS utilizando cualquiera de estos modelos de despliegue.

WS describe el soporte para los manejadores de mensajes que pueden procesar

jes se ejecutan en el mismo

contenedor y con los mismo privilegios y contextos de ejecución que el JAX-WS cliente o en el

componente punto final con el que esta asociado. Estos manejadores de mensajes tienen acceso a el

como su componente asociado. Serializadores y

deserializadores a la medida, si son soportados, son tratados de la misma forma que los manejadores de

XML incluidos en las peticiones y respuestas SOAP se delegan en JAXB.

WS define su propio conjunto de anotaciones para definir las clases y métodos que actúan como

que conforman las invocaciones SOAP para especificar la definicición del

como endpoint o un EJB

En contenedores que soporten Java EE 6 el despliegue es automático en ambos casos. Al iniciar la

@WebService y establece

Java EE 6, debe configurarse en el descriptor de despliegue de la

El único requisito es contar con un interfaz y/o una clase de implementación anotado con

Page 18: Java Modulo 8

En el caso de EJB endpoints, además deben de estar anotados

sin estado).

La clase de implementación debe ser pública y no puede ser final ni abstract

La clase de implementación debe contar con un constructor vacío

La clase de implementación no puede definir un método finaliz

Debe garantizarse una implementación sin estado

La clase de implementación no puede guardar info

Por defecto, para la clase/interface de implement

mismo nombre de la clase y el sufijo Service

nombre de la clase.

Para cada método público de la clase se generará

del método y dos elementos WSDL message,

para la respuesta (añadiendo al nombre del método el sufijo respose)

Los parámetros y valores de devolución

arrays, Map, List o Collection de los anter

Tipos de Anotaciones JAX-WS

Anotaciones que definen el mapeo WSDL (modifican el comportamiento por defecto):

@WebService:

Señala una clase o interfaz como endpoint de un servicio web

Incluye atributos para modificar el nombre del elemento service,

targetNamespace, serviceName, portName,

@WebMethod

Permite modificar la definición de las operaciones WSDL (atributo

la clase que no se desean exponer

@WebResult

Permite controlar el nombre del elemento message de WSDL que

name).

@WebParam

Permite configurar los elementos parameter de WSDL vinculados

(atributos: name, mode [IN, OU, INOUT],

@OneWay

Permite indicar que un método no tendrá valor de retorno

Existen también anotaciones que definien el binding SOAP de las

@SOAPBinding

Para un método de la clase endpoint especifica el estilo de

document) y el tipo de codificación de los

Atributos: style, use, parameterStyle.

@SOAPMessageHandler

Especifica detalles de la gestión de los mensajes

Para uso exclusivo de los alumnos de CETICSA S.L.

, además deben de estar anotados como @Stateless (los servicios web son

La clase de implementación debe ser pública y no puede ser final ni abstract.

La clase de implementación debe contar con un constructor vacío.

La clase de implementación no puede definir un método finalize().

Debe garantizarse una implementación sin estado.

La clase de implementación no puede guardar información de estado entre llamadas del cliente.

Por defecto, para la clase/interface de implementación se generará un elemento WSDL service con el

el sufijo Service, además se generará un elemento WSDL portType con el

público de la clase se generará un elemento WSDL operation con el mismo nombre

y dos elementos WSDL message, uno para la petición (con el nombre del método) y

para la respuesta (añadiendo al nombre del método el sufijo respose).

devolución deben de ser tipos básicos Java, clases

arrays, Map, List o Collection de los anteriores.

Anotaciones que definen el mapeo WSDL (modifican el comportamiento por defecto):

eñala una clase o interfaz como endpoint de un servicio web.

ncluye atributos para modificar el nombre del elemento service, portType, el name space, etc (name,

amespace, serviceName, portName, wsdlLocation, endpointInterface)

ermite modificar la definición de las operaciones WSDL (atributo operationName) o excluir métodos de

como operaciones del web service (con el atributo exclude=true)

ermite controlar el nombre del elemento message de WSDL que contendrá el valor de retorno (atributo

ermite configurar los elementos parameter de WSDL vinculados a los parámetros de una operación

(atributos: name, mode [IN, OU, INOUT], targetNamespace, header, partName)

ermite indicar que un método no tendrá valor de retorno.

notaciones que definien el binding SOAP de las operaciones y lo

ara un método de la clase endpoint especifica el estilo de codificación de los mensajes (RPC vs.

document) y el tipo de codificación de los parámetros a usar (encoded vs.literal).

Atributos: style, use, parameterStyle.

specifica detalles de la gestión de los mensajes (petición y respuesta).

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

@Stateless (los servicios web son

ado entre llamadas del cliente.

se generará un elemento WSDL service con el

se generará un elemento WSDL portType con el

un elemento WSDL operation con el mismo nombre

a petición (con el nombre del método) y otro

deben de ser tipos básicos Java, clases anotadas con JAXB,

Anotaciones que definen el mapeo WSDL (modifican el comportamiento por defecto):

name space, etc (name,

operationName) o excluir métodos de

operaciones del web service (con el atributo exclude=true).

contendrá el valor de retorno (atributo

los parámetros de una operación

operaciones y los métodos:

codificación de los mensajes (RPC vs.

parámetros a usar (encoded vs.literal).

Page 19: Java Modulo 8

Atributos: name, className, initParams, roles, heards

En el siguiente ejemplo consumiremos el servicio web que devuelve el tiempo meteorológico

Servicio web tiempo meteorológico

Crear una aplicación java que utilice el servicio web que nos devuelve la previsión meteorológica en

tiempo real.

Utilizar los dos métodos del servicio web.

Agregamos el archivo de tipo Web Service Client a nuestro proyecto de tipo java

Para uso exclusivo de los alumnos de CETICSA S.L.

Atributos: name, className, initParams, roles, heards

En el siguiente ejemplo consumiremos el servicio web que devuelve el tiempo meteorológico

po meteorológico

aplicación java que utilice el servicio web que nos devuelve la previsión meteorológica en

Utilizar los dos métodos del servicio web.

Agregamos el archivo de tipo Web Service Client a nuestro proyecto de tipo java

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

En el siguiente ejemplo consumiremos el servicio web que devuelve el tiempo meteorológico

aplicación java que utilice el servicio web que nos devuelve la previsión meteorológica en

Agregamos el archivo de tipo Web Service Client a nuestro proyecto de tipo java application.

Page 20: Java Modulo 8

Referencia al servicio web:

http://www.webservicex.net/globalweather.asmx?WSDL

Probamos el servicio recién referenciado.

public static void main(String[] args) {

String tiempo=getWeather("MADRID","SPAIN");

System.out.println(tiempo);

}

private static String getCitiesByCountry(java.lang.String countryName) {

MisServicios.GlobalWeather service = new MisServicios.GlobalWeather();

MisServicios.GlobalWeatherSoap port = service.getGlobalWeatherSoap();

return port.getCitiesByCountry(countryName);

}

private static String getWeather(java.lang.String cityName, java.lang.String countryName) {

MisServicios.GlobalWeather service = new MisServicios.GlobalWeather();

MisServicios.GlobalWeatherSoap port = service.getGlobalWeatherSoap();

return port.getWeather(cityName, countryName);

}

Ver Video:

en el Módulo 8. Unidad 1, en la plataforma elearning

Para uso exclusivo de los alumnos de CETICSA S.L.

http://www.webservicex.net/globalweather.asmx?WSDL

Probamos el servicio recién referenciado.

public static void main(String[] args) {

String tiempo=getWeather("MADRID","SPAIN");

private static String getCitiesByCountry(java.lang.String countryName) {

MisServicios.GlobalWeather service = new MisServicios.GlobalWeather();

MisServicios.GlobalWeatherSoap port = service.getGlobalWeatherSoap();

return port.getCitiesByCountry(countryName);

private static String getWeather(java.lang.String cityName, java.lang.String countryName) {

MisServicios.GlobalWeather service = new MisServicios.GlobalWeather();

.GlobalWeatherSoap port = service.getGlobalWeatherSoap();

return port.getWeather(cityName, countryName);

Video: Analizando ServiciosWeb,

en el Módulo 8. Unidad 1, en la plataforma elearning

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

private static String getWeather(java.lang.String cityName, java.lang.String countryName) {

en el Módulo 8. Unidad 1, en la plataforma elearning

Page 21: Java Modulo 8

Objetivo

Consumir un proyecto Web Service de ASP.Net desde una aplicación Java.

Enunciado

SERVICIO WEB MONEDAS ASP.NET

- Realizar un Servicio Web con ASP.NET cuya funcionalidad será convertir Monedas.

- Podremos convertir entre diversas monedas a euros y

- Las Monedas que vamos a convertir son:

� DOLAR = 1,26201 Euros

� PESOS = 14,4762 Euros

� RUPIAS = 75,6061 Euros

� YENES = 135,861 Euros

� PESETAS = 166,386 Euros

SERVICIO WEB MONEDAS

1. Crear un servicio web con Visual Studio .Net con el

public double[] valores = new double[] { 1.26201, 14.4762, 75.6061, 135.861, 166.386 };

[WebMethod]

public double convertirMonedaEuro(double valor, int indice)

{

return (valor * valores[indice]);

}

[WebMethod]

public double convertirEuroMoneda(double valor, int indice)

{

return (valor / valores[indice]);

}

2. Ejecutar el servicio.

Para uso exclusivo de los alumnos de CETICSA S.L.

Laboratorio: Analizando ServiciosWeb

Consumir un proyecto Web Service de ASP.Net desde una aplicación Java.

Realizar un Servicio Web con ASP.NET cuya funcionalidad será convertir Monedas.

Podremos convertir entre diversas monedas a euros y viceversa, de euros a monedas.

Las Monedas que vamos a convertir son:

DOLAR = 1,26201 Euros

PESOS = 14,4762 Euros

RUPIAS = 75,6061 Euros

YENES = 135,861 Euros

PESETAS = 166,386 Euros

Crear un servicio web con Visual Studio .Net con el código siguiente:

public double[] valores = new double[] { 1.26201, 14.4762, 75.6061, 135.861, 166.386 };

public double convertirMonedaEuro(double valor, int indice)

public double convertirEuroMoneda(double valor, int indice)

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Laboratorio: Analizando ServiciosWeb

Realizar un Servicio Web con ASP.NET cuya funcionalidad será convertir Monedas.

viceversa, de euros a monedas.

public double[] valores = new double[] { 1.26201, 14.4762, 75.6061, 135.861, 166.386 };

Page 22: Java Modulo 8

EJEMPLO PRUEBA CONVERSIÓN DE MONEDAS

1. Crear un proyecto en NetBeans de tipo java application y agregar un

Client.

2. Enlazarnos al servicio web recién creado.

http://localhost:2920/ServicioConvertirMonedas/Service.asmx?WSDL

public static void main(String[] args)

{

double resultado = convertirMonedaEuro(121,2);

System.out.println(resultado);

}

private static Double convertirMonedaEuro(double valor, int indice) {

ConsumirWS.NewWebServiceService service = new ConsumirWS.NewWebServiceService();

ConsumirWS.NewWebService port = service.getNewWebServicePort();

return port.convertirMonedaEuro(valor, indice);

}

Para uso exclusivo de los alumnos de CETICSA S.L.

EJEMPLO PRUEBA CONVERSIÓN DE MONEDAS

Crear un proyecto en NetBeans de tipo java application y agregar un archivo de tipo WebService

Enlazarnos al servicio web recién creado. Colocamos la dirección del servicio seguido de WSDL.

http://localhost:2920/ServicioConvertirMonedas/Service.asmx?WSDL

public static void main(String[] args)

resultado = convertirMonedaEuro(121,2);

private static Double convertirMonedaEuro(double valor, int indice) {

ConsumirWS.NewWebServiceService service = new ConsumirWS.NewWebServiceService();

ConsumirWS.NewWebService port = service.getNewWebServicePort();

return port.convertirMonedaEuro(valor, indice);

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

archivo de tipo WebService

Colocamos la dirección del servicio seguido de WSDL.

ConsumirWS.NewWebServiceService service = new ConsumirWS.NewWebServiceService();

Page 23: Java Modulo 8

Unidad 2: Diseñando Buenas Prácticas y Patrones para los Servicios Web

Objetivos

� Comprender los patrones de diseño en el contexto de los servicios web.

� Describir los patrones de diseño basados en servicios web.

� Implemetar patrones de diseño.

Introducción

Un Patrón de Diseño (design pattern) es una solución repetible a un problema recurrente en

software. Esta solución no es un diseño terminado que puede traducirse directamente a código, sino

más bien una descripción sobre cómo resolver el problema, la cual puede ser utilizada en diversas

situaciones. Los patrones de diseño reflejan

han ido haciendo a medida que intentaban conseguir mayor reutilización y flexibilidad en su software.

Los patrones documentan y explican problemas de diseño, y luego discuten una buena solución a

dicho problema. Con el tiempo, los patrones comienzan a incorporarse al conocimiento y experiencia

colectiva de la industria del software, lo que demuestra que el origen de los mismos radica en la

práctica misma más que en la teoría. La definición de Christo

patrón describe un problema que ocurre una y otra vez en nuestro entorno, así como la solución a ese

problema, de tal modo que se pueda aplicar esta solución un millón de veces, sin hacer lo mismo dos

veces”. Si bien ésta definición es sobre patrones de ciudades y edificios la idea es aplicable a la

industria del software: encontrar una solución a un problema dentro de un contexto. Un patrón de

diseño nomina, abstrae e identifica los aspectos clave de una estructura de d

hace útiles para crear un diseño orientado a objetos reutilizable. El patrón de diseño identifica las clases

e instancias participantes, sus roles y colaboraciones, y la distribución de responsabilidades. Cada

patrón de diseño se centra en un problema concreto, describiendo cuándo aplicarlo y si tiene sentido

hacerlo teniendo en cuenta otras restricciones de diseño, así como las consecuencias, ventajas e

inconvenientes de su uso. En los últimos años los patrones han ido ganando acept

extendiendo a otras áreas dentro del desarrollo y mantenimiento de software. Su utilización, si bien

todavía le queda mucho camino por recorrer, comienza a tener suficiente madurez. Los patrones de

diseño proveen una forma efectiva para

de software orientado a objetos.

El término “patrón de diseño” no es extremadamente preciso pero sí muy útil. En la forma en la que se

suele entender actualmente fue acuñado en Gamma y col.(1994), im

designar abreviadamente como GoF1. Por la manera en que se emplea este concepto en esta

referencia básica y en la mayoría de usos posteriores, se refiere a una manera especialmente inteligente

y perspicaz de resolver un tipo general de problema.

A pesar de constar el término “diseño” no se suele considerar que se refiera únicamente a la fase de

diseño de un programa, es una solución completa que incluye análisis, diseño e implementación. Un

“patrón de diseño” no se consider

código en algún lenguaje, pero claramente no es una convención o receta “idiomática”, ligada a un

lenguaje concreto, como podría la relacionada con “cómo recorrer de forma eficiente un vector e

empleando aritmética de punteros”, por poner un ejemplo. Sin embargo, en GoF se remarca que un

patrón puede serlo, tener sentido identificarlo como tal o no, dependiendo del lenguaje utilizado. En el

lenguaje de implementación elegido en GoF, C++, un p

implícito en el propio lenguaje) mientras que sería una solución general muy adecuada a numerosos

Para uso exclusivo de los alumnos de CETICSA S.L.

Diseñando Buenas Prácticas y Patrones para los Servicios Web

los patrones de diseño en el contexto de los servicios web.

Describir los patrones de diseño basados en servicios web.

Implemetar patrones de diseño.

Un Patrón de Diseño (design pattern) es una solución repetible a un problema recurrente en

software. Esta solución no es un diseño terminado que puede traducirse directamente a código, sino

más bien una descripción sobre cómo resolver el problema, la cual puede ser utilizada en diversas

situaciones. Los patrones de diseño reflejan todo el rediseño y remodificación que los desarrolladores

han ido haciendo a medida que intentaban conseguir mayor reutilización y flexibilidad en su software.

Los patrones documentan y explican problemas de diseño, y luego discuten una buena solución a

cho problema. Con el tiempo, los patrones comienzan a incorporarse al conocimiento y experiencia

colectiva de la industria del software, lo que demuestra que el origen de los mismos radica en la

práctica misma más que en la teoría. La definición de Christopher Alexander sobre patrones: “cada

patrón describe un problema que ocurre una y otra vez en nuestro entorno, así como la solución a ese

problema, de tal modo que se pueda aplicar esta solución un millón de veces, sin hacer lo mismo dos

ta definición es sobre patrones de ciudades y edificios la idea es aplicable a la

industria del software: encontrar una solución a un problema dentro de un contexto. Un patrón de

diseño nomina, abstrae e identifica los aspectos clave de una estructura de d

hace útiles para crear un diseño orientado a objetos reutilizable. El patrón de diseño identifica las clases

e instancias participantes, sus roles y colaboraciones, y la distribución de responsabilidades. Cada

ntra en un problema concreto, describiendo cuándo aplicarlo y si tiene sentido

hacerlo teniendo en cuenta otras restricciones de diseño, así como las consecuencias, ventajas e

inconvenientes de su uso. En los últimos años los patrones han ido ganando acept

extendiendo a otras áreas dentro del desarrollo y mantenimiento de software. Su utilización, si bien

todavía le queda mucho camino por recorrer, comienza a tener suficiente madurez. Los patrones de

diseño proveen una forma efectiva para compartir experiencia con la comunidad de programadores

El término “patrón de diseño” no es extremadamente preciso pero sí muy útil. En la forma en la que se

suele entender actualmente fue acuñado en Gamma y col.(1994), importante referencia que se suele

designar abreviadamente como GoF1. Por la manera en que se emplea este concepto en esta

referencia básica y en la mayoría de usos posteriores, se refiere a una manera especialmente inteligente

o general de problema.

A pesar de constar el término “diseño” no se suele considerar que se refiera únicamente a la fase de

diseño de un programa, es una solución completa que incluye análisis, diseño e implementación. Un

“patrón de diseño” no se considera bien especificado hasta que se ha podido plasmar en forma de

código en algún lenguaje, pero claramente no es una convención o receta “idiomática”, ligada a un

lenguaje concreto, como podría la relacionada con “cómo recorrer de forma eficiente un vector e

empleando aritmética de punteros”, por poner un ejemplo. Sin embargo, en GoF se remarca que un

patrón puede serlo, tener sentido identificarlo como tal o no, dependiendo del lenguaje utilizado. En el

lenguaje de implementación elegido en GoF, C++, un patrón como “herencia” no tiene sentido (ya está

implícito en el propio lenguaje) mientras que sería una solución general muy adecuada a numerosos

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Diseñando Buenas Prácticas y Patrones

Un Patrón de Diseño (design pattern) es una solución repetible a un problema recurrente en el diseño de

software. Esta solución no es un diseño terminado que puede traducirse directamente a código, sino

más bien una descripción sobre cómo resolver el problema, la cual puede ser utilizada en diversas

todo el rediseño y remodificación que los desarrolladores

han ido haciendo a medida que intentaban conseguir mayor reutilización y flexibilidad en su software.

Los patrones documentan y explican problemas de diseño, y luego discuten una buena solución a

cho problema. Con el tiempo, los patrones comienzan a incorporarse al conocimiento y experiencia

colectiva de la industria del software, lo que demuestra que el origen de los mismos radica en la

pher Alexander sobre patrones: “cada

patrón describe un problema que ocurre una y otra vez en nuestro entorno, así como la solución a ese

problema, de tal modo que se pueda aplicar esta solución un millón de veces, sin hacer lo mismo dos

ta definición es sobre patrones de ciudades y edificios la idea es aplicable a la

industria del software: encontrar una solución a un problema dentro de un contexto. Un patrón de

diseño nomina, abstrae e identifica los aspectos clave de una estructura de diseño común, lo que los

hace útiles para crear un diseño orientado a objetos reutilizable. El patrón de diseño identifica las clases

e instancias participantes, sus roles y colaboraciones, y la distribución de responsabilidades. Cada

ntra en un problema concreto, describiendo cuándo aplicarlo y si tiene sentido

hacerlo teniendo en cuenta otras restricciones de diseño, así como las consecuencias, ventajas e

inconvenientes de su uso. En los últimos años los patrones han ido ganando aceptación, y se fueron

extendiendo a otras áreas dentro del desarrollo y mantenimiento de software. Su utilización, si bien

todavía le queda mucho camino por recorrer, comienza a tener suficiente madurez. Los patrones de

compartir experiencia con la comunidad de programadores

El término “patrón de diseño” no es extremadamente preciso pero sí muy útil. En la forma en la que se

portante referencia que se suele

designar abreviadamente como GoF1. Por la manera en que se emplea este concepto en esta

referencia básica y en la mayoría de usos posteriores, se refiere a una manera especialmente inteligente

A pesar de constar el término “diseño” no se suele considerar que se refiera únicamente a la fase de

diseño de un programa, es una solución completa que incluye análisis, diseño e implementación. Un

a bien especificado hasta que se ha podido plasmar en forma de

código en algún lenguaje, pero claramente no es una convención o receta “idiomática”, ligada a un

lenguaje concreto, como podría la relacionada con “cómo recorrer de forma eficiente un vector en C

empleando aritmética de punteros”, por poner un ejemplo. Sin embargo, en GoF se remarca que un

patrón puede serlo, tener sentido identificarlo como tal o no, dependiendo del lenguaje utilizado. En el

atrón como “herencia” no tiene sentido (ya está

implícito en el propio lenguaje) mientras que sería una solución general muy adecuada a numerosos

Page 24: Java Modulo 8

problemas si el lenguaje de implementación fuese C, por ejemplo. Tampoco hay que confundir “patrón

de diseño” con un algoritmo adecuado para resolver un tipo concreto de problema

se tendría que implementar de forma distinta según el lenguaje. Un patrón de diseño debe ser una

especificación muy general, una especie de invariante que se cumple en

diversos y que define una solución general y muy estable.

Los desarrolladores de software han aprendido a reutilizar código y de esa manera tendrán su marco de

trabajo básico para usar cuando se enfrenten a problemas de similares carac

formas de solucionar estos problemas de manera eficiente y efectiva es la utilización de los Patrones de

Diseño. Una notación práctica y aceptada para la especificación, visualización, construcción y

documentación de sistemas de soft

diagramas que facilitan el desarrollo y comunicación de un proyecto de software. . Dado que UML es

un lenguaje que permite ser extendido y que los Patrones de Diseño aportan buenas soluciones a

problemas recurrentes, este Trabajo Final tiene como objetivo extender UML e incorporarle el uso de

Patrones de Diseño para ampliar las potencialidades de este lenguaje y brindar al desarrollador de

software la posibilidad de incorporar Patrones de Diseño en su

Actualmente, los patrones de diseño son, sin duda, alguna la herramienta más importante de la que

disponemos los ingenieros, arquitectos, analistas, desarrolladores, etc., para la creación de sistemas

robustos, escalables, fácilmente adaptabl

miles de líneas sobre las ventajas de los patrones de diseño, pero sin embargo, pocos han sido los análisis

de los problemas asociados a su uso.

Son una forma de formalizar la reusabilidad de

plantean como una buena herramienta para el diseño y la documentación de aplicaciones y

frameworks. . Son descripciones de objetos y clases que se comunican y que son capaces de solucionar

un problema de diseño en general, en un contexto en particular. . "Cada patrón describe un problema

que ocurre una y otra vez en nuestro entorno, para describir después el núcleo de la solución a ese

problema, de tal manera que esa solución pueda ser usada más de

siquiera dos veces de la misma forma". (Alexander Christopher)

Proponen una forma de reutilizar la experiencia de los programadores. Contribuyen a dar flexibilidad y

extensibilidad a los diseños. Contribuyen a reutiliza

estructura de un diseño que puede ser aplicado en una gran cantidad de situaciones. Mejoran

(aumentan, elevan) la flexibilidad, modularidad y extensibilidad.. Incrementan el vocabulario de diseño,

ayudando a diseñar desde un mayor nivel de abstracción.

Elementos:

� Nombre: resume la esencia del patrón. .

� Clasificación: según el propósito

responde a ¿Qué hace el patrón? .

� Contexto: ejemplo que ilustra el problema y cómo se estructuran clases y objetos para

solucionarlo. .

� Aplicabilidad: situaciones en las que puede aplicarse el patrón. .

� Estructura: representación gráfica de las clases que intervienen y sus relaciones. . Participan

clases, objetos y responsabilidades. .

� Consecuencias: resultados y cambios al usar el patrón. .

� Diagrama de Ejemplo: diagrama del modelo del usuario que usa el/los estereotipo/s que

forma/n el patrón y en el que se cumplen las Reglas OCL.

Clasificación:

Según el Propósito: ¿Qué hacen?

Para uso exclusivo de los alumnos de CETICSA S.L.

problemas si el lenguaje de implementación fuese C, por ejemplo. Tampoco hay que confundir “patrón

con un algoritmo adecuado para resolver un tipo concreto de problema

se tendría que implementar de forma distinta según el lenguaje. Un patrón de diseño debe ser una

especificación muy general, una especie de invariante que se cumple en

diversos y que define una solución general y muy estable.

Los desarrolladores de software han aprendido a reutilizar código y de esa manera tendrán su marco de

trabajo básico para usar cuando se enfrenten a problemas de similares carac

formas de solucionar estos problemas de manera eficiente y efectiva es la utilización de los Patrones de

Diseño. Una notación práctica y aceptada para la especificación, visualización, construcción y

documentación de sistemas de software es UML que permite la construcción de una serie de

diagramas que facilitan el desarrollo y comunicación de un proyecto de software. . Dado que UML es

un lenguaje que permite ser extendido y que los Patrones de Diseño aportan buenas soluciones a

emas recurrentes, este Trabajo Final tiene como objetivo extender UML e incorporarle el uso de

Patrones de Diseño para ampliar las potencialidades de este lenguaje y brindar al desarrollador de

software la posibilidad de incorporar Patrones de Diseño en sus proyectos.

Actualmente, los patrones de diseño son, sin duda, alguna la herramienta más importante de la que

disponemos los ingenieros, arquitectos, analistas, desarrolladores, etc., para la creación de sistemas

robustos, escalables, fácilmente adaptables y con grandes cotas de reutilización. Se han escrito miles y

miles de líneas sobre las ventajas de los patrones de diseño, pero sin embargo, pocos han sido los análisis

de los problemas asociados a su uso.

Son una forma de formalizar la reusabilidad de código ante situaciones similares a las ya conocidas. . Se

plantean como una buena herramienta para el diseño y la documentación de aplicaciones y

frameworks. . Son descripciones de objetos y clases que se comunican y que son capaces de solucionar

lema de diseño en general, en un contexto en particular. . "Cada patrón describe un problema

que ocurre una y otra vez en nuestro entorno, para describir después el núcleo de la solución a ese

problema, de tal manera que esa solución pueda ser usada más de un millón de veces sin hacerlo ni

siquiera dos veces de la misma forma". (Alexander Christopher)

Proponen una forma de reutilizar la experiencia de los programadores. Contribuyen a dar flexibilidad y

extensibilidad a los diseños. Contribuyen a reutilizar diseño, identificando aspectos claves de la

estructura de un diseño que puede ser aplicado en una gran cantidad de situaciones. Mejoran

(aumentan, elevan) la flexibilidad, modularidad y extensibilidad.. Incrementan el vocabulario de diseño,

señar desde un mayor nivel de abstracción.

resume la esencia del patrón. .

según el propósito - ¿Qué hacen? - y el alcance - ¿Dónde se aplican?

responde a ¿Qué hace el patrón? .

ejemplo que ilustra el problema y cómo se estructuran clases y objetos para

situaciones en las que puede aplicarse el patrón. .

representación gráfica de las clases que intervienen y sus relaciones. . Participan

clases, objetos y responsabilidades. .

resultados y cambios al usar el patrón. .

: diagrama del modelo del usuario que usa el/los estereotipo/s que

forma/n el patrón y en el que se cumplen las Reglas OCL.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

problemas si el lenguaje de implementación fuese C, por ejemplo. Tampoco hay que confundir “patrón

con un algoritmo adecuado para resolver un tipo concreto de problema –que, lógicamente,

se tendría que implementar de forma distinta según el lenguaje. Un patrón de diseño debe ser una

especificación muy general, una especie de invariante que se cumple en problemas de ámbitos

Los desarrolladores de software han aprendido a reutilizar código y de esa manera tendrán su marco de

trabajo básico para usar cuando se enfrenten a problemas de similares características. Una de las

formas de solucionar estos problemas de manera eficiente y efectiva es la utilización de los Patrones de

Diseño. Una notación práctica y aceptada para la especificación, visualización, construcción y

ware es UML que permite la construcción de una serie de

diagramas que facilitan el desarrollo y comunicación de un proyecto de software. . Dado que UML es

un lenguaje que permite ser extendido y que los Patrones de Diseño aportan buenas soluciones a

emas recurrentes, este Trabajo Final tiene como objetivo extender UML e incorporarle el uso de

Patrones de Diseño para ampliar las potencialidades de este lenguaje y brindar al desarrollador de

Actualmente, los patrones de diseño son, sin duda, alguna la herramienta más importante de la que

disponemos los ingenieros, arquitectos, analistas, desarrolladores, etc., para la creación de sistemas

es y con grandes cotas de reutilización. Se han escrito miles y

miles de líneas sobre las ventajas de los patrones de diseño, pero sin embargo, pocos han sido los análisis

código ante situaciones similares a las ya conocidas. . Se

plantean como una buena herramienta para el diseño y la documentación de aplicaciones y

frameworks. . Son descripciones de objetos y clases que se comunican y que son capaces de solucionar

lema de diseño en general, en un contexto en particular. . "Cada patrón describe un problema

que ocurre una y otra vez en nuestro entorno, para describir después el núcleo de la solución a ese

un millón de veces sin hacerlo ni

Proponen una forma de reutilizar la experiencia de los programadores. Contribuyen a dar flexibilidad y

r diseño, identificando aspectos claves de la

estructura de un diseño que puede ser aplicado en una gran cantidad de situaciones. Mejoran

(aumentan, elevan) la flexibilidad, modularidad y extensibilidad.. Incrementan el vocabulario de diseño,

¿Dónde se aplican? - . Sinopsis:

ejemplo que ilustra el problema y cómo se estructuran clases y objetos para

representación gráfica de las clases que intervienen y sus relaciones. . Participantes:

: diagrama del modelo del usuario que usa el/los estereotipo/s que

Page 25: Java Modulo 8

� . Creacionales: relacionados con el proceso de creación de objetos.

� . de Comportamiento: relacionados con la interacción de clases y objetos y la distribución de

responsabilidades.

� . Estructurales: relacionados con l

� Según el Alcance: ¿Dónde se aplican?

� . Clase: tratan la relación entre subclases a través de herencia.

� . Objeto: tratan la relación entre objetos que cambian en tiempo de ejecución.

Diseñar una arquitectura basada en patr

beneficios, pero prácticamente imposible sin un estudio previo del dominio del problema que estamos

tratando. El uso de lenguajes de modelado como UML nos ayuda a ver mejor las propiedades del

sistema que estamos diseñando y harán aparecer relaciones entre los componentes que a primera vista

eran difusas o que simplemente no habíamos visto. El mero hecho de utilizar patrones de diseño y

comenzar a realizar su implementación sin tener en cuenta el domi

gravísimo y degenera en la práctica de ir esparciendo patrones por las diferentes partes de un proyecto

sin ningún criterio general.

Estos patrones no representarán ningún concepto de nuestro dominio, probablemente no re

ningún significado a alguien que no esté familiarizado con nuestro proyecto, y dificultarán

notablemente la extensibilidad de nuestro proyecto obligando a una refactorización continua. Antes de

abordar un proyecto con patrones hemos de analizar mi

útiles, cuáles son las relaciones entre los diferentes componentes de nuestro sistema, cómo podemos

relacionar los patrones entre sí de modo que formen una estructura sólida, cuáles son los patrones que

refleja nuestro dominio, etc. Esta tarea obviamente es mucho más compleja que el mero hecho de

ponerse a codificar patrones.

Existen cientos y cientos de patrones que han ido apareciendo con el tiempo y que se han convertido

en soluciones estándar para diferentes pro

que podemos encontrar patrones de arquitectura, de economía, etc. Así que la clave de todo es la

experiencia puede que hayamos realizado un análisis fantástico y que hayamos estudiado los patro

más avanzados en el ámbito que estamos afrontando, sin embargo, sin la experiencia adecuada

nuestro proyecto fracasará.

Sea como sea, la experiencia se adquiere con el tiempo y a base de tropiezos. Seguramente nuestros

primeros proyectos no queden como

demos cuenta de que podríamos haber utilizado otros métodos para abordar de un modo más

eficiente los problemas con los que nos habíamos enfrentado.

La primera regla de los patrones de diseño coi

Del mismo modo que no es aconsejable optimizar prematuramente, no se deben utilizar patrones de

diseño antes de tiempo. Seguramente sea mejor implementar algo primero y asegurarse de que

funciona, para luego utilizar el patrón de diseño para mejorar las flaquezas; esto es cierto, sobre todo,

cuando aún no ha identificado todos los detalles del proyecto (si comprende totalmente el dominio y el

problema, tal vez sea razonable utilizar patrones desde el

utilizar los algoritmos más eficientes desde el comienzo en algunas aplicaciones).

Los patrones de diseño pueden incrementar o disminuir la capacidad de comprensión de un diseño o

de una implementación, disminuirla al añadir accesos indirectos o aumentar la cantidad de código,

disminuirla al regular la modularidad, separar mejor los conceptos y simplificar la descripción. Una vez

que aprenda el vocabulario de los patrones de diseño le será más fácil y más rápido c

otros individuos que también lo conozcan. Por que atraviesa una estructura y realiza llamadas de

retorno, en tanto que algunos métodos deben estar presentes y son llamados de este modo y en este

orden”.

La mayoría de las personas utiliza pa

algo que debería resultar sencillo no lo es

Para uso exclusivo de los alumnos de CETICSA S.L.

. Creacionales: relacionados con el proceso de creación de objetos.

. de Comportamiento: relacionados con la interacción de clases y objetos y la distribución de

. Estructurales: relacionados con la composición de clases y objetos.

: ¿Dónde se aplican?

. Clase: tratan la relación entre subclases a través de herencia.

. Objeto: tratan la relación entre objetos que cambian en tiempo de ejecución.

Diseñar una arquitectura basada en patrones de diseño es una tarea compleja, que reporta muchos

beneficios, pero prácticamente imposible sin un estudio previo del dominio del problema que estamos

tratando. El uso de lenguajes de modelado como UML nos ayuda a ver mejor las propiedades del

a que estamos diseñando y harán aparecer relaciones entre los componentes que a primera vista

eran difusas o que simplemente no habíamos visto. El mero hecho de utilizar patrones de diseño y

comenzar a realizar su implementación sin tener en cuenta el dominio de nuestro modelo, es un error

gravísimo y degenera en la práctica de ir esparciendo patrones por las diferentes partes de un proyecto

Estos patrones no representarán ningún concepto de nuestro dominio, probablemente no re

ningún significado a alguien que no esté familiarizado con nuestro proyecto, y dificultarán

notablemente la extensibilidad de nuestro proyecto obligando a una refactorización continua. Antes de

abordar un proyecto con patrones hemos de analizar minuciosamente qué patrones nos pueden ser

útiles, cuáles son las relaciones entre los diferentes componentes de nuestro sistema, cómo podemos

relacionar los patrones entre sí de modo que formen una estructura sólida, cuáles son los patrones que

tro dominio, etc. Esta tarea obviamente es mucho más compleja que el mero hecho de

Existen cientos y cientos de patrones que han ido apareciendo con el tiempo y que se han convertido

en soluciones estándar para diferentes problemas, y por supuesto no limitados al ámbito informático sino

que podemos encontrar patrones de arquitectura, de economía, etc. Así que la clave de todo es la

experiencia puede que hayamos realizado un análisis fantástico y que hayamos estudiado los patro

más avanzados en el ámbito que estamos afrontando, sin embargo, sin la experiencia adecuada

Sea como sea, la experiencia se adquiere con el tiempo y a base de tropiezos. Seguramente nuestros

primeros proyectos no queden como los habíamos ideado en su concepción, y con el tiempo, nos

demos cuenta de que podríamos haber utilizado otros métodos para abordar de un modo más

eficiente los problemas con los que nos habíamos enfrentado.

La primera regla de los patrones de diseño coincide con la primera regla de la optimización: retrasar.

Del mismo modo que no es aconsejable optimizar prematuramente, no se deben utilizar patrones de

diseño antes de tiempo. Seguramente sea mejor implementar algo primero y asegurarse de que

ra luego utilizar el patrón de diseño para mejorar las flaquezas; esto es cierto, sobre todo,

cuando aún no ha identificado todos los detalles del proyecto (si comprende totalmente el dominio y el

problema, tal vez sea razonable utilizar patrones desde el principio, de igual modo que tiene sentido

utilizar los algoritmos más eficientes desde el comienzo en algunas aplicaciones).

Los patrones de diseño pueden incrementar o disminuir la capacidad de comprensión de un diseño o

la al añadir accesos indirectos o aumentar la cantidad de código,

disminuirla al regular la modularidad, separar mejor los conceptos y simplificar la descripción. Una vez

que aprenda el vocabulario de los patrones de diseño le será más fácil y más rápido c

otros individuos que también lo conozcan. Por que atraviesa una estructura y realiza llamadas de

retorno, en tanto que algunos métodos deben estar presentes y son llamados de este modo y en este

La mayoría de las personas utiliza patrones de diseño cuando perciben un problema en su proyecto

algo que debería resultar sencillo no lo es — o su implementación— como por ejemplo, el rendimiento.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

. de Comportamiento: relacionados con la interacción de clases y objetos y la distribución de

. Objeto: tratan la relación entre objetos que cambian en tiempo de ejecución.

ones de diseño es una tarea compleja, que reporta muchos

beneficios, pero prácticamente imposible sin un estudio previo del dominio del problema que estamos

tratando. El uso de lenguajes de modelado como UML nos ayuda a ver mejor las propiedades del

a que estamos diseñando y harán aparecer relaciones entre los componentes que a primera vista

eran difusas o que simplemente no habíamos visto. El mero hecho de utilizar patrones de diseño y

nio de nuestro modelo, es un error

gravísimo y degenera en la práctica de ir esparciendo patrones por las diferentes partes de un proyecto

Estos patrones no representarán ningún concepto de nuestro dominio, probablemente no reflejarán

ningún significado a alguien que no esté familiarizado con nuestro proyecto, y dificultarán

notablemente la extensibilidad de nuestro proyecto obligando a una refactorización continua. Antes de

nuciosamente qué patrones nos pueden ser

útiles, cuáles son las relaciones entre los diferentes componentes de nuestro sistema, cómo podemos

relacionar los patrones entre sí de modo que formen una estructura sólida, cuáles son los patrones que

tro dominio, etc. Esta tarea obviamente es mucho más compleja que el mero hecho de

Existen cientos y cientos de patrones que han ido apareciendo con el tiempo y que se han convertido

blemas, y por supuesto no limitados al ámbito informático sino

que podemos encontrar patrones de arquitectura, de economía, etc. Así que la clave de todo es la

experiencia puede que hayamos realizado un análisis fantástico y que hayamos estudiado los patrones

más avanzados en el ámbito que estamos afrontando, sin embargo, sin la experiencia adecuada

Sea como sea, la experiencia se adquiere con el tiempo y a base de tropiezos. Seguramente nuestros

los habíamos ideado en su concepción, y con el tiempo, nos

demos cuenta de que podríamos haber utilizado otros métodos para abordar de un modo más

ncide con la primera regla de la optimización: retrasar.

Del mismo modo que no es aconsejable optimizar prematuramente, no se deben utilizar patrones de

diseño antes de tiempo. Seguramente sea mejor implementar algo primero y asegurarse de que

ra luego utilizar el patrón de diseño para mejorar las flaquezas; esto es cierto, sobre todo,

cuando aún no ha identificado todos los detalles del proyecto (si comprende totalmente el dominio y el

principio, de igual modo que tiene sentido

utilizar los algoritmos más eficientes desde el comienzo en algunas aplicaciones).

Los patrones de diseño pueden incrementar o disminuir la capacidad de comprensión de un diseño o

la al añadir accesos indirectos o aumentar la cantidad de código,

disminuirla al regular la modularidad, separar mejor los conceptos y simplificar la descripción. Una vez

que aprenda el vocabulario de los patrones de diseño le será más fácil y más rápido comunicarse con

otros individuos que también lo conozcan. Por que atraviesa una estructura y realiza llamadas de

retorno, en tanto que algunos métodos deben estar presentes y son llamados de este modo y en este

trones de diseño cuando perciben un problema en su proyecto —

como por ejemplo, el rendimiento.

Page 26: Java Modulo 8

Examine un código o un proyecto de esa naturaleza. ¿Cuáles son sus problemas, cuáles son sus

compromisos? ¿Qué le gustaría realizar que, en la actualidad, es muy difícil lograr? A continuación,

compruebe una referencia de patrón de diseño y busque los patrones que abordan los temas que le

preocupan.

Para que una solución sea considerada un patrón debe poseer ciertos componentes fundamentales:

� Nombre del patrón. Permite describir en pocas palabras un problema de diseño junto con sus

soluciones y consecuencias.

� Problema (o fuerzas no balanceadas). Indica cuándo aplicar el

oportunidades el problema incluye una serie de condiciones que deben darse para aplicar el

patrón. Muestra la verdadera esencia del problema. Este enunciado se completa con un

conjunto de fuerzas, término que se utiliza para indicar cual

deba ser considerado a la hora de resolverlo, entre ellos:

- Requerimientos a cumplir por la solución.

- Restricciones a considerar.

- Propiedades deseables que la solución debe tener.

Son las fuerzas las que ayudan a entender el p

vista.

� Solución. No describe una solución o implementación en concreto, sino que un patrón es más

bien como una plantilla que puede aplicarse en diversas situaciones diferentes. El patrón brinda

una descripción abstracta de un problema de diseño y cómo lo resuelve una determinada

disposición de objetos. Que la solución sea aplicable a diversas situaciones denota el carácter

“recurrente” de los patrones.

� Consecuencias. Resultados en términos de ventajas e

Según el nivel de abstracción los patrones de diseño pueden clasificarse de la siguiente forma:

� Patrones arquitectónicos. Centrados en la arquitectura del sistema. Definen una estructura

fundamental sobre la organización

cuáles son sus responsabilidades y como se interrelacionan.

� Patrones de diseño. Esquemas para refinar los subsistemas o componentes de un sistema de

software, o sus relaciones. Describen una estr

comunicantes que resuelven un problema de diseño dentro de un contexto.

Ejemplo: el patrón singleton asegura que exista sólo una instancia de una determinada clase.

Patrones de codificación o modismos (idioms). Patr

particulares del diseño en un lenguaje de programación específico. Ejemplo: en Java implementar una

interface en una clase anónima.

Los patrones arquitectónicos podrían considerarse estrategias de alto nivel que abarc

a gran escala, propiedades y mecanismos del sistema. Tienen implicancias muy amplias que afectan

tanto a la estructura como a la organización del sistema. Los patrones de diseño son tácticas de medio

nivel para profundizar en la estructura y

patrones de diseño no influencian la estructura del sistema sino que definen micro

subsistemas y componentes. Por último, los modismos son técnicas específicas del paradigm

de programación que complementan detalles de bajo nivel (internos o externos) de la estructura de un

componente.

Para uso exclusivo de los alumnos de CETICSA S.L.

Examine un código o un proyecto de esa naturaleza. ¿Cuáles son sus problemas, cuáles son sus

ompromisos? ¿Qué le gustaría realizar que, en la actualidad, es muy difícil lograr? A continuación,

compruebe una referencia de patrón de diseño y busque los patrones que abordan los temas que le

Componentes fundamentales

ea considerada un patrón debe poseer ciertos componentes fundamentales:

Nombre del patrón. Permite describir en pocas palabras un problema de diseño junto con sus

soluciones y consecuencias.

Problema (o fuerzas no balanceadas). Indica cuándo aplicar el patrón. En algunas

oportunidades el problema incluye una serie de condiciones que deben darse para aplicar el

patrón. Muestra la verdadera esencia del problema. Este enunciado se completa con un

conjunto de fuerzas, término que se utiliza para indicar cualquier aspecto del problema que

deba ser considerado a la hora de resolverlo, entre ellos:

Requerimientos a cumplir por la solución.

Restricciones a considerar.

Propiedades deseables que la solución debe tener.

Son las fuerzas las que ayudan a entender el problema dado que lo exponen desde distintos puntos de

Solución. No describe una solución o implementación en concreto, sino que un patrón es más

bien como una plantilla que puede aplicarse en diversas situaciones diferentes. El patrón brinda

cripción abstracta de un problema de diseño y cómo lo resuelve una determinada

disposición de objetos. Que la solución sea aplicable a diversas situaciones denota el carácter

“recurrente” de los patrones.

Consecuencias. Resultados en términos de ventajas e inconvenientes.

Tipos de patrones

Según el nivel de abstracción los patrones de diseño pueden clasificarse de la siguiente forma:

Patrones arquitectónicos. Centrados en la arquitectura del sistema. Definen una estructura

fundamental sobre la organización del sistema. Proveen un conjunto predefinido de subsistemas,

cuáles son sus responsabilidades y como se interrelacionan.

Patrones de diseño. Esquemas para refinar los subsistemas o componentes de un sistema de

software, o sus relaciones. Describen una estructura recurrente y común de componentes

comunicantes que resuelven un problema de diseño dentro de un contexto.

Ejemplo: el patrón singleton asegura que exista sólo una instancia de una determinada clase.

Patrones de codificación o modismos (idioms). Patrones que ayudan a implementar aspectos

particulares del diseño en un lenguaje de programación específico. Ejemplo: en Java implementar una

Los patrones arquitectónicos podrían considerarse estrategias de alto nivel que abarc

a gran escala, propiedades y mecanismos del sistema. Tienen implicancias muy amplias que afectan

tanto a la estructura como a la organización del sistema. Los patrones de diseño son tácticas de medio

nivel para profundizar en la estructura y comportamiento de ciertos componentes y sus relaciones. Los

patrones de diseño no influencian la estructura del sistema sino que definen micro

subsistemas y componentes. Por último, los modismos son técnicas específicas del paradigm

de programación que complementan detalles de bajo nivel (internos o externos) de la estructura de un

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Examine un código o un proyecto de esa naturaleza. ¿Cuáles son sus problemas, cuáles son sus

ompromisos? ¿Qué le gustaría realizar que, en la actualidad, es muy difícil lograr? A continuación,

compruebe una referencia de patrón de diseño y busque los patrones que abordan los temas que le

Componentes fundamentales

ea considerada un patrón debe poseer ciertos componentes fundamentales:

Nombre del patrón. Permite describir en pocas palabras un problema de diseño junto con sus

patrón. En algunas

oportunidades el problema incluye una serie de condiciones que deben darse para aplicar el

patrón. Muestra la verdadera esencia del problema. Este enunciado se completa con un

quier aspecto del problema que

roblema dado que lo exponen desde distintos puntos de

Solución. No describe una solución o implementación en concreto, sino que un patrón es más

bien como una plantilla que puede aplicarse en diversas situaciones diferentes. El patrón brinda

cripción abstracta de un problema de diseño y cómo lo resuelve una determinada

disposición de objetos. Que la solución sea aplicable a diversas situaciones denota el carácter

Tipos de patrones

Según el nivel de abstracción los patrones de diseño pueden clasificarse de la siguiente forma:

Patrones arquitectónicos. Centrados en la arquitectura del sistema. Definen una estructura

del sistema. Proveen un conjunto predefinido de subsistemas,

Patrones de diseño. Esquemas para refinar los subsistemas o componentes de un sistema de

uctura recurrente y común de componentes

comunicantes que resuelven un problema de diseño dentro de un contexto.

Ejemplo: el patrón singleton asegura que exista sólo una instancia de una determinada clase.

ones que ayudan a implementar aspectos

particulares del diseño en un lenguaje de programación específico. Ejemplo: en Java implementar una

Los patrones arquitectónicos podrían considerarse estrategias de alto nivel que abarcan componentes

a gran escala, propiedades y mecanismos del sistema. Tienen implicancias muy amplias que afectan

tanto a la estructura como a la organización del sistema. Los patrones de diseño son tácticas de medio

comportamiento de ciertos componentes y sus relaciones. Los

patrones de diseño no influencian la estructura del sistema sino que definen micro-arquitecturas para los

subsistemas y componentes. Por último, los modismos son técnicas específicas del paradigma y lenguaje

de programación que complementan detalles de bajo nivel (internos o externos) de la estructura de un

Page 27: Java Modulo 8

Patrones Creacionales. Los patrones creacionales abstraen el proceso de instanciación de objetos,

ayudando a que el sistema sea independiente de cómo se crean, componen y representan sus objetos.

Estos patrones encapsulan el conocimiento sobre las clases concretas que utiliza el sistema. En otras

palabras, estos patrones brindan soporte a una de las tareas mas comunes dentro de la pr

orientada a objetos: la instanciación. Estos patrones brindan las siguientes características:

� Instanciación genérica: permite que los objetos sean creados dentro del sistema sin especificar

clases concretas en el código.

� Simplicidad: algunos patrones facilitan la creación de objetos, evitando que el cliente deba tener

código complejo sobre como instanciar un determinado objeto.

� Restricciones creacionales: algunos patrones ayudan a establecer restricciones sobre la creación de

objetos, tales como qué objeto crear, cuándo, cómo, etc.

Por lo general, son alternativas de diseño bajo estrategias de herencia o delegación que encapsulan el

mecanismo de creación, independizando los tipos de objetos “producto” que se manejan. Los patrones

creacionales son los siguientes:

1. Singleton: asegura que una determinada clase sea instanciada una y sólo una vez,

proporcionando un único punto de acceso global a ella.

2. Abstract Factory: provee una interfaz para crear familias de objetos producto relacionados o

que dependen entre si, sin especificar sus cla

3. Factory Method: define una interfaz para crear un objeto delegando la decisión de qué clase

crear en las subclases. Este enfoque también puede ser llamado constructor “virtual”.

4. Builder: separa la construcción de un objeto complejo de su r

mismo proceso de construcción pueda crear diferentes representaciones. Simplifica la

construcción de objetos con estructura interna compleja y permite la construcción de objetos

paso a paso. Ejemplo: este patrón se encuentra

preparan menús infantiles. Generalmente estos menús están formados de un plato principal, un

acompañamiento, una bebida y un juguete. Si bien el contenido del menú puede variar, el

proceso de construcción es siemp

seguir. Estos pasos son: preparar un plato principal, preparar un acompañamiento, incluir un

juguete y guardarlos en una bolsa. La bebida se sirve en un vaso y queda fuera de la bolsa.

5. Prototype: facilita la creación dinámica de objetos mediante la definición de clases cuyos

objetos pueden crear duplicados de si mismos. Estos objetos son llamados prototipos. Ejemplo: un

escenario frecuente es contar con GUIs (Interfaz Gráfica de Usuario) que cuenten

número de controles similares, los cuales deben ser inicializados a un determinado estado común

para mantener consistencia. El proceso de inicialización se repite varias veces por cada control

de manera que las líneas de código se incrementan.

código se puede contar con un objeto inicializado en un determinado estado estándar y luego

obtener clones de él ya inicializados.

clases y objetos parar formar estructuras más grandes. Los patrones estructurales de clases

utilizan la herencia para componer interfaces o implementaciones. En lugar de combinar

interfaces o implementaciones, los patrones estructurales de objetos describen formas de

componer objetos para obtener nuevas funcionalidades. La flexibilidad añadida mediante la

composición de objetos viene dada por la capacidad de cambiar la composición en tiempo de

ejecución, que es imposible con la composición de clases. Ejemplos típicos son cómo comunic

dos clases incompatibles o cómo añadir funcionalidad a objetos. Los patrones estructurales son

los siguientes:

6. Adapter: oficia de intermediario entre dos clases cuyas interfaces son incompatibles de manera

tal que puedan ser utilizadas en conjunto. Eje

patrón, quizá el más común de ellos sea el de los adaptadores de enchufes el cual permitiría

utilizar un enchufe de dos patas planas adaptándolo a un toma corriente de dos patas

redondas.

Para uso exclusivo de los alumnos de CETICSA S.L.

Patrones Creacionales. Los patrones creacionales abstraen el proceso de instanciación de objetos,

dependiente de cómo se crean, componen y representan sus objetos.

Estos patrones encapsulan el conocimiento sobre las clases concretas que utiliza el sistema. En otras

palabras, estos patrones brindan soporte a una de las tareas mas comunes dentro de la pr

orientada a objetos: la instanciación. Estos patrones brindan las siguientes características:

Instanciación genérica: permite que los objetos sean creados dentro del sistema sin especificar

atrones facilitan la creación de objetos, evitando que el cliente deba tener

código complejo sobre como instanciar un determinado objeto.

Restricciones creacionales: algunos patrones ayudan a establecer restricciones sobre la creación de

mo qué objeto crear, cuándo, cómo, etc.

Por lo general, son alternativas de diseño bajo estrategias de herencia o delegación que encapsulan el

mecanismo de creación, independizando los tipos de objetos “producto” que se manejan. Los patrones

ue una determinada clase sea instanciada una y sólo una vez,

proporcionando un único punto de acceso global a ella.

Abstract Factory: provee una interfaz para crear familias de objetos producto relacionados o

que dependen entre si, sin especificar sus clases concretas.

Factory Method: define una interfaz para crear un objeto delegando la decisión de qué clase

crear en las subclases. Este enfoque también puede ser llamado constructor “virtual”.

Builder: separa la construcción de un objeto complejo de su representación, de forma que el

mismo proceso de construcción pueda crear diferentes representaciones. Simplifica la

construcción de objetos con estructura interna compleja y permite la construcción de objetos

paso a paso. Ejemplo: este patrón se encuentra en los restaurantes de comidas rápidas que

preparan menús infantiles. Generalmente estos menús están formados de un plato principal, un

acompañamiento, una bebida y un juguete. Si bien el contenido del menú puede variar, el

proceso de construcción es siempre el mismo: el cajero indica a los empleados los pasos a

seguir. Estos pasos son: preparar un plato principal, preparar un acompañamiento, incluir un

juguete y guardarlos en una bolsa. La bebida se sirve en un vaso y queda fuera de la bolsa.

acilita la creación dinámica de objetos mediante la definición de clases cuyos

objetos pueden crear duplicados de si mismos. Estos objetos son llamados prototipos. Ejemplo: un

escenario frecuente es contar con GUIs (Interfaz Gráfica de Usuario) que cuenten

número de controles similares, los cuales deben ser inicializados a un determinado estado común

para mantener consistencia. El proceso de inicialización se repite varias veces por cada control

de manera que las líneas de código se incrementan. Con el fin de optimizar estas partes del

código se puede contar con un objeto inicializado en un determinado estado estándar y luego

obtener clones de él ya inicializados. Patrones estructurales. Se encargan de cómo se combinan

ar estructuras más grandes. Los patrones estructurales de clases

utilizan la herencia para componer interfaces o implementaciones. En lugar de combinar

interfaces o implementaciones, los patrones estructurales de objetos describen formas de

s para obtener nuevas funcionalidades. La flexibilidad añadida mediante la

composición de objetos viene dada por la capacidad de cambiar la composición en tiempo de

ejecución, que es imposible con la composición de clases. Ejemplos típicos son cómo comunic

dos clases incompatibles o cómo añadir funcionalidad a objetos. Los patrones estructurales son

Adapter: oficia de intermediario entre dos clases cuyas interfaces son incompatibles de manera

tal que puedan ser utilizadas en conjunto. Ejemplo: en la vida cotidiana se ven ejemplos de este

patrón, quizá el más común de ellos sea el de los adaptadores de enchufes el cual permitiría

utilizar un enchufe de dos patas planas adaptándolo a un toma corriente de dos patas

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Patrones Creacionales. Los patrones creacionales abstraen el proceso de instanciación de objetos,

dependiente de cómo se crean, componen y representan sus objetos.

Estos patrones encapsulan el conocimiento sobre las clases concretas que utiliza el sistema. En otras

palabras, estos patrones brindan soporte a una de las tareas mas comunes dentro de la programación

orientada a objetos: la instanciación. Estos patrones brindan las siguientes características:

Instanciación genérica: permite que los objetos sean creados dentro del sistema sin especificar

atrones facilitan la creación de objetos, evitando que el cliente deba tener

Restricciones creacionales: algunos patrones ayudan a establecer restricciones sobre la creación de

Por lo general, son alternativas de diseño bajo estrategias de herencia o delegación que encapsulan el

mecanismo de creación, independizando los tipos de objetos “producto” que se manejan. Los patrones

ue una determinada clase sea instanciada una y sólo una vez,

Abstract Factory: provee una interfaz para crear familias de objetos producto relacionados o

Factory Method: define una interfaz para crear un objeto delegando la decisión de qué clase

crear en las subclases. Este enfoque también puede ser llamado constructor “virtual”.

epresentación, de forma que el

mismo proceso de construcción pueda crear diferentes representaciones. Simplifica la

construcción de objetos con estructura interna compleja y permite la construcción de objetos

en los restaurantes de comidas rápidas que

preparan menús infantiles. Generalmente estos menús están formados de un plato principal, un

acompañamiento, una bebida y un juguete. Si bien el contenido del menú puede variar, el

re el mismo: el cajero indica a los empleados los pasos a

seguir. Estos pasos son: preparar un plato principal, preparar un acompañamiento, incluir un

juguete y guardarlos en una bolsa. La bebida se sirve en un vaso y queda fuera de la bolsa.

acilita la creación dinámica de objetos mediante la definición de clases cuyos

objetos pueden crear duplicados de si mismos. Estos objetos son llamados prototipos. Ejemplo: un

escenario frecuente es contar con GUIs (Interfaz Gráfica de Usuario) que cuenten con un gran

número de controles similares, los cuales deben ser inicializados a un determinado estado común

para mantener consistencia. El proceso de inicialización se repite varias veces por cada control

Con el fin de optimizar estas partes del

código se puede contar con un objeto inicializado en un determinado estado estándar y luego

Patrones estructurales. Se encargan de cómo se combinan

ar estructuras más grandes. Los patrones estructurales de clases

utilizan la herencia para componer interfaces o implementaciones. En lugar de combinar

interfaces o implementaciones, los patrones estructurales de objetos describen formas de

s para obtener nuevas funcionalidades. La flexibilidad añadida mediante la

composición de objetos viene dada por la capacidad de cambiar la composición en tiempo de

ejecución, que es imposible con la composición de clases. Ejemplos típicos son cómo comunicar

dos clases incompatibles o cómo añadir funcionalidad a objetos. Los patrones estructurales son

Adapter: oficia de intermediario entre dos clases cuyas interfaces son incompatibles de manera

mplo: en la vida cotidiana se ven ejemplos de este

patrón, quizá el más común de ellos sea el de los adaptadores de enchufes el cual permitiría

utilizar un enchufe de dos patas planas adaptándolo a un toma corriente de dos patas

Page 28: Java Modulo 8

7. Bridge: disocia un componente complejo en dos jerarquías de clases: una abstracción funcional

y la implementación interna, para que ambas puedan variar independientemente. Ejemplo: los

electrodomésticos y sus interruptores de encendido pueden ser considerados como ejemplo

este patrón donde el interruptor de encendido es considerado la abstracción y el

electrodoméstico en si la implementación. El interruptor podría ser un simple interruptor de

encendido/apagado, un regulador de velocidades u alguna otra opción, mientras

electrodoméstico puede ser una lámpara, un ventilador de techo, etc.

8. Composite: compone objetos en estructuras de árboles para representar jerarquías parte

Permite que los clientes traten de manera uniforme a los objetos individuales y a los

Ejemplo: en una gráfica de Gantt existen tareas simples (con una actividad) y compuestas (que

contienen varias tareas). Modelar estos dos tipos de tareas en una jerarquía de clases donde

ambas son subclases de una clase que cuente con un método

permitiría tratar de forma uniforme a tareas simples y compuestas para calcular el tiempo

utilizado por cada una de ellas. Concretamente una tarea simple informa el tiempo dedicado a

ella, mientras que una compuesta lo hace sumand

tareas que contiene.

9. Decorator: agrega o limita responsabilidades adicionales a un objeto de forma dinámica,

proporcionando una alternativa flexible a la herencia para extender funcionalidad. Ejemplo: si

bien es cierto que se pueden colgar pinturas, cuadros y fotos en las paredes sin marcos, éstos

suelen ser utilizados a menudo y son ellos los que se cuelgan en la pared en lugar de su

contenido (pinturas, cuadros, etc.). Al momento de colgarse los cuadros junto co

pueden formar un solo “componente visual”

10. Facade: proporciona una interfaz simplificada para un conjunto de interfaces de subsistemas.

Define una interfaz de alto nivel que hace que un subsistema sea más fácil de usar. Ejemplo: En

un sistema de compras los clientes contactan a un responsable de ventas que actúa como

Facade al momento de realizar un pedido. Este representante de ventas actúa como Facade

proveyendo una interface con los departamentos (subsitemas) de ped

11. Flyweight: permite el uso de un gran número de objetos de grano fino de forma eficiente

mediante compartimiento. Ejemplo: La red telefónica pública conmutada es un ejemplo de este

patrón ya que hay diversos componentes, como por ejemplo nodos de conmutaci

deben compartir entre los distintos usuarios. Los usuarios no conocen cuántos componentes de

cada tipo hay disponibles al momento de realizar la llamada. Lo único por lo que se preocupan

los usuarios es por obtener tono para marcar, poder discar

12. Proxy: Provee un sustituto o representante de un objeto para controlar el acceso a éste. Este

patrón posee las siguientes variantes:

remoto como si estuviese localmente.

tamaño bajo demanda. - Proxy de protección: se encarga de controlar el acceso al objeto

representado. Patrones de comportamiento Tienen que ver con algoritmos y asignación de

responsabilidades. Estos patrones se focalizan en el flujo de

formas de organizar los controles dentro del sistema pueden llevar a grandes beneficios en

cuanto a mantenibilidad y eficiencia. Algunos ejemplos de estos patrones incluyen la definición

de abstracciones de algoritmos,

reduciendo las dependencias o asociar comportamiento a objetos e invocar su ejecución. Los

patrones de comportamiento basados en clases utilizan la herencia para distribuir el

comportamiento entre clases, ellos son: Template Method e Interpreter. Mientras que los basados

en objetos utilizan la composición. Los patrones de comportamiento son los siguientes:

13. Chain of responsibility: establece una cadena de mensajes dentro del sistema de manera

dicho mensaje sea manejado en el mismo nivel donde fue emitido, o redirigido a un objeto

capaz de manejarlo. Evita acoplar el emisor del mensaje con un receptor, dando a más de un

objeto la posibilidad de responder al mensaje.

14. Command: representa una solicitud con un objeto, de manera tal de poder parametrizar a los

clientes con distintas solicitudes, encolarlas o llevar un registro de las mismas, y poder deshacer

Para uso exclusivo de los alumnos de CETICSA S.L.

un componente complejo en dos jerarquías de clases: una abstracción funcional

y la implementación interna, para que ambas puedan variar independientemente. Ejemplo: los

electrodomésticos y sus interruptores de encendido pueden ser considerados como ejemplo

este patrón donde el interruptor de encendido es considerado la abstracción y el

electrodoméstico en si la implementación. El interruptor podría ser un simple interruptor de

encendido/apagado, un regulador de velocidades u alguna otra opción, mientras

electrodoméstico puede ser una lámpara, un ventilador de techo, etc.

Composite: compone objetos en estructuras de árboles para representar jerarquías parte

Permite que los clientes traten de manera uniforme a los objetos individuales y a los

Ejemplo: en una gráfica de Gantt existen tareas simples (con una actividad) y compuestas (que

contienen varias tareas). Modelar estos dos tipos de tareas en una jerarquía de clases donde

ambas son subclases de una clase que cuente con un método “calculáTiempoUtilizado”

permitiría tratar de forma uniforme a tareas simples y compuestas para calcular el tiempo

utilizado por cada una de ellas. Concretamente una tarea simple informa el tiempo dedicado a

ella, mientras que una compuesta lo hace sumando los tiempos insumidos de cada una de las

Decorator: agrega o limita responsabilidades adicionales a un objeto de forma dinámica,

proporcionando una alternativa flexible a la herencia para extender funcionalidad. Ejemplo: si

cierto que se pueden colgar pinturas, cuadros y fotos en las paredes sin marcos, éstos

suelen ser utilizados a menudo y son ellos los que se cuelgan en la pared en lugar de su

contenido (pinturas, cuadros, etc.). Al momento de colgarse los cuadros junto co

pueden formar un solo “componente visual”

Facade: proporciona una interfaz simplificada para un conjunto de interfaces de subsistemas.

Define una interfaz de alto nivel que hace que un subsistema sea más fácil de usar. Ejemplo: En

compras los clientes contactan a un responsable de ventas que actúa como

Facade al momento de realizar un pedido. Este representante de ventas actúa como Facade

proveyendo una interface con los departamentos (subsitemas) de pedidos, facturación y envíos.

Flyweight: permite el uso de un gran número de objetos de grano fino de forma eficiente

mediante compartimiento. Ejemplo: La red telefónica pública conmutada es un ejemplo de este

patrón ya que hay diversos componentes, como por ejemplo nodos de conmutaci

deben compartir entre los distintos usuarios. Los usuarios no conocen cuántos componentes de

cada tipo hay disponibles al momento de realizar la llamada. Lo único por lo que se preocupan

los usuarios es por obtener tono para marcar, poder discar y efectuar la llamada.

Proxy: Provee un sustituto o representante de un objeto para controlar el acceso a éste. Este

patrón posee las siguientes variantes: - Proxy remoto: se encarga de representar un objeto

remoto como si estuviese localmente. - Proxy virtual: se encarga de crear objetos de gran

Proxy de protección: se encarga de controlar el acceso al objeto

Patrones de comportamiento Tienen que ver con algoritmos y asignación de

responsabilidades. Estos patrones se focalizan en el flujo de control dentro de un sistema. Ciertas

formas de organizar los controles dentro del sistema pueden llevar a grandes beneficios en

cuanto a mantenibilidad y eficiencia. Algunos ejemplos de estos patrones incluyen la definición

de abstracciones de algoritmos, las colaboraciones entre objetos para realizar tareas complejas

reduciendo las dependencias o asociar comportamiento a objetos e invocar su ejecución. Los

patrones de comportamiento basados en clases utilizan la herencia para distribuir el

entre clases, ellos son: Template Method e Interpreter. Mientras que los basados

en objetos utilizan la composición. Los patrones de comportamiento son los siguientes:

Chain of responsibility: establece una cadena de mensajes dentro del sistema de manera

dicho mensaje sea manejado en el mismo nivel donde fue emitido, o redirigido a un objeto

capaz de manejarlo. Evita acoplar el emisor del mensaje con un receptor, dando a más de un

objeto la posibilidad de responder al mensaje.

una solicitud con un objeto, de manera tal de poder parametrizar a los

clientes con distintas solicitudes, encolarlas o llevar un registro de las mismas, y poder deshacer

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

un componente complejo en dos jerarquías de clases: una abstracción funcional

y la implementación interna, para que ambas puedan variar independientemente. Ejemplo: los

electrodomésticos y sus interruptores de encendido pueden ser considerados como ejemplos de

este patrón donde el interruptor de encendido es considerado la abstracción y el

electrodoméstico en si la implementación. El interruptor podría ser un simple interruptor de

encendido/apagado, un regulador de velocidades u alguna otra opción, mientras que el

Composite: compone objetos en estructuras de árboles para representar jerarquías parte-todo.

Permite que los clientes traten de manera uniforme a los objetos individuales y a los complejos.

Ejemplo: en una gráfica de Gantt existen tareas simples (con una actividad) y compuestas (que

contienen varias tareas). Modelar estos dos tipos de tareas en una jerarquía de clases donde

“calculáTiempoUtilizado”

permitiría tratar de forma uniforme a tareas simples y compuestas para calcular el tiempo

utilizado por cada una de ellas. Concretamente una tarea simple informa el tiempo dedicado a

o los tiempos insumidos de cada una de las

Decorator: agrega o limita responsabilidades adicionales a un objeto de forma dinámica,

proporcionando una alternativa flexible a la herencia para extender funcionalidad. Ejemplo: si

cierto que se pueden colgar pinturas, cuadros y fotos en las paredes sin marcos, éstos

suelen ser utilizados a menudo y son ellos los que se cuelgan en la pared en lugar de su

contenido (pinturas, cuadros, etc.). Al momento de colgarse los cuadros junto con su marco

Facade: proporciona una interfaz simplificada para un conjunto de interfaces de subsistemas.

Define una interfaz de alto nivel que hace que un subsistema sea más fácil de usar. Ejemplo: En

compras los clientes contactan a un responsable de ventas que actúa como

Facade al momento de realizar un pedido. Este representante de ventas actúa como Facade

idos, facturación y envíos.

Flyweight: permite el uso de un gran número de objetos de grano fino de forma eficiente

mediante compartimiento. Ejemplo: La red telefónica pública conmutada es un ejemplo de este

patrón ya que hay diversos componentes, como por ejemplo nodos de conmutación, que se

deben compartir entre los distintos usuarios. Los usuarios no conocen cuántos componentes de

cada tipo hay disponibles al momento de realizar la llamada. Lo único por lo que se preocupan

y efectuar la llamada.

Proxy: Provee un sustituto o representante de un objeto para controlar el acceso a éste. Este

Proxy remoto: se encarga de representar un objeto

ar objetos de gran

Proxy de protección: se encarga de controlar el acceso al objeto

Patrones de comportamiento Tienen que ver con algoritmos y asignación de

control dentro de un sistema. Ciertas

formas de organizar los controles dentro del sistema pueden llevar a grandes beneficios en

cuanto a mantenibilidad y eficiencia. Algunos ejemplos de estos patrones incluyen la definición

las colaboraciones entre objetos para realizar tareas complejas

reduciendo las dependencias o asociar comportamiento a objetos e invocar su ejecución. Los

patrones de comportamiento basados en clases utilizan la herencia para distribuir el

entre clases, ellos son: Template Method e Interpreter. Mientras que los basados

en objetos utilizan la composición. Los patrones de comportamiento son los siguientes:

Chain of responsibility: establece una cadena de mensajes dentro del sistema de manera tal que

dicho mensaje sea manejado en el mismo nivel donde fue emitido, o redirigido a un objeto

capaz de manejarlo. Evita acoplar el emisor del mensaje con un receptor, dando a más de un

una solicitud con un objeto, de manera tal de poder parametrizar a los

clientes con distintas solicitudes, encolarlas o llevar un registro de las mismas, y poder deshacer

Page 29: Java Modulo 8

las operaciones. Estas solicitudes, al ser representadas como un objeto también puede

como parámetro o devolverse como resultados.

15. Interpreter: en un contexto donde se repite una determinada clase de problemas y el dominio es

bien conocido, se pueden caracterizar estos problemas como un lenguaje y, a su vez, estos

problemas pueden ser tratados por un “motor” de interpretación. Este patrón busca definir un

intérprete para dicho lenguaje, para el cual define una gramática y un intérprete de la misma

para poder resolver los problemas. Ejemplo: distintos motores de bases de datos (Ora

Server, Sybase, DB2, etc.) utilizan distintos códigos de error para indicar fallas (errores de clave

duplicada, violación de restricciones de integridad referencial, longitud de datos, etc.). La

utilización de éste patrón permitiría definir un int

datos con el cual se determinaría la falla y tomarían las acciones pertinentes en función de la

misma. El sistema debe configurarse para utilizar el interprete adecuado según el motor de base

de datos.

16. Iterator: provee un modo de acceder secuencialmente a los elementos de un objeto agregado

(una colección) sin exponer su representación interna. El iterador está altamente acoplado al

objeto agregado. Ejemplo: Los árboles

en-orden y post-orden. La aplicación de este patrón permitiría definir un iterador para cada tipo

de recorrido, pudiendo ser utilizados para recorrer el árbol sin exponer su contenido.

17. Mediator: simplifica la comunicación entre objetos den

de un objeto mediador que administra la distribución de mensajes entre objetos. Promueve bajo

acoplamiento al evitar que los objetos se referencien unos a otros explícitamente, permitiendo

variar la interacción entre ellos independientemente. Ejemplo: Este patrón puede verse en las

torres de control de los aeropuertos. Los pilotos de los aviones que se encuentran por despegar o

aterrizar se comunican con la torre en lugar de hacerlo explícitamente entre ellos. La tor

control regula quien puede aterrizar y despegar, pero no se encarga de controlar todo el vuelo.

18. Memento: preserva una “fotografía instantánea” del estado de un objeto con el fin de permitirle

volver a su estado original, sin revelar su contenido al

muy importante de los editores de texto es “Deshacer” o “Undo”, esta funcionalidad puede

implementarse vía Memento. Para realizar esto se debe considerar al contenido del documento

como estado del editor y ante ca

fotografía del estado del documento antes de la modificación, para poder volver al mismo. Dos

factores importantes deben ser tenidos en cuenta: el orden de guardado de los cambios, para

poder deshacerlos correctamente y cuando limpiar el registro de estados intermedios ya que

esto puede consumir muchos recursos.

19. Observer: brinda un mecanismo que permite a un componente transmitir de forma flexible

mensajes a aquellos objetos que hayan expresado interés en él.

cuando el objeto ha sido actualizado, y la idea es que quienes hayan expresado interés

reaccionen ante este evento. Ejemplo: este patrón puede verse en las subastas donde cada

ofertante (Observer) tiene un indicador con su númer

aceptación de una oferta. El subastador(Subject, objeto observado) comienza la subasta con

una oferta inicial, cuando un ofertante toma esa oferta el subastador les retransmite a todos los

ofertantes que el precio ha cambiado.

20. State: permite que un objeto modifique su comportamiento cada vez que cambie su estado

interno. El objeto parecerá que cambió de clase. Ejemplo: este patrón puede observarse en las

máquinas expendedoras de golosinas, las cuales pasan por distin

dinero depositado, capacidad para dar vuelto, golosina seleccionada, etc. En cada uno de

éstos estados la máquina se comporta distinta. Cuando se deposita dinero y se elije una golosina

la expendedora puede entregar un produc

cambiar su estado (por ejemplo quedarse sin stock, en cuyo caso no entregará mas golosinas, o

no entregar golosinas ya sea por falta de stock o cambio).

21. Strategy: define una jerarquía de clases que represe

intercambiables. Estos algoritmos pueden ser intercambiados por la aplicación en tiempo de

ejecución. Ejemplo: Se dispone de un programa que encripta y desencripta mensajes de texto

Para uso exclusivo de los alumnos de CETICSA S.L.

las operaciones. Estas solicitudes, al ser representadas como un objeto también puede

como parámetro o devolverse como resultados.

Interpreter: en un contexto donde se repite una determinada clase de problemas y el dominio es

bien conocido, se pueden caracterizar estos problemas como un lenguaje y, a su vez, estos

n ser tratados por un “motor” de interpretación. Este patrón busca definir un

intérprete para dicho lenguaje, para el cual define una gramática y un intérprete de la misma

para poder resolver los problemas. Ejemplo: distintos motores de bases de datos (Ora

Server, Sybase, DB2, etc.) utilizan distintos códigos de error para indicar fallas (errores de clave

duplicada, violación de restricciones de integridad referencial, longitud de datos, etc.). La

utilización de éste patrón permitiría definir un intérprete de errores para cada motor de base de

datos con el cual se determinaría la falla y tomarían las acciones pertinentes en función de la

misma. El sistema debe configurarse para utilizar el interprete adecuado según el motor de base

r: provee un modo de acceder secuencialmente a los elementos de un objeto agregado

(una colección) sin exponer su representación interna. El iterador está altamente acoplado al

objeto agregado. Ejemplo: Los árboles-B pueden recorrerse de tres formas distin

orden. La aplicación de este patrón permitiría definir un iterador para cada tipo

de recorrido, pudiendo ser utilizados para recorrer el árbol sin exponer su contenido.

Mediator: simplifica la comunicación entre objetos dentro del sistema mediante la introducción

de un objeto mediador que administra la distribución de mensajes entre objetos. Promueve bajo

acoplamiento al evitar que los objetos se referencien unos a otros explícitamente, permitiendo

e ellos independientemente. Ejemplo: Este patrón puede verse en las

torres de control de los aeropuertos. Los pilotos de los aviones que se encuentran por despegar o

aterrizar se comunican con la torre en lugar de hacerlo explícitamente entre ellos. La tor

control regula quien puede aterrizar y despegar, pero no se encarga de controlar todo el vuelo.

Memento: preserva una “fotografía instantánea” del estado de un objeto con el fin de permitirle

volver a su estado original, sin revelar su contenido al mundo exterior. Ejemplo: una funcionalidad

muy importante de los editores de texto es “Deshacer” o “Undo”, esta funcionalidad puede

implementarse vía Memento. Para realizar esto se debe considerar al contenido del documento

como estado del editor y ante cada cambio del documento se debe tomar una nueva

fotografía del estado del documento antes de la modificación, para poder volver al mismo. Dos

factores importantes deben ser tenidos en cuenta: el orden de guardado de los cambios, para

ectamente y cuando limpiar el registro de estados intermedios ya que

esto puede consumir muchos recursos.

Observer: brinda un mecanismo que permite a un componente transmitir de forma flexible

mensajes a aquellos objetos que hayan expresado interés en él. Estos mensajes se disparan

cuando el objeto ha sido actualizado, y la idea es que quienes hayan expresado interés

reaccionen ante este evento. Ejemplo: este patrón puede verse en las subastas donde cada

ofertante (Observer) tiene un indicador con su número, el cual es utilizado para indicar la

aceptación de una oferta. El subastador(Subject, objeto observado) comienza la subasta con

una oferta inicial, cuando un ofertante toma esa oferta el subastador les retransmite a todos los

cambiado.

State: permite que un objeto modifique su comportamiento cada vez que cambie su estado

interno. El objeto parecerá que cambió de clase. Ejemplo: este patrón puede observarse en las

máquinas expendedoras de golosinas, las cuales pasan por distintos estados: stock disponible,

dinero depositado, capacidad para dar vuelto, golosina seleccionada, etc. En cada uno de

éstos estados la máquina se comporta distinta. Cuando se deposita dinero y se elije una golosina

la expendedora puede entregar un producto y no cambiar su estado, entregar un producto y

cambiar su estado (por ejemplo quedarse sin stock, en cuyo caso no entregará mas golosinas, o

no entregar golosinas ya sea por falta de stock o cambio).

Strategy: define una jerarquía de clases que representan algoritmos, los cuales son

intercambiables. Estos algoritmos pueden ser intercambiados por la aplicación en tiempo de

ejecución. Ejemplo: Se dispone de un programa que encripta y desencripta mensajes de texto

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

las operaciones. Estas solicitudes, al ser representadas como un objeto también pueden pasarse

Interpreter: en un contexto donde se repite una determinada clase de problemas y el dominio es

bien conocido, se pueden caracterizar estos problemas como un lenguaje y, a su vez, estos

n ser tratados por un “motor” de interpretación. Este patrón busca definir un

intérprete para dicho lenguaje, para el cual define una gramática y un intérprete de la misma

para poder resolver los problemas. Ejemplo: distintos motores de bases de datos (Oracle, SQL

Server, Sybase, DB2, etc.) utilizan distintos códigos de error para indicar fallas (errores de clave

duplicada, violación de restricciones de integridad referencial, longitud de datos, etc.). La

érprete de errores para cada motor de base de

datos con el cual se determinaría la falla y tomarían las acciones pertinentes en función de la

misma. El sistema debe configurarse para utilizar el interprete adecuado según el motor de base

r: provee un modo de acceder secuencialmente a los elementos de un objeto agregado

(una colección) sin exponer su representación interna. El iterador está altamente acoplado al

B pueden recorrerse de tres formas distintas: pre-orden,

orden. La aplicación de este patrón permitiría definir un iterador para cada tipo

de recorrido, pudiendo ser utilizados para recorrer el árbol sin exponer su contenido.

tro del sistema mediante la introducción

de un objeto mediador que administra la distribución de mensajes entre objetos. Promueve bajo

acoplamiento al evitar que los objetos se referencien unos a otros explícitamente, permitiendo

e ellos independientemente. Ejemplo: Este patrón puede verse en las

torres de control de los aeropuertos. Los pilotos de los aviones que se encuentran por despegar o

aterrizar se comunican con la torre en lugar de hacerlo explícitamente entre ellos. La torre de

control regula quien puede aterrizar y despegar, pero no se encarga de controlar todo el vuelo.

Memento: preserva una “fotografía instantánea” del estado de un objeto con el fin de permitirle

mundo exterior. Ejemplo: una funcionalidad

muy importante de los editores de texto es “Deshacer” o “Undo”, esta funcionalidad puede

implementarse vía Memento. Para realizar esto se debe considerar al contenido del documento

da cambio del documento se debe tomar una nueva

fotografía del estado del documento antes de la modificación, para poder volver al mismo. Dos

factores importantes deben ser tenidos en cuenta: el orden de guardado de los cambios, para

ectamente y cuando limpiar el registro de estados intermedios ya que

Observer: brinda un mecanismo que permite a un componente transmitir de forma flexible

Estos mensajes se disparan

cuando el objeto ha sido actualizado, y la idea es que quienes hayan expresado interés

reaccionen ante este evento. Ejemplo: este patrón puede verse en las subastas donde cada

o, el cual es utilizado para indicar la

aceptación de una oferta. El subastador(Subject, objeto observado) comienza la subasta con

una oferta inicial, cuando un ofertante toma esa oferta el subastador les retransmite a todos los

State: permite que un objeto modifique su comportamiento cada vez que cambie su estado

interno. El objeto parecerá que cambió de clase. Ejemplo: este patrón puede observarse en las

tos estados: stock disponible,

dinero depositado, capacidad para dar vuelto, golosina seleccionada, etc. En cada uno de

éstos estados la máquina se comporta distinta. Cuando se deposita dinero y se elije una golosina

to y no cambiar su estado, entregar un producto y

cambiar su estado (por ejemplo quedarse sin stock, en cuyo caso no entregará mas golosinas, o

ntan algoritmos, los cuales son

intercambiables. Estos algoritmos pueden ser intercambiados por la aplicación en tiempo de

ejecución. Ejemplo: Se dispone de un programa que encripta y desencripta mensajes de texto

Page 30: Java Modulo 8

usando distintos algoritmos de encriptació

puede modelarse como una clase con servicios de encriptación (un método “encriptaMensaje”

que recibe el texto llano y una clave, para devolver un texto cifrado y servicios de

desencriptación (un método “desen

para devolver uno descifrado).

22. Template Method: define en una operación el esqueleto de un algoritmo, delegando en las

subclases algunos de sus pasos. Permite que las subclases redefinan ciertos pasos

sin cambiar su estructura.

23. Visitor: representa una operación sobre elementos de una estructura de objetos. Permite definir

una nueva operación sin cambiar las clases de los elementos sobre los que opera. Brinda una

forma sencilla y mantenible de realizar acciones sobre una familia de clases. Ejemplo: un

compilador interpreta código fuente y lo representa como un árbol de sintaxis abstracta

(Abstract Syntax Tree, AST), el cual cuenta con diversos tipos de nodos (asignaciones, expresiones

condicionales, etc.). Sobre este árbol se desean ejecutar algunas operaciones como: revisar que

todas las variables fueron declaradas, chequeos de tipos de datos, generación de código, etc.

Una forma de realizar estas operaciones es mediante la implementación

cual recorrerá toda la estructura del árbol. Cuando un nodo acepte al Visitor, éste invocará al

método de visita definido en el Visitor que toma por parámetro al nodo siendo visitado.

Patrones de diseño basados en servicios web

Para el desarrollo de aplicaciones orientadas a servicio utilizando arquitecturas SOA, se han desarrollado

una serie de patrones de software.

Estos patrones se pueden dividir en cinco categorías:

Aprendizaje

Es importante entender el entorno de los servicios Web. Dentro de esta categoría podemos encontrar:

Service-Oriented Architecture: Es el patrón que forma la arquitectura de los servicios Web como ya

hemos visto anteriormente.

Architecture Adapter. Se puede ver como un patrón genérico que facilita la comunicación entre

arquitecturas.

Service Directory: Este patrón facilita la transparencia en la localización de servicios, permitiendo realizar

robustas interfaces para encontrar el servicio que realmente s

Adaptación

Estos patrones son los llamados básicos para conocer el funcionamiento del entorno de los Servicios

Web.

En esta categoría nos encontramos:

� Business Object: Un business object engloba a un concepto de negocio del mundo real como

puede ser un cliente, una compañía o un producto, por ejemplo, y lo que pretende este patrón es

trasladar el concepto de objeto de negocio dentro del paradigma de los servicios Web.

� Business Process: Este patrón se utiliza para tratar con procesos de negoc

dos estándares:

o Business Process Execution Lenguaje (BPEL) propuesto por Bea Systems, IBM y Microsoft.

o Business Process Modeling Languaje (BPML) propuesto por el resto de compañías que no

están en el grupo anterior como puede

� Bussines Object Collection: Con este patrón se pueden realizar composiciones de procesos de

negocio.

� Asynchronous Bussines Process: Este patrón es la evolución del patrón anterior Bussines Process.

Para uso exclusivo de los alumnos de CETICSA S.L.

usando distintos algoritmos de encriptación. Cada uno de estos algoritmos de encriptación

puede modelarse como una clase con servicios de encriptación (un método “encriptaMensaje”

que recibe el texto llano y una clave, para devolver un texto cifrado y servicios de

desencriptación (un método “desencriptaMensaje” que recibe una clave y un texto cifrado

para devolver uno descifrado).

Template Method: define en una operación el esqueleto de un algoritmo, delegando en las

subclases algunos de sus pasos. Permite que las subclases redefinan ciertos pasos

Visitor: representa una operación sobre elementos de una estructura de objetos. Permite definir

una nueva operación sin cambiar las clases de los elementos sobre los que opera. Brinda una

le de realizar acciones sobre una familia de clases. Ejemplo: un

compilador interpreta código fuente y lo representa como un árbol de sintaxis abstracta

(Abstract Syntax Tree, AST), el cual cuenta con diversos tipos de nodos (asignaciones, expresiones

icionales, etc.). Sobre este árbol se desean ejecutar algunas operaciones como: revisar que

todas las variables fueron declaradas, chequeos de tipos de datos, generación de código, etc.

Una forma de realizar estas operaciones es mediante la implementación

cual recorrerá toda la estructura del árbol. Cuando un nodo acepte al Visitor, éste invocará al

método de visita definido en el Visitor que toma por parámetro al nodo siendo visitado.

atrones de diseño basados en servicios web

aplicaciones orientadas a servicio utilizando arquitecturas SOA, se han desarrollado

Estos patrones se pueden dividir en cinco categorías:

Es importante entender el entorno de los servicios Web. Dentro de esta categoría podemos encontrar:

Oriented Architecture: Es el patrón que forma la arquitectura de los servicios Web como ya

de ver como un patrón genérico que facilita la comunicación entre

Service Directory: Este patrón facilita la transparencia en la localización de servicios, permitiendo realizar

robustas interfaces para encontrar el servicio que realmente se quiere.

Estos patrones son los llamados básicos para conocer el funcionamiento del entorno de los Servicios

En esta categoría nos encontramos:

Business Object: Un business object engloba a un concepto de negocio del mundo real como

ede ser un cliente, una compañía o un producto, por ejemplo, y lo que pretende este patrón es

trasladar el concepto de objeto de negocio dentro del paradigma de los servicios Web.

Business Process: Este patrón se utiliza para tratar con procesos de negocio. En este momento existen

Business Process Execution Lenguaje (BPEL) propuesto por Bea Systems, IBM y Microsoft.

Business Process Modeling Languaje (BPML) propuesto por el resto de compañías que no

están en el grupo anterior como pueden ser WebMethods, SeeBeyond, etc.

Bussines Object Collection: Con este patrón se pueden realizar composiciones de procesos de

Asynchronous Bussines Process: Este patrón es la evolución del patrón anterior Bussines Process.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

n. Cada uno de estos algoritmos de encriptación

puede modelarse como una clase con servicios de encriptación (un método “encriptaMensaje”

que recibe el texto llano y una clave, para devolver un texto cifrado y servicios de

criptaMensaje” que recibe una clave y un texto cifrado

Template Method: define en una operación el esqueleto de un algoritmo, delegando en las

subclases algunos de sus pasos. Permite que las subclases redefinan ciertos pasos del algoritmo

Visitor: representa una operación sobre elementos de una estructura de objetos. Permite definir

una nueva operación sin cambiar las clases de los elementos sobre los que opera. Brinda una

le de realizar acciones sobre una familia de clases. Ejemplo: un

compilador interpreta código fuente y lo representa como un árbol de sintaxis abstracta

(Abstract Syntax Tree, AST), el cual cuenta con diversos tipos de nodos (asignaciones, expresiones

icionales, etc.). Sobre este árbol se desean ejecutar algunas operaciones como: revisar que

todas las variables fueron declaradas, chequeos de tipos de datos, generación de código, etc.

Una forma de realizar estas operaciones es mediante la implementación del patrón Visitor, el

cual recorrerá toda la estructura del árbol. Cuando un nodo acepte al Visitor, éste invocará al

método de visita definido en el Visitor que toma por parámetro al nodo siendo visitado.

atrones de diseño basados en servicios web

aplicaciones orientadas a servicio utilizando arquitecturas SOA, se han desarrollado

Es importante entender el entorno de los servicios Web. Dentro de esta categoría podemos encontrar:

Oriented Architecture: Es el patrón que forma la arquitectura de los servicios Web como ya

de ver como un patrón genérico que facilita la comunicación entre

Service Directory: Este patrón facilita la transparencia en la localización de servicios, permitiendo realizar

Estos patrones son los llamados básicos para conocer el funcionamiento del entorno de los Servicios

Business Object: Un business object engloba a un concepto de negocio del mundo real como

ede ser un cliente, una compañía o un producto, por ejemplo, y lo que pretende este patrón es

trasladar el concepto de objeto de negocio dentro del paradigma de los servicios Web.

io. En este momento existen

Business Process Execution Lenguaje (BPEL) propuesto por Bea Systems, IBM y Microsoft.

Business Process Modeling Languaje (BPML) propuesto por el resto de compañías que no

n ser WebMethods, SeeBeyond, etc.

Bussines Object Collection: Con este patrón se pueden realizar composiciones de procesos de

Asynchronous Bussines Process: Este patrón es la evolución del patrón anterior Bussines Process.

Page 31: Java Modulo 8

Determinando Cambios

Aunque los servicios Web permiten llamadas asíncronas, las implementaciones del servicio pueden estar

basados en paso de mensajes, también son importantes los servicios basados en eventos, estos patrones

se basan en patrones tradicionales como el Observer

En esta categoría podemos encontrar:

o Event Monitor: Es un patrón para crear formas efectivas para integrar aplicaciones sin la

intervención de otros componentes. El escenario más común donde se utiliza este patrón es

aplicaciones EAI (Enterprise Application Integration).

o Observer Services: Este patrón representa la manera más natural de detectar cambios y actuar

en consecuencia.

o Publish/Subscribe Services: Es la evolución del Observer Pattern, mientras que el pa

se base en el registro, el patrón Publish/Subscribe se base en notificaciones, esto permite que

distintos servicios puedan enviar la misma notificación.

Redefinición

Estos patrones te permiten acceder al comportamiento de un servicio que está implementado en un

lenguaje. Ayudan a entender el entorno del Servicio Web y a moldear este entorno de acuerdo con

nuestras necesidades.

En esta categoría podemos encontrar:

o Physical Tires: Este patrón ayuda a estructurar mejor la lógica de negocio de los servicios Web, e

incluso se puede utilizar para controlar el flujo de negociaciones que puede llegar a producirse

utilizando el patrón Publish/Subscribe.

o Connector: Este patrón se suele utilizar con el anterior para resolver los posibles problemas que

surgen en la subcripción.

o Faux Implementation: Es una alternativa para resolver los problemas que surgen en la utilización

de eventos en los servicios Web. Es simplemente un “socke

aporta las respuestas para los distintos eventos.

Creando flexibilidad

Para crear servicios más flexibles y optimizados.

En esta categoría se encuentran:

o Service Factory: Es uno de los patrones más importantes y permi

aporta flexibilidad en la instanciación de los componentes que crean los servicios Web. Este

patrón también se suele utilizar con el patrón Service Cache para aportar una mayor flexibilidad

en el mantenimiento de las aplicac

las aplicaciones.

o Data Transfer Object: Este patrón aporta rendimiento ya que permite recoger múltiples datos y

enviarlos en una única llamada, reduciendo el número de conexiones que el cliente ti

hacer al servidor.

o Partial Population: Este patrón permite a los clientes seleccionar únicamente los datos que son

necesarios para sus necesidades y sólo recuperar del servidor lo necesario. Este patrón además

de rendimiento aporta mayor ancho de

o Algunos patrones utilizan otros por ejemplo el Business Process Patern usa el Business Object

Patern y el Business Object Collection. Y el Service

Directory y Architecture Adapter.

Para uso exclusivo de los alumnos de CETICSA S.L.

Aunque los servicios Web permiten llamadas asíncronas, las implementaciones del servicio pueden estar

basados en paso de mensajes, también son importantes los servicios basados en eventos, estos patrones

se basan en patrones tradicionales como el Observer o el patrón Publicación/Suscripción.

En esta categoría podemos encontrar:

Event Monitor: Es un patrón para crear formas efectivas para integrar aplicaciones sin la

intervención de otros componentes. El escenario más común donde se utiliza este patrón es

aplicaciones EAI (Enterprise Application Integration).

Observer Services: Este patrón representa la manera más natural de detectar cambios y actuar

Publish/Subscribe Services: Es la evolución del Observer Pattern, mientras que el pa

se base en el registro, el patrón Publish/Subscribe se base en notificaciones, esto permite que

distintos servicios puedan enviar la misma notificación.

Estos patrones te permiten acceder al comportamiento de un servicio que está implementado en un

lenguaje. Ayudan a entender el entorno del Servicio Web y a moldear este entorno de acuerdo con

En esta categoría podemos encontrar:

ical Tires: Este patrón ayuda a estructurar mejor la lógica de negocio de los servicios Web, e

incluso se puede utilizar para controlar el flujo de negociaciones que puede llegar a producirse

utilizando el patrón Publish/Subscribe.

se suele utilizar con el anterior para resolver los posibles problemas que

Faux Implementation: Es una alternativa para resolver los problemas que surgen en la utilización

de eventos en los servicios Web. Es simplemente un “socket abierto” que recibe conexiones y

aporta las respuestas para los distintos eventos.

Para crear servicios más flexibles y optimizados.

Service Factory: Es uno de los patrones más importantes y permite la selección de servicios y

aporta flexibilidad en la instanciación de los componentes que crean los servicios Web. Este

patrón también se suele utilizar con el patrón Service Cache para aportar una mayor flexibilidad

en el mantenimiento de las aplicaciones que utilizan servicios Web, aportando un mayor ROI a

Data Transfer Object: Este patrón aporta rendimiento ya que permite recoger múltiples datos y

enviarlos en una única llamada, reduciendo el número de conexiones que el cliente ti

Partial Population: Este patrón permite a los clientes seleccionar únicamente los datos que son

necesarios para sus necesidades y sólo recuperar del servidor lo necesario. Este patrón además

de rendimiento aporta mayor ancho de banda en la red.

Algunos patrones utilizan otros por ejemplo el Business Process Patern usa el Business Object

Patern y el Business Object Collection. Y el Service-Oriented Architecture usa los patrones Service

Directory y Architecture Adapter.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Aunque los servicios Web permiten llamadas asíncronas, las implementaciones del servicio pueden estar

basados en paso de mensajes, también son importantes los servicios basados en eventos, estos patrones

o el patrón Publicación/Suscripción.

Event Monitor: Es un patrón para crear formas efectivas para integrar aplicaciones sin la

intervención de otros componentes. El escenario más común donde se utiliza este patrón es para

Observer Services: Este patrón representa la manera más natural de detectar cambios y actuar

Publish/Subscribe Services: Es la evolución del Observer Pattern, mientras que el patrón Observer

se base en el registro, el patrón Publish/Subscribe se base en notificaciones, esto permite que

Estos patrones te permiten acceder al comportamiento de un servicio que está implementado en un

lenguaje. Ayudan a entender el entorno del Servicio Web y a moldear este entorno de acuerdo con

ical Tires: Este patrón ayuda a estructurar mejor la lógica de negocio de los servicios Web, e

incluso se puede utilizar para controlar el flujo de negociaciones que puede llegar a producirse

se suele utilizar con el anterior para resolver los posibles problemas que

Faux Implementation: Es una alternativa para resolver los problemas que surgen en la utilización

t abierto” que recibe conexiones y

te la selección de servicios y

aporta flexibilidad en la instanciación de los componentes que crean los servicios Web. Este

patrón también se suele utilizar con el patrón Service Cache para aportar una mayor flexibilidad

iones que utilizan servicios Web, aportando un mayor ROI a

Data Transfer Object: Este patrón aporta rendimiento ya que permite recoger múltiples datos y

enviarlos en una única llamada, reduciendo el número de conexiones que el cliente tiene que

Partial Population: Este patrón permite a los clientes seleccionar únicamente los datos que son

necesarios para sus necesidades y sólo recuperar del servidor lo necesario. Este patrón además

Algunos patrones utilizan otros por ejemplo el Business Process Patern usa el Business Object

Oriented Architecture usa los patrones Service

Page 32: Java Modulo 8

Buenas practicas para desarrollar servicios web SOAP

Es importante conocer las prácticas más recomendables a la hora de desarrollar

Comentaremos en este bloque las prácticas más recomendables:

Analizar qué servicios web y con qué operaciones

Debemos analizar y diseñar servicios web con las responsabilidades bien repartidas, que sean cohesivos,

extensibles, escalables y reutilizables.

Escribe tu mismo el fichero WSDL (

Es el interfaz, el contrato y, en definit

tecnología. Además los generadores de WSDL pueden introducir dependencias con una tecnología

concreta. Por eso merece la pena aprender a escribir WSDL y schemas XSD.

Más eficiente un único mensaje enorme

A la hora de diseñar el interfaz de las operaciones, ten siempre en cuenta que un solo mensaje es

mucho más rápido que el equivalente en multiples

Sé coherente con la nomenclatura de namespaces de la organización

No hay nada que de peor impresión que un servicio web que no ha cuidado los namespaces.

El WSDL debe ser compatible con el WS

El WS-I Basic Profile es un conjunto de especificaciones y buenas prácticas definidas por la industria para

obtener servicios web interoperables

Usa http://localhost:puerto como dirección url del endpoint

Deja que sea el motor de webservices el encargado de sustituirla por la real. Así evitarás tener un fichero

WSDL por entorno.

Separa la definición de los mensajes del fichero WSD

Diseña por separado un schema XSD donde se definan los mensajes y que sea importado por el fichero

WSDL. Las principales ventajas son que se reduce el tamaño/complejidad del WSDL, permite utilizar

editores especializados para el diseño del schema XSD y

Define los mensajes de forma detallada mediante las restricciones de los schemas XSD

De esta forma podrás validar los mensajes a nivel de XML mediante el api XML u OXM que uses, sin

necesidad de implementar código

Crea tipos y elementos globales

A la hora de diseñar el schema XSD, (a nivel raíz) para poder reutilizarlos, tanto a nivel de elementos XML

como clases del lenguaje de implementación del servicio web.

Envio de ficheros adjuntos

Si necesitas enviar ficheros adjuntos (attachments), hazlo a nivel de http attachment y no como un

elemento del mensaje XML.

Automatización

Automatizaremos el proceso de generar el Skeleton y las clases OXM de mensajes del servicio web a

partir del WSDL (wsdl2code).

Programar tus tests a nivel de la clase Skeleton

Para uso exclusivo de los alumnos de CETICSA S.L.

practicas para desarrollar servicios web SOAP

Es importante conocer las prácticas más recomendables a la hora de desarrollar

Comentaremos en este bloque las prácticas más recomendables:

Analizar qué servicios web y con qué operaciones hay que desarrollar

servicios web con las responsabilidades bien repartidas, que sean cohesivos,

extensibles, escalables y reutilizables.

Escribe tu mismo el fichero WSDL (Contract-First)

Es el interfaz, el contrato y, en definitiva, la clave para una interoperabilidad real e independiente de la

tecnología. Además los generadores de WSDL pueden introducir dependencias con una tecnología

Por eso merece la pena aprender a escribir WSDL y schemas XSD.

co mensaje enorme

A la hora de diseñar el interfaz de las operaciones, ten siempre en cuenta que un solo mensaje es

mucho más rápido que el equivalente en multiples mensajes.

Sé coherente con la nomenclatura de namespaces de la organización

de peor impresión que un servicio web que no ha cuidado los namespaces.

El WSDL debe ser compatible con el WS-I Basic Profile

I Basic Profile es un conjunto de especificaciones y buenas prácticas definidas por la industria para

interoperables.

como dirección url del endpoint

Deja que sea el motor de webservices el encargado de sustituirla por la real. Así evitarás tener un fichero

Separa la definición de los mensajes del fichero WSDL.

Diseña por separado un schema XSD donde se definan los mensajes y que sea importado por el fichero

WSDL. Las principales ventajas son que se reduce el tamaño/complejidad del WSDL, permite utilizar

editores especializados para el diseño del schema XSD y permite reutilizar schemas y namespaces.

Define los mensajes de forma detallada mediante las restricciones de los schemas XSD

De esta forma podrás validar los mensajes a nivel de XML mediante el api XML u OXM que uses, sin

propio.

Crea tipos y elementos globales

A la hora de diseñar el schema XSD, (a nivel raíz) para poder reutilizarlos, tanto a nivel de elementos XML

como clases del lenguaje de implementación del servicio web.

r ficheros adjuntos (attachments), hazlo a nivel de http attachment y no como un

Automatizaremos el proceso de generar el Skeleton y las clases OXM de mensajes del servicio web a

ar tus tests a nivel de la clase Skeleton

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

practicas para desarrollar servicios web SOAP

Es importante conocer las prácticas más recomendables a la hora de desarrollar servicios web SOAP.

hay que desarrollar

servicios web con las responsabilidades bien repartidas, que sean cohesivos,

iva, la clave para una interoperabilidad real e independiente de la

tecnología. Además los generadores de WSDL pueden introducir dependencias con una tecnología

A la hora de diseñar el interfaz de las operaciones, ten siempre en cuenta que un solo mensaje es

Sé coherente con la nomenclatura de namespaces de la organización

de peor impresión que un servicio web que no ha cuidado los namespaces.

I Basic Profile es un conjunto de especificaciones y buenas prácticas definidas por la industria para

Deja que sea el motor de webservices el encargado de sustituirla por la real. Así evitarás tener un fichero

Diseña por separado un schema XSD donde se definan los mensajes y que sea importado por el fichero

WSDL. Las principales ventajas son que se reduce el tamaño/complejidad del WSDL, permite utilizar

permite reutilizar schemas y namespaces.

Define los mensajes de forma detallada mediante las restricciones de los schemas XSD

De esta forma podrás validar los mensajes a nivel de XML mediante el api XML u OXM que uses, sin

A la hora de diseñar el schema XSD, (a nivel raíz) para poder reutilizarlos, tanto a nivel de elementos XML

r ficheros adjuntos (attachments), hazlo a nivel de http attachment y no como un

Automatizaremos el proceso de generar el Skeleton y las clases OXM de mensajes del servicio web a

Page 33: Java Modulo 8

Para realizar pruebas unitarias del servicio web no necesitas desplegarlo. Ahorraras mucho tiempo y ya

desplegarás para las pruebas de integración o alguna demo.

Guarda log

El de los mensajes de entrada y salida j

de datos.

Organizando los archives WSDL (Web Services Definition Language)

WSDL es un archivo XML estándar utilizado para describir totalmente un servicio web

� Los archivos WSDL pueden publicarse en un registro UDDI para simplificar su distribución

� La mayoría de las herramientas de desarrollo permiten crear un cliente para un servicio a partir del

archivo WSDL que lo describe.

Un archivo WSDL está dividido en cuatro secciones

� El protocolo (HTTP, JMS, etc.), ubicación del servicio y características del mensaje SOAP

� Las operaciones soportadas por el servicio web

� Los mensajes que intercambian cliente y métodos del servicio web al invocar el servicio

� La estructura de los datos incluídos en los mensajes, descritos usando XML

Los archivos WSDL pueden contener hasta cuatro partes

<definitions>

<types>

Si se intercambian tipos complejos, estos se definen en esta sección y

son referenciados por los mensajes. Un m

referenciado por múltiples mensajes.

</types>

<message>

Un mensaje es la estructura de datos eviado a o regresado por un

servicio. Un mensaje puede ser usado por múltiples ports, por lo que

el resultado de un servicio puede ser el input

</message>

<portType>

Para uso exclusivo de los alumnos de CETICSA S.L.

Para realizar pruebas unitarias del servicio web no necesitas desplegarlo. Ahorraras mucho tiempo y ya

desplegarás para las pruebas de integración o alguna demo.

de los mensajes de entrada y salida junto con datos del cliente (ip, usuario), a nivel de fichero o base

Organizando los archives WSDL (Web Services Definition Language)

WSDL es un archivo XML estándar utilizado para describir totalmente un servicio web

icarse en un registro UDDI para simplificar su distribución

La mayoría de las herramientas de desarrollo permiten crear un cliente para un servicio a partir del

Un archivo WSDL está dividido en cuatro secciones que representan:

El protocolo (HTTP, JMS, etc.), ubicación del servicio y características del mensaje SOAP

Las operaciones soportadas por el servicio web

Los mensajes que intercambian cliente y métodos del servicio web al invocar el servicio

los datos incluídos en los mensajes, descritos usando XML-Schema

Los archivos WSDL pueden contener hasta cuatro partes

Si se intercambian tipos complejos, estos se definen en esta sección y

son referenciados por los mensajes. Un mismo tipo puede ser

referenciado por múltiples mensajes.

Un mensaje es la estructura de datos eviado a o regresado por un

servicio. Un mensaje puede ser usado por múltiples ports, por lo que

el resultado de un servicio puede ser el input de otro servicio.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Para realizar pruebas unitarias del servicio web no necesitas desplegarlo. Ahorraras mucho tiempo y ya

unto con datos del cliente (ip, usuario), a nivel de fichero o base

Organizando los archives WSDL (Web Services Definition Language)

WSDL es un archivo XML estándar utilizado para describir totalmente un servicio web

icarse en un registro UDDI para simplificar su distribución

La mayoría de las herramientas de desarrollo permiten crear un cliente para un servicio a partir del

El protocolo (HTTP, JMS, etc.), ubicación del servicio y características del mensaje SOAP

Los mensajes que intercambian cliente y métodos del servicio web al invocar el servicio

Schema

Page 34: Java Modulo 8

Es en esta sección en la que se describen todas las operaciones del

servicio web con referencias a los mensajes de entrada y salida

enviados y recibidos por cada operación.

</portType>

<binding>

Esta sección define el formato del mensaje SOAP asi como los

protocolos de transporte soportados para accesar el servicio

</binding>

</definitions>

Ejemplo de un archivo WSDL incompleto

<message name="romanNumber">

<part name="term" type="xs:string"/>

</message>

<message name="decimalNumber">

<part name="value" type="xs:nonNegativeInteger"/>

</message>

<portType name="romanNumbers">

<operation name="romanToDecimal">

<input message="romanNumber"/>

<output message="decimalNumber"/>

</operation>

<operation name="decimalToRoma

<input message="decimalNumber"/>

<output message="romanNumber"/>

</operation>

</portType>

Sección de binding para el anterior archivo WSDL

<binding type="romanNumbers" name="rn">

<soap:binding style="document" transport="http://schemas.xmlsoap.org/soa

http" />

<operation>

<soap:operation soapAction="http://

<input>

<soap:body use="literal"/>

</input>

<output>

<soap:body use="literal"/>

</output>

</operation>

<operation>

<soap:operation soapAction="http://ejemplos.com/ejer

<input>

<soap:body use="literal"/>

</input>

<output>

<soap:body use="literal"/>

</output>

</operation>

</binding>

Para uso exclusivo de los alumnos de CETICSA S.L.

Es en esta sección en la que se describen todas las operaciones del

servicio web con referencias a los mensajes de entrada y salida

enviados y recibidos por cada operación.

el formato del mensaje SOAP asi como los

protocolos de transporte soportados para accesar el servicio

Ejemplo de un archivo WSDL incompleto

<part name="term" type="xs:string"/>

name="decimalNumber">

<part name="value" type="xs:nonNegativeInteger"/>

<portType name="romanNumbers">

<operation name="romanToDecimal">

<output message="decimalNumber"/>

<operation name="decimalToRoman">

<input message="decimalNumber"/>

<output message="romanNumber"/>

Sección de binding para el anterior archivo WSDL

<binding type="romanNumbers" name="rn">

<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/

<soap:operation soapAction="http://ejemplos.com/ejer"/>

tion="http://ejemplos.com/ejer"/>

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Page 35: Java Modulo 8

Ver Video:

en el Módulo 8 Unidad 2, en la plataforma elearnig

Laboratorio: Buenas prácticas para desarrollar servicios web

Objetivo

Desarrollar un proyecto Web Service y consumirlo desde un proyecto Java Application.

Enunciado

- Realizar un Servicio Web cuya funcionalidad será convertir Monedas.

- Podremos convertir entre diversas monedas a euros y viceversa, de euros a

- Las Monedas que vamos a convertir son:

� DOLAR = 1,26201 Euros

� PESOS = 14,4762 Euros

� RUPIAS = 75,6061 Euros

� YENES = 135,861 Euros

� PESETAS = 166,386 Euros

CREACIÓN SERVICIO WEB MONEDAS:

Crear dos métodos en el servicio web como se muestra en la imag

Para uso exclusivo de los alumnos de CETICSA S.L.

Ver Video: DiseñandoWS,

en el Módulo 8 Unidad 2, en la plataforma elearnig

Laboratorio: Buenas prácticas para desarrollar servicios web

Desarrollar un proyecto Web Service y consumirlo desde un proyecto Java Application.

Realizar un Servicio Web cuya funcionalidad será convertir Monedas.

Podremos convertir entre diversas monedas a euros y viceversa, de euros a

Las Monedas que vamos a convertir son:

CREACIÓN SERVICIO WEB MONEDAS:

Crear dos métodos en el servicio web como se muestra en la imagen:

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

en el Módulo 8 Unidad 2, en la plataforma elearnig

Laboratorio: Buenas prácticas para desarrollar servicios web SOAP.

Desarrollar un proyecto Web Service y consumirlo desde un proyecto Java Application.

Podremos convertir entre diversas monedas a euros y viceversa, de euros a monedas.

Page 36: Java Modulo 8

Unidad 3: Manejando Excepciones en los Servicios

Objetivos

� Manejar excepciones en servicios web.

� Conocer las excepciones relacionada con los servicios web.

� Utilizar clases de excepciones predefinidas en servicios web.

Introducción

Una excepción es una condición que interrumpe el flujo normal de operaciones dentro de un

programa. Imagina una excepción como una condición de error, un error de programación inesperado,

como una división entre cero o un posible error que ocurra en tiempo

completo" mientras escribe un archivo. Cuando ocurre una excepción, el flujo normal de instrucciones

se rompe. En concreto, se lanza la excepción y el flujo continua en el punto en el que se capturó la

excepción. Al arrojarse la excepción se permite la eliminación del código controlador de excepciones

del flujo regular de operaciones. Si la condición anormal no se controla adecuadamente, pueden

aparecer resultados incorrectos u otras condiciones anormales.

La diferencia entre un buen desarrollo de

en que los errores y problemas se manejan. Es mucho más fácil tratar con los procesos en que todo está

funcionando adecuadamente de lo que es lidiar con los fracasos. Los

estructurados y orientado a objetos proporcionan

Java, los métodos que suelen producir una excepción que indica que

software se escribe para esperar ciertos tipos de errores, y está dispuesta a tomar las medidas oportunas.

En la terminología de SOAP, estos inusuales o

producen cada vez que un método de servicio no es

devuelven resultados correctamente. Hay infinitas razones por qué

comunes que resultan en fallos son

problemas de fondo, y con formato incorrecto mensajes de pet

mecanismos para la generación y el tratamiento de fallos en SOAP

Para uso exclusivo de los alumnos de CETICSA S.L.

Manejando Excepciones en los Servicios

Web

Manejar excepciones en servicios web.

Conocer las excepciones relacionada con los servicios web.

Utilizar clases de excepciones predefinidas en servicios web.

Una excepción es una condición que interrumpe el flujo normal de operaciones dentro de un

programa. Imagina una excepción como una condición de error, un error de programación inesperado,

como una división entre cero o un posible error que ocurra en tiempo de ejecución, como un "disco

completo" mientras escribe un archivo. Cuando ocurre una excepción, el flujo normal de instrucciones

se rompe. En concreto, se lanza la excepción y el flujo continua en el punto en el que se capturó la

la excepción se permite la eliminación del código controlador de excepciones

del flujo regular de operaciones. Si la condición anormal no se controla adecuadamente, pueden

aparecer resultados incorrectos u otras condiciones anormales.

desarrollo de software y un mal desarrollo desoftware e

problemas se manejan. Es mucho más fácil tratar con los procesos en que todo está

adecuadamente de lo que es lidiar con los fracasos. Los lenguajes de programación

y orientado a objetos proporcionan un montón de técnicas para el manejo de errores. En

Java, los métodos que suelen producir una excepción que indica que algo raro ha ocurrido. Un buen

r ciertos tipos de errores, y está dispuesta a tomar las medidas oportunas.

En la terminología de SOAP, estos inusuales o circunstancias excepcionales, se llaman

producen cada vez que un método de servicio no es capaz de procesar los parámetros de entrada y

devuelven resultados correctamente. Hay infinitas razones por qué esto puede ocurrir. Los problemas

comunes que resultan en fallos son el paso de parámetro

problemas de fondo, y con formato incorrecto mensajes de petición SOAP. En esta

mecanismos para la generación y el tratamiento de fallos en SOAP.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Manejando Excepciones en los Servicios

Una excepción es una condición que interrumpe el flujo normal de operaciones dentro de un

programa. Imagina una excepción como una condición de error, un error de programación inesperado,

de ejecución, como un "disco

completo" mientras escribe un archivo. Cuando ocurre una excepción, el flujo normal de instrucciones

se rompe. En concreto, se lanza la excepción y el flujo continua en el punto en el que se capturó la

la excepción se permite la eliminación del código controlador de excepciones

del flujo regular de operaciones. Si la condición anormal no se controla adecuadamente, pueden

y un mal desarrollo desoftware es a menudo la forma

problemas se manejan. Es mucho más fácil tratar con los procesos en que todo está

lenguajes de programación

un montón de técnicas para el manejo de errores. En

algo raro ha ocurrido. Un buen

r ciertos tipos de errores, y está dispuesta a tomar las medidas oportunas.

circunstancias excepcionales, se llaman fallos. Los fallos se

parámetros de entrada y

esto puede ocurrir. Los problemas

parámetros a los métodos,

SOAP. En esta unidad veremos los

Page 37: Java Modulo 8

Las excepciones podrían ser lanzad

de excepciones que puedan ser lanzados son RuntimeException, RemoteException, SOAPFaultException

y excepciones definidas por el usuario.

El desarrollador de servicios Web podrían intentar lanzar una RuntimeException como

NullPointerException o ArrayIndexOutOfBou

RuntimeException lanzar dentro del servicio Web se considera un ejercicio malo porque

RuntimeException siempre se convertirá en RemoteException en el lado del cliente. Mientras que el

cliente está esperando a coger el RuntimeException después de invocar un servicio Web, recibirá sólo el

RemoteException en lugar de RuntimeException. Finalmente, no puede realizar un correcto manejo de

RuntimeException.

El problema con el lanzamiento de RemoteException es que las

diferentes a interpretar esta excepción en formas diferentes. No es portátil.

SOAPFaultException

La excepción SOAPFaultException representa lo errores producidos

Un SOAPFaultException envuelve un

de errores.El método createFault de javax.xml.soap.SOAPFactory puede utilizarse para crear una

instancia de javax.xml.soap.SOAPFault para uso con el constructor. SOAPBinding contiene un descr

de acceso para los SOAPFactory utilizado por la instancia de enlace.

Tenga en cuenta que el valor de getFault es la única parte de la excepción que se utiliza cuando se

searializa un error de SOAP.

La excepción que proceda la aplicación de servicio Web podría lanzar es SOAPFaultException. El

SOAPFaultException consta de cuatro partes: faultcode, faultstring, el actor, y el detalle. Esta excepción

le puede dar la información completa acerca de la co

error que ha sucedido a causa de el servidor, cliente, o algo más. Por ejemplo, cuando un cliente no

proporciona la información de seguridad, tales como nombre de usuario y contraseña en el HTTP /

encabezado SOAP, pero los mandatos servicio de ellos, la lógica de tratamiento previo en la

implementación del servicio, obviamente, podría desencadenarse una excepción de autenticación.

Este tipo de error es considerado como un error del cliente. El faultstr

correspondiente de la condición de error que ha sucedido. Este mensaje de cadena es legible por

humanos y el desarrollador puede depurar el problema con la ayuda de la misma. El elemento de

detalle contiene el mensaje de excep

Para uso exclusivo de los alumnos de CETICSA S.L.

Tipos de excepciones con servicios web

Las excepciones podrían ser lanzadas dentro de un servicio Web por diversas razones. Los posibles tipos

epciones que puedan ser lanzados son RuntimeException, RemoteException, SOAPFaultException

y excepciones definidas por el usuario.

El desarrollador de servicios Web podrían intentar lanzar una RuntimeException como

NullPointerException o ArrayIndexOutOfBoundsException dentro del servicio Web. Pero,

RuntimeException lanzar dentro del servicio Web se considera un ejercicio malo porque

RuntimeException siempre se convertirá en RemoteException en el lado del cliente. Mientras que el

oger el RuntimeException después de invocar un servicio Web, recibirá sólo el

RemoteException en lugar de RuntimeException. Finalmente, no puede realizar un correcto manejo de

El problema con el lanzamiento de RemoteException es que las bibliotecas de cliente secundarios

diferentes a interpretar esta excepción en formas diferentes. No es portátil.

La excepción SOAPFaultException representa lo errores producidos por SOAP 1.1 o 1.2.

Un SOAPFaultException envuelve un SAAJ SOAPFault que administra la representación SOAP específica

de errores.El método createFault de javax.xml.soap.SOAPFactory puede utilizarse para crear una

instancia de javax.xml.soap.SOAPFault para uso con el constructor. SOAPBinding contiene un descr

de acceso para los SOAPFactory utilizado por la instancia de enlace.

Tenga en cuenta que el valor de getFault es la única parte de la excepción que se utiliza cuando se

La excepción que proceda la aplicación de servicio Web podría lanzar es SOAPFaultException. El

SOAPFaultException consta de cuatro partes: faultcode, faultstring, el actor, y el detalle. Esta excepción

le puede dar la información completa acerca de la condición de error. El faultcode le puede decir si el

error que ha sucedido a causa de el servidor, cliente, o algo más. Por ejemplo, cuando un cliente no

proporciona la información de seguridad, tales como nombre de usuario y contraseña en el HTTP /

ezado SOAP, pero los mandatos servicio de ellos, la lógica de tratamiento previo en la

implementación del servicio, obviamente, podría desencadenarse una excepción de autenticación.

Este tipo de error es considerado como un error del cliente. El faultstring contiene la descripción

correspondiente de la condición de error que ha sucedido. Este mensaje de cadena es legible por

humanos y el desarrollador puede depurar el problema con la ayuda de la misma. El elemento de

detalle contiene el mensaje de excepción real y su completo seguimiento de la pila. En realidad, el

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

con servicios web

s dentro de un servicio Web por diversas razones. Los posibles tipos

epciones que puedan ser lanzados son RuntimeException, RemoteException, SOAPFaultException

El desarrollador de servicios Web podrían intentar lanzar una RuntimeException como

ndsException dentro del servicio Web. Pero,

RuntimeException lanzar dentro del servicio Web se considera un ejercicio malo porque

RuntimeException siempre se convertirá en RemoteException en el lado del cliente. Mientras que el

oger el RuntimeException después de invocar un servicio Web, recibirá sólo el

RemoteException en lugar de RuntimeException. Finalmente, no puede realizar un correcto manejo de

bibliotecas de cliente secundarios

SOAP 1.1 o 1.2.

SAAJ SOAPFault que administra la representación SOAP específica

de errores.El método createFault de javax.xml.soap.SOAPFactory puede utilizarse para crear una

instancia de javax.xml.soap.SOAPFault para uso con el constructor. SOAPBinding contiene un descriptor

Tenga en cuenta que el valor de getFault es la única parte de la excepción que se utiliza cuando se

La excepción que proceda la aplicación de servicio Web podría lanzar es SOAPFaultException. El

SOAPFaultException consta de cuatro partes: faultcode, faultstring, el actor, y el detalle. Esta excepción

ndición de error. El faultcode le puede decir si el

error que ha sucedido a causa de el servidor, cliente, o algo más. Por ejemplo, cuando un cliente no

proporciona la información de seguridad, tales como nombre de usuario y contraseña en el HTTP /

ezado SOAP, pero los mandatos servicio de ellos, la lógica de tratamiento previo en la

implementación del servicio, obviamente, podría desencadenarse una excepción de autenticación.

ing contiene la descripción

correspondiente de la condición de error que ha sucedido. Este mensaje de cadena es legible por

humanos y el desarrollador puede depurar el problema con la ayuda de la misma. El elemento de

ción real y su completo seguimiento de la pila. En realidad, el

Page 38: Java Modulo 8

elemento de detalle es una instancia de la clase javax.xml.soap.Detail y se pueden crear utilizando el

API javax.xml.soap.SOAPFactory.createDetail ().

Ejemplo de control de Excepción

Creación del servicio

Abrir NetBeans y elegir un proyecto nuevo de tipo aplicación web.

Seleccionamos usar el proyecto con Apache Tomcat

Para uso exclusivo de los alumnos de CETICSA S.L.

elemento de detalle es una instancia de la clase javax.xml.soap.Detail y se pueden crear utilizando el

API javax.xml.soap.SOAPFactory.createDetail ().

Ejemplo de control de Excepción SOAPFaultException

Abrir NetBeans y elegir un proyecto nuevo de tipo aplicación web.

Seleccionamos usar el proyecto con Apache Tomcat

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

elemento de detalle es una instancia de la clase javax.xml.soap.Detail y se pueden crear utilizando el

Page 39: Java Modulo 8

Y por último, no seleccinamos nngún Framework.

Agregamos a nuestro proyecto un archivo de tipo Web

WSSumando y elegimos File, new y Web Service.

Para uso exclusivo de los alumnos de CETICSA S.L.

Y por último, no seleccinamos nngún Framework.

Agregamos a nuestro proyecto un archivo de tipo Web Service. Botón derecho sobre nuestro proyecto

WSSumando y elegimos File, new y Web Service.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Service. Botón derecho sobre nuestro proyecto

Page 40: Java Modulo 8

Indicamos que lo guarde en el paquete ControlExcepciones.

Añadimos tres operaciones al servicio como se muestra en el diseñadore de WebService:

El código que incluiremos en los tres métodos que compone nuestro WebService, serán operaciones

para sumar, restar y multiuplicar dos números introducidos como parámetros.

Para uso exclusivo de los alumnos de CETICSA S.L.

Indicamos que lo guarde en el paquete ControlExcepciones.

Añadimos tres operaciones al servicio como se muestra en el diseñadore de WebService:

código que incluiremos en los tres métodos que compone nuestro WebService, serán operaciones

para sumar, restar y multiuplicar dos números introducidos como parámetros.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Añadimos tres operaciones al servicio como se muestra en el diseñadore de WebService:

código que incluiremos en los tres métodos que compone nuestro WebService, serán operaciones

Page 41: Java Modulo 8

package ControlExcepciones;

import javax.jws.WebMethod;

import javax.jws.WebParam;

import javax.jws.WebService;

@WebService()

public class WSSumador {

@WebMethod(operationName = "sumar", action = "sumar")

public int sumar(@WebParam(name="a") int a, @WebParam(name="b") int b)

{

return a + b;

}

@WebMethod(operationName = "restar", action = "restar")

public int restar(@WebParam(name="a") int a, @WebParam(name="b") int b)

{

return a - b;

}

@WebMethod (operationName = "multiplicar")

public int multiplicar (@WebParam(name="x") int a, @WebParam(name="b") int b)

{

return a * b;

}

}

Consumir el servicio

Creamos un proyecto web con NetBeans y los llamamos ConsumirWsSumador.

Para uso exclusivo de los alumnos de CETICSA S.L.

@WebMethod(operationName = "sumar", action = "sumar")

public int sumar(@WebParam(name="a") int a, @WebParam(name="b") int b)

@WebMethod(operationName = "restar", action = "restar")

public int restar(@WebParam(name="a") int a, @WebParam(name="b") int b)

@WebMethod (operationName = "multiplicar")

c int multiplicar (@WebParam(name="x") int a, @WebParam(name="b") int b)

Creamos un proyecto web con NetBeans y los llamamos ConsumirWsSumador.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

public int sumar(@WebParam(name="a") int a, @WebParam(name="b") int b)

public int restar(@WebParam(name="a") int a, @WebParam(name="b") int b)

c int multiplicar (@WebParam(name="x") int a, @WebParam(name="b") int b)

Page 42: Java Modulo 8

Seleccionamos el servidor Apache Tomcat.

Dejamos sin seleccionar Framework.

Añadiremos a nuestro proyecto web un archivo de tipo Web Service Client, nos pedirá el Web Sevrvice

al que nos queremos conectar; pulsaremos sobre la opción proyect, examinaremos y seleccionaremos

el Web Service WSSumador.

Para uso exclusivo de los alumnos de CETICSA S.L.

Tomcat.

Dejamos sin seleccionar Framework.

Añadiremos a nuestro proyecto web un archivo de tipo Web Service Client, nos pedirá el Web Sevrvice

al que nos queremos conectar; pulsaremos sobre la opción proyect, examinaremos y seleccionaremos

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Añadiremos a nuestro proyecto web un archivo de tipo Web Service Client, nos pedirá el Web Sevrvice

al que nos queremos conectar; pulsaremos sobre la opción proyect, examinaremos y seleccionaremos

Page 43: Java Modulo 8

El archivo WSDL que generará:

<?xml version='1.0' encoding='UTF-8'?><!

version is JAX-WS _

RI 2.2-hudson-740-. --><!-- Generated by JAX

2.2-hudson-740-._

--><definitions xmlns:wsu="http://docs.oasis

1.0.xsd" xmlns:wsp_

="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/po

xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"

xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

xmlns:tns="http://ControlExcepciones/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns="http://schemas.xmlsoap.org/wsdl/" targetNam

name="WSSumadorService">

<types>

<xsd:schema>

<xsd:import namespace="http://ControlExcepciones/"

schemaLocation="http://localhost:8084/WSSumador/WSSumador?xsd=1" />

</xsd:schema>

</types>

<message name="sumar">

<part name="parameters" element="tns:sumar" />

</message>

<message name="sumarResponse">

<part name="parameters" element="tns:sumarResponse" />

</message>

<message name="restar">

<part name="parameters" element="tns:restar" />

</message>

<message name="restarResponse">

<part name="parameters" element="tns:restarResponse" />

</message>

<message name="multiplicar">

<part name="parameters" element="tns:multiplicar" />

Para uso exclusivo de los alumnos de CETICSA S.L.

8'?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's

Generated by JAX-WS RI at http://jax-ws.dev.java.net.

><definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-

policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/po

xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"

xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" _

xmlns:tns="http://ControlExcepciones/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://ControlExcepciones/"

<xsd:import namespace="http://ControlExcepciones/"

schemaLocation="http://localhost:8084/WSSumador/WSSumador?xsd=1" />

ame="parameters" element="tns:sumar" />

<message name="sumarResponse">

<part name="parameters" element="tns:sumarResponse" />

<part name="parameters" element="tns:restar" />

<part name="parameters" element="tns:restarResponse" />

<part name="parameters" element="tns:multiplicar" />

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

ws.dev.java.net. RI's

RI's version is JAX-WS RI

-wss-wssecurity-utility-

policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" _

xmlns:tns="http://ControlExcepciones/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" _

espace="http://ControlExcepciones/" _

Page 44: Java Modulo 8

</message>

<message name="multiplicarResponse">

<part name="parameters" element="tns

</message>

<portType name="WSSumador">

<operation name="sumar">

<input wsam:Action="sumar" message="tns:sumar" />

<output wsam:Action="http://ControlExcepciones/WSSumador/sumarResponse"

message="tns:sumarResponse" />

</operation>

<operation name="restar">

<input wsam:Action="restar" message="tns:restar" />

<output wsam:Action="http://ControlExcepciones/WSSumador/restarResponse"

message="tns:restarResponse" />

</operation>

<operation name="multiplicar">

<input wsam:Action="http://ControlExcepciones/WSSumador/multiplicarRequest"

message="tns:multiplicar" />

<output wsam:Action="http://ControlExcepciones/WSSumador/multiplicarResponse"

message="tns:multiplicarResponse" />

</operation>

</portType>

<binding name="WSSumadorPortBinding" type

<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />

<operation name="sumar">

<soap:operation soapAction="sumar" />

<input>

<soap:body use="literal" />

</input>

<output>

<soap:body use="literal" />

</output>

</operation>

<operation name="restar">

<soap:operation soapAction="restar" />

<input>

<soap:body use="literal" />

</input>

<output>

<soap:body use="literal" />

</output>

</operation>

<operation name="multiplicar">

<soap:operation soapAction="" />

<input>

<soap:body use="literal" />

</input>

<output>

<soap:body use="literal" />

</output>

</operation>

</binding>

<service name="WSSumadorService">

Para uso exclusivo de los alumnos de CETICSA S.L.

<message name="multiplicarResponse">

<part name="parameters" element="tns:multiplicarResponse" />

<input wsam:Action="sumar" message="tns:sumar" />

<output wsam:Action="http://ControlExcepciones/WSSumador/sumarResponse"

<input wsam:Action="restar" message="tns:restar" />

<output wsam:Action="http://ControlExcepciones/WSSumador/restarResponse"

trolExcepciones/WSSumador/multiplicarRequest"

<output wsam:Action="http://ControlExcepciones/WSSumador/multiplicarResponse"

message="tns:multiplicarResponse" />

<binding name="WSSumadorPortBinding" type="tns:WSSumador">

<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />

<soap:operation soapAction="sumar" />

<soap:operation soapAction="restar" />

<service name="WSSumadorService">

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

trolExcepciones/WSSumador/multiplicarRequest"

<output wsam:Action="http://ControlExcepciones/WSSumador/multiplicarResponse"

<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />

Page 45: Java Modulo 8

<port name="WSSumadorPort" binding="tns:WSSumadorPortBinding">

<soap:address location="http://localhost:8084/WSSumador/WSSumador" />

</port>

</service>

</definitions>

Agregaremos una página html a nuestro proyecto para que el usuarko introduzca en dos cajas de texto

los parámetros a pasar a los métodos del WebService.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title></title>

<meta http-equiv="Content-Type" content="text/html; charset=UTF

</head>

<body>

<h1>Control de excepciones en WebServices</h1>

<form name="form1" action="resultado.jsp">

<input type="text" name="caja1" size="3"/>+

<input type="text" name="caja2" size="3"/>=

<input type="submit" value="Enviar"/>

</form>

</body>

Al pulsar sobre el botón de submit, llamaremos una página jsp que será la encargada de recoger los

valores introducidos en las dos cajas de texto y consumir el método sumar de nuestro Web Service.

Al solicitar el Web Service, comprobaremos como estamos controlando la excepción

SOAPFaultException, ésta exception se puede producir habitualmente en el consumo de servicios web si

se produce un error al intentar autenticarnos, realizar solicitudes,…

Para uso exclusivo de los alumnos de CETICSA S.L.

<port name="WSSumadorPort" binding="tns:WSSumadorPortBinding">

location="http://localhost:8084/WSSumador/WSSumador" />

Agregaremos una página html a nuestro proyecto para que el usuarko introduzca en dos cajas de texto

los parámetros a pasar a los métodos del WebService.

//W3C//DTD HTML 4.01 Transitional//EN">

Type" content="text/html; charset=UTF-8">

<h1>Control de excepciones en WebServices</h1>

form1" action="resultado.jsp">

<input type="text" name="caja1" size="3"/>+

<input type="text" name="caja2" size="3"/>=

<input type="submit" value="Enviar"/>

submit, llamaremos una página jsp que será la encargada de recoger los

valores introducidos en las dos cajas de texto y consumir el método sumar de nuestro Web Service.

Al solicitar el Web Service, comprobaremos como estamos controlando la excepción

, ésta exception se puede producir habitualmente en el consumo de servicios web si

se produce un error al intentar autenticarnos, realizar solicitudes,…

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Agregaremos una página html a nuestro proyecto para que el usuarko introduzca en dos cajas de texto

submit, llamaremos una página jsp que será la encargada de recoger los

valores introducidos en las dos cajas de texto y consumir el método sumar de nuestro Web Service.

Al solicitar el Web Service, comprobaremos como estamos controlando la excepción

, ésta exception se puede producir habitualmente en el consumo de servicios web si

Page 46: Java Modulo 8

<%@page contentType="text/html" pageEncoding="UTF

import="javax.xml.rpc.soap.SOAPFaultException"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF

<title>JSP Page</title>

</head>

<body>

<h1>RESULTADO: </h1>

<%

try{

int a = Integer.parseInt(request.getParameter("caja1"));

int b = Integer.parseInt(request.getParameter("caja2"));

controlexcepciones.WSSumadorService service = new controlexcepciones.WSSumadorService();

controlexcepciones.WSSumador port = service.getWSSumadorPort();

out.println(port.sumar(a, b));

} catch (SOAPFaultException se) {out.println("Fallo de autenticación");

out.println(""); out.println(se); }%>

</body>

</html>

Para uso exclusivo de los alumnos de CETICSA S.L.

<%@page contentType="text/html" pageEncoding="UTF-8"

import="javax.xml.rpc.soap.SOAPFaultException"%>

//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

Type" content="text/html; charset=UTF-8">

int a = Integer.parseInt(request.getParameter("caja1"));

int b = Integer.parseInt(request.getParameter("caja2"));

trolexcepciones.WSSumadorService service = new controlexcepciones.WSSumadorService();

controlexcepciones.WSSumador port = service.getWSSumadorPort();

} catch (SOAPFaultException se) {out.println("Fallo de autenticación");

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

trolexcepciones.WSSumadorService service = new controlexcepciones.WSSumadorService();

Page 47: Java Modulo 8

Aunque SOAPFaultException da la información necesaria que se necesita para depurar el problema, el

cliente de servicio Web puede que quiera realizar algo más con el error que se ha producido. La opción

que disponemos es tener tener una descripción de texto

produjo. La otra posibilidad podría ser la de contar con el apoyo de internacionalización de los

mensajes de error. Al proporcionar la descripción de texto en idiomas distintos del Inglés, se podría tratar

de responder a las necesidades de todos los grupos de personas.

Para lograr los objetivos podríamos recurrir a una excepción definida por el usuario con un formato

específico que fuera lanzado en el servicio. La excepción defi

servicio Web está mapeada en el elemento wsdl: fallo en el Web Services Description Language (WSDL)

del servicio web. Se podía ver el elemento de culpa como uno de los elementos secundarios del

elemento de operación de la portType. Los otros dos elementos secundarios de la operación son de

entrada y salida.

El elemento fault, define el formato de resumen del mensaje de error que pueden ser lanzados por el

servicio Web.

El elemento wsdl:messages relativos a WSDL:fau

del mensaje podría ser un XMLType complexType o simple.

En el siguiente ejemplo incluimos una excepción definida por el usuario, MyCustomException, se

dedicará a manejar mejor los mensajes de error.

apropiado que es como se define en la definición WSDL.

siguientes:

Código de error, que contiene una de cinco letras identificativo y un identificador de tres

Por ejemplo, GENEX001 podría significar un error genérico, mientras que AUTEX001 podría significar un

error de autenticación.

Texto descriptivo del error, incluyendo variables de sustitución (mencionado como {0}, {1}, y así

sucesivamente)

Por ejemplo, la descripción de texto correspondiente Código de error GENEX001 será algo así como "El

número que ha introducido es {0}."

Una lista de valores correspondientes a las variables de sustitución se define en el texto anterior.

Por ejemplo, para el caso anterior, la lista de variables que contienen un solo valor (por ejemplo 1)

porque la descripción del texto anterior contiene sólo una variable de sustitución.

Después de procesar el texto usando la lógica pertinentes, la descripción del texto fina

que ha introducido es 1."

Los fallos pueden ser identificados, utilizando el código de error, sin necesidad de aplicaciones, y

además se podrá comprender el independientemente del idioma.

La descripción del texto se puede definir en muc

colocar en consecuencia de manera independiente del lenguaje.

Los servicios web ofrecen soporte de internacionalización.

Las excepciones lanzadas deben usar la anotación javax.xml.ws.WebFault

name: nombre en wsdl.

targetNamespace. Espacio de nombres en wsdl.

Por la forma en la que JAX-WS define el mapping de Exceptions java a WSDL y viceversa, es

conveniente que las Excepciones utilizadas cumplan las siguientes reglas:

Para uso exclusivo de los alumnos de CETICSA S.L.

Excepciones predefinidas en servicios web

Aunque SOAPFaultException da la información necesaria que se necesita para depurar el problema, el

cliente de servicio Web puede que quiera realizar algo más con el error que se ha producido. La opción

que disponemos es tener tener una descripción de texto configurables y dinámica del error que se

produjo. La otra posibilidad podría ser la de contar con el apoyo de internacionalización de los

mensajes de error. Al proporcionar la descripción de texto en idiomas distintos del Inglés, se podría tratar

sponder a las necesidades de todos los grupos de personas. La lista puede crecer más y más.

Para lograr los objetivos podríamos recurrir a una excepción definida por el usuario con un formato

específico que fuera lanzado en el servicio. La excepción definida por el usuario lanzado dentro del

servicio Web está mapeada en el elemento wsdl: fallo en el Web Services Description Language (WSDL)

del servicio web. Se podía ver el elemento de culpa como uno de los elementos secundarios del

de la portType. Los otros dos elementos secundarios de la operación son de

El elemento fault, define el formato de resumen del mensaje de error que pueden ser lanzados por el

El elemento wsdl:messages relativos a WSDL:fault sólo puede contener una parte del mensaje, y la parte

del mensaje podría ser un XMLType complexType o simple.

En el siguiente ejemplo incluimos una excepción definida por el usuario, MyCustomException, se

dedicará a manejar mejor los mensajes de error. El MyCustomException contiene un mensaje de error

apropiado que es como se define en la definición WSDL. El mensaje de error contiene las tres partes

Código de error, que contiene una de cinco letras identificativo y un identificador de tres

Por ejemplo, GENEX001 podría significar un error genérico, mientras que AUTEX001 podría significar un

Texto descriptivo del error, incluyendo variables de sustitución (mencionado como {0}, {1}, y así

ejemplo, la descripción de texto correspondiente Código de error GENEX001 será algo así como "El

Una lista de valores correspondientes a las variables de sustitución se define en el texto anterior.

caso anterior, la lista de variables que contienen un solo valor (por ejemplo 1)

porque la descripción del texto anterior contiene sólo una variable de sustitución.

Después de procesar el texto usando la lógica pertinentes, la descripción del texto fina

Los fallos pueden ser identificados, utilizando el código de error, sin necesidad de aplicaciones, y

además se podrá comprender el independientemente del idioma.

La descripción del texto se puede definir en muchos idiomas, y las variables correspondientes se pueden

colocar en consecuencia de manera independiente del lenguaje.

Los servicios web ofrecen soporte de internacionalización.

Las excepciones lanzadas deben usar la anotación javax.xml.ws.WebFault

targetNamespace. Espacio de nombres en wsdl.

WS define el mapping de Exceptions java a WSDL y viceversa, es

conveniente que las Excepciones utilizadas cumplan las siguientes reglas:

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Excepciones predefinidas en servicios web

Aunque SOAPFaultException da la información necesaria que se necesita para depurar el problema, el

cliente de servicio Web puede que quiera realizar algo más con el error que se ha producido. La opción

configurables y dinámica del error que se

produjo. La otra posibilidad podría ser la de contar con el apoyo de internacionalización de los

mensajes de error. Al proporcionar la descripción de texto en idiomas distintos del Inglés, se podría tratar

La lista puede crecer más y más.

Para lograr los objetivos podríamos recurrir a una excepción definida por el usuario con un formato

nida por el usuario lanzado dentro del

servicio Web está mapeada en el elemento wsdl: fallo en el Web Services Description Language (WSDL)

del servicio web. Se podía ver el elemento de culpa como uno de los elementos secundarios del

de la portType. Los otros dos elementos secundarios de la operación son de

El elemento fault, define el formato de resumen del mensaje de error que pueden ser lanzados por el

lt sólo puede contener una parte del mensaje, y la parte

En el siguiente ejemplo incluimos una excepción definida por el usuario, MyCustomException, se

El MyCustomException contiene un mensaje de error

El mensaje de error contiene las tres partes

Código de error, que contiene una de cinco letras identificativo y un identificador de tres dígitos

Por ejemplo, GENEX001 podría significar un error genérico, mientras que AUTEX001 podría significar un

Texto descriptivo del error, incluyendo variables de sustitución (mencionado como {0}, {1}, y así

ejemplo, la descripción de texto correspondiente Código de error GENEX001 será algo así como "El

Una lista de valores correspondientes a las variables de sustitución se define en el texto anterior.

caso anterior, la lista de variables que contienen un solo valor (por ejemplo 1)

porque la descripción del texto anterior contiene sólo una variable de sustitución.

Después de procesar el texto usando la lógica pertinentes, la descripción del texto final sería "El número

Los fallos pueden ser identificados, utilizando el código de error, sin necesidad de aplicaciones, y

hos idiomas, y las variables correspondientes se pueden

WS define el mapping de Exceptions java a WSDL y viceversa, es

Page 48: Java Modulo 8

La información encapsulada en la Excepción debe ir en un objeto separado.

Este objeto debe ser obtenido a través del método getFaultInfo.

De esta forma, las excepciones lanzadas por los stubs del cliente serán iguales que las usadas en el

servicio.

Ejemplo de servicio web con manejo de

Este servicio tiene dos entradas: int numero y el mensaje de cadena. Si el número es 1,se lanzará un

SOAPFaultException. Si el número es 2, MyCustomException será lanzado, de lo contrario, el método

devolverá éxito.

package nuevo;

import javax.xml.soap.SOAPException;

import javax.xml.soap.SOAPFactory;

import javax.xml.soap.Detail;

public class NewWebService{

public String echo(int number, String message)

throws MyCustomException{

System.out.println("Numero: "+number+",

switch(number){

case 2:

throw new MyCustomException(

"GENEX001",

"El número que ha introducido es {0}",

new String[]{String.valueOf(number)}

);

case 1:

Detail detail = null;

try{

detail = SOAPFactory.newInstance().createDetail();

//añadir mensajes de error

detail.addTextNode(

"Opción SOAPFaultException");

}catch(SOAPException ex){

throw new MyCustomException(

"SEREX001",

"Error al crear el elemento",

new String(){});

}

throw new javax.xml.rpc.soap.SOAPFaultException(

new javax.xml.namespace.QName("env.Server"),

"El número que ha introducido es "+number,

"NO ACTOR",

detail);

}

return "SUCCESS";

}

}

Para uso exclusivo de los alumnos de CETICSA S.L.

Excepción debe ir en un objeto separado.

Este objeto debe ser obtenido a través del método getFaultInfo.

De esta forma, las excepciones lanzadas por los stubs del cliente serán iguales que las usadas en el

Ejemplo de servicio web con manejo de excepciones

Este servicio tiene dos entradas: int numero y el mensaje de cadena. Si el número es 1,se lanzará un

SOAPFaultException. Si el número es 2, MyCustomException será lanzado, de lo contrario, el método

javax.xml.soap.SOAPException;

import javax.xml.soap.SOAPFactory;

public String echo(int number, String message)

System.out.println("Numero: "+number+", Mensaje: " + message);

throw new MyCustomException(

"El número que ha introducido es {0}",

new String[]{String.valueOf(number)}

detail = SOAPFactory.newInstance().createDetail();

"Opción SOAPFaultException");

throw new MyCustomException(

"Error al crear el elemento",

new javax.xml.rpc.soap.SOAPFaultException(

new javax.xml.namespace.QName("env.Server"),

"El número que ha introducido es "+number,

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

De esta forma, las excepciones lanzadas por los stubs del cliente serán iguales que las usadas en el

Este servicio tiene dos entradas: int numero y el mensaje de cadena. Si el número es 1,se lanzará un

SOAPFaultException. Si el número es 2, MyCustomException será lanzado, de lo contrario, el método

Page 49: Java Modulo 8

Excepciones personalizadas en Servicios Web

En Java podemos crear una excepción propia creanco una clase que extienda de la clase Exception.

En este ejemplo creamos una exception llama OpcionErroneaException que hereda de la clase

exception.

public class OpcionErroneaException extends Exception{

public OpcionErroneaException(){

}

public String mensaje(){

return("OPCION ERRONEA");

}

}

Podemos crear una clase en Java que lance la excepción creada por el programador.

public class LeerDatos3{

public static void main(String args[]) throws IOException{

BufferedReader teclado=new BufferedReader(new InputStreamReader(System.in));

String numero="";

String continua="";

try{

do{

System.out.println("Introduzca un numero:");

if (num%2==0){

}else{

System.out.println("El numero: "+ num +" es impar");

}

System.out.println("¿Desea continuar (s/n)?");

continua= teclado.readLine();

if(!continua.equals("s") && !continua.equals("n")){

throw new OpcionErroneaException();

}

}while (continua.equals("s") || continua.equals("S"));

//Para compara se pone .equals

}catch (NumberFormatException e){

System.out.println("Debe introducir numeros");

}catch (OpcionErroneaException e){

Para uso exclusivo de los alumnos de CETICSA S.L.

cepciones personalizadas en Servicios Web

En Java podemos crear una excepción propia creanco una clase que extienda de la clase Exception.

En este ejemplo creamos una exception llama OpcionErroneaException que hereda de la clase

ionErroneaException extends Exception{

public OpcionErroneaException(){

return("OPCION ERRONEA");

Podemos crear una clase en Java que lance la excepción creada por el programador.

static void main(String args[]) throws IOException{

BufferedReader teclado=new BufferedReader(new InputStreamReader(System.in));

System.out.println("Introduzca un numero:");

numero=teclado.readLine();

int num=Integer.parseInt(numero);

System.out.println("El numero: "+ num +" es par");

System.out.println("El numero: "+ num +" es impar");

rintln("¿Desea continuar (s/n)?");

continua= teclado.readLine();

if(!continua.equals("s") && !continua.equals("n")){

throw new OpcionErroneaException();

}while (continua.equals("s") || continua.equals("S"));

//Para compara se pone .equals

}catch (NumberFormatException e){

System.out.println("Debe introducir numeros");

}catch (OpcionErroneaException e){

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

cepciones personalizadas en Servicios Web

En Java podemos crear una excepción propia creanco una clase que extienda de la clase Exception.

En este ejemplo creamos una exception llama OpcionErroneaException que hereda de la clase

Podemos crear una clase en Java que lance la excepción creada por el programador.

BufferedReader teclado=new BufferedReader(new InputStreamReader(System.in));

System.out.println("El numero: "+ num +" es par");

System.out.println("Debe introducir numeros");

Page 50: Java Modulo 8

teclado.readLine();

}

}

}

Dentro de los Web Service también podemos hacer uso de

Podríamos crear una excepción propia con un esqueleto como el que mostramos a continuación:

public class ErrorWebService extends Exception {

public ErrorWebService (String code) { } public String getA() {...} public void setA() {..} public String getB() {...} public void setB() {..} }

Podemos lanzarlo desde el Web Service como en el siguiente ejemplo:

@WebService public class MyWS { public MyWS() { } public Response getSomething(String id) throws ErrorWebService {

throw new ErrorWebService (id); } }

Ver Video:

en el Módulo 8. Unidad 3, en la plataforma elearning

Para uso exclusivo de los alumnos de CETICSA S.L.

System.out.println(e.mensaje());

teclado.readLine();

Dentro de los Web Service también podemos hacer uso de la creación de excepciones propias.

Podríamos crear una excepción propia con un esqueleto como el que mostramos a continuación:

public class ErrorWebService extends Exception

public ErrorWebService (String code)

Podemos lanzarlo desde el Web Service como en el siguiente ejemplo:

Response getSomething(String id) throws ErrorWebService

throw new ErrorWebService (id);

Video: Excepciones WebServices,

en el Módulo 8. Unidad 3, en la plataforma elearning

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

System.out.println(e.mensaje());

la creación de excepciones propias.

Podríamos crear una excepción propia con un esqueleto como el que mostramos a continuación:

en el Módulo 8. Unidad 3, en la plataforma elearning

Page 51: Java Modulo 8

Objetivos

� Crear un proyecto Java Application que nos permita consumir el Web Service del Catastro.

� Controlaremos las posibles excepciones que se produzcan al consumir el servicio.

Enunciado:

Abrir un proyecto Java Application para poder consumir el servicio web

siguiente dirección:

https://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx?WSDL

1. Crear un proyecto Java Application y llamarlo ConsumirServicioWebCatastro.

Para uso exclusivo de los alumnos de CETICSA S.L.

Laboratorio: Excepciones WebServices

Crear un proyecto Java Application que nos permita consumir el Web Service del Catastro.

Controlaremos las posibles excepciones que se produzcan al consumir el servicio.

Abrir un proyecto Java Application para poder consumir el servicio web del catastro ubicado en la

https://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx?WSDL

Crear un proyecto Java Application y llamarlo ConsumirServicioWebCatastro.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Laboratorio: Excepciones WebServices

Crear un proyecto Java Application que nos permita consumir el Web Service del Catastro.

Controlaremos las posibles excepciones que se produzcan al consumir el servicio.

del catastro ubicado en la

https://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx?WSDL

Crear un proyecto Java Application y llamarlo ConsumirServicioWebCatastro.

Page 52: Java Modulo 8

2. Agregar un nuevo elemento de tipo Web Service

3. Añadir la dirección al servicio web del catastro.

Para uso exclusivo de los alumnos de CETICSA S.L.

Agregar un nuevo elemento de tipo Web Service Client.

Añadir la dirección al servicio web del catastro.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Page 53: Java Modulo 8

4. Incluir la llamada a los métodos del servicio.

5. Selecccionar el método ObtenerProvincias que es el que quere mos invocar.

Para uso exclusivo de los alumnos de CETICSA S.L.

Incluir la llamada a los métodos del servicio.

Selecccionar el método ObtenerProvincias que es el que quere mos invocar.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Selecccionar el método ObtenerProvincias que es el que quere mos invocar.

Page 54: Java Modulo 8

6. Llamar al método obtenerProvincias que nos genera desde el

package consumirserviciowebcatastro;

public class Principal {

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

Provincias p=obtenerProvincias();

}

private static Provincias obtenerProvincias() {

consumirserviciowebcatastro.CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Catas

tro service = new_

consumirserviciowebcatastro.CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Catas

tro();

consumirserviciowebcatastro.CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Catas

troSoap port =_

service.getCallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020CatastroSoap12();

return port.obtenerProvincias();

}

}

7. Si el servicio web está caído obtendremos el siguiente error.

8. Controlaremos el error para avisar al usuario.

package consumirserviciowebcatastro;

public class Principal {

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

try{

Provincias p=obtenerProvincias();

}catch(javax.xml.ws.WebServiceException e){

System.out.println("Web Service detenido");

Para uso exclusivo de los alumnos de CETICSA S.L.

Llamar al método obtenerProvincias que nos genera desde el main.

package consumirserviciowebcatastro;

* @param args the command line arguments

public static void main(String[] args) {

Provincias p=obtenerProvincias();

enerProvincias() {

consumirserviciowebcatastro.CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Catas

consumirserviciowebcatastro.CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Catas

consumirserviciowebcatastro.CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Catas

service.getCallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020CatastroSoap12();

Si el servicio web está caído obtendremos el siguiente error.

Controlaremos el error para avisar al usuario.

package consumirserviciowebcatastro;

* @param args the command line arguments

atic void main(String[] args) {

Provincias p=obtenerProvincias();

}catch(javax.xml.ws.WebServiceException e){

System.out.println("Web Service detenido");

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

consumirserviciowebcatastro.CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Catas

consumirserviciowebcatastro.CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Catas

consumirserviciowebcatastro.CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Catas

service.getCallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020CatastroSoap12();

Page 55: Java Modulo 8

}

}

private static Provincias obtenerProvincias() {

consumirserviciowebcatastro.CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Catas

tro service = new _

consumirserviciowebcatastro.CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Cata

tro();

consumirserviciowebcatastro.CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Catas

troSoap port = _

service.getCallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020CatastroSoap12();

return port.obtenerProvincias();

}

}

Para uso exclusivo de los alumnos de CETICSA S.L.

static Provincias obtenerProvincias() {

consumirserviciowebcatastro.CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Catas

consumirserviciowebcatastro.CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Cata

consumirserviciowebcatastro.CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Catas

service.getCallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020CatastroSoap12();

;

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

consumirserviciowebcatastro.CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Catas

consumirserviciowebcatastro.CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Catas

consumirserviciowebcatastro.CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Catas

service.getCallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020CatastroSoap12();

Page 56: Java Modulo 8

Unidad 4: Seguridad en los Servicios Web

Objetivos

� Describir requerimientos y soluciones en seguridad de servicios web.

� Entender los tipos de protecciones de un servicio web.

Introducción

Hoy en día, considerar la tecnología de web

inconcebible, sobre todo si se trata de comunicación de información referida a lógica de negocios,

donde la información debe ser confiable y segura.

A su vez, varios aspectos surgidos desde el mismo

services deben ser mantenidos al momento de la incorporación de

como ser por ejemplo de su sencillez y de la

Con esto en mente surge WS-*. Parte importante de este conjunto de especificaciones

directamente vinculada a la seguridad en web services, siendo WS

de las demás, ya que las demás especificaciones o bien

mecanismos definidos en WS-Security.

WS-Security

WS-Security define extensiones a SOAP que permiten el pasaje de security tokens los

autentifican a los clientes de los servicios. De esta forma se puede

y la confidencialidad de los mismos;

enviados se mantengan inalterados durante la transmisión, y como confidencialidad al hecho de que

ningún agente externo a la comunicación pueda obt

(problema conocido como “man-in

WS-Security define y estandariza la forma de uso de mecanismos de seguridad

adaptándolos a su funcionamiento con los mensajes SOAP. Quizás lo más fu

Security es el elemento que se embebe en el encabezado del mensaje SOAP. La estructura de

un mensaje SOAP que incluye este elemento se muestra en el ejemplo 1, a continuación:

<?xml version="1.0" encoding="utf-8"?>

<s:Envelope

xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext">

<s:Header>

<wsse:Security>

•••

</wsse:Security>

</s:Header>

<s:Body>

•••

</s:Body>

</s:Envelope>

La especificación define asimismo como enviar

certificado X.509 o un ticket Kerberos, por nombrar los más conocidos y

Para uso exclusivo de los alumnos de CETICSA S.L.

Seguridad en los Servicios Web

Describir requerimientos y soluciones en seguridad de servicios web.

Entender los tipos de protecciones de un servicio web.

Hoy en día, considerar la tecnología de web services sin considerar los aspectos de seguridad es algo

inconcebible, sobre todo si se trata de comunicación de información referida a lógica de negocios,

donde la información debe ser confiable y segura.

A su vez, varios aspectos surgidos desde el mismo momento de la concepción de la

services deben ser mantenidos al momento de la incorporación de algún mecanismo de seguridad,

como ser por ejemplo de su sencillez y de la interoperabilidad entre plataformas y fabricantes.

*. Parte importante de este conjunto de especificaciones

directamente vinculada a la seguridad en web services, siendo WS-Security quizá

de las demás, ya que las demás especificaciones o bien complementan o bien extien

Security.

Security define extensiones a SOAP que permiten el pasaje de security tokens los

autentifican a los clientes de los servicios. De esta forma se puede asegurar la integridad d

y la confidencialidad de los mismos; entendiendo como integridad al hecho de que los mensajes

inalterados durante la transmisión, y como confidencialidad al hecho de que

agente externo a la comunicación pueda obtener de ninguna forma el contenido del

in-the-middle”).

Security define y estandariza la forma de uso de mecanismos de seguridad

adaptándolos a su funcionamiento con los mensajes SOAP. Quizás lo más fundamental que define WS

que se embebe en el encabezado del mensaje SOAP. La estructura de

un mensaje SOAP que incluye este elemento se muestra en el ejemplo 1, a continuación:

8"?>

xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext">

La especificación define asimismo como enviar security tokens, ya sea un username token, un

certificado X.509 o un ticket Kerberos, por nombrar los más conocidos y utilizados actualmente.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Seguridad en los Servicios Web

services sin considerar los aspectos de seguridad es algo

inconcebible, sobre todo si se trata de comunicación de información referida a lógica de negocios,

momento de la concepción de la tecnología de web

algún mecanismo de seguridad,

interoperabilidad entre plataformas y fabricantes.

*. Parte importante de este conjunto de especificaciones está

Security quizá la piedra fundamental

complementan o bien extienden los

Security define extensiones a SOAP que permiten el pasaje de security tokens los cuales identifican y

asegurar la integridad de los mensajes

entendiendo como integridad al hecho de que los mensajes

inalterados durante la transmisión, y como confidencialidad al hecho de que

ener de ninguna forma el contenido del mensaje

Security define y estandariza la forma de uso de mecanismos de seguridad ya existentes,

ndamental que define WS-

que se embebe en el encabezado del mensaje SOAP. La estructura de

un mensaje SOAP que incluye este elemento se muestra en el ejemplo 1, a continuación:

security tokens, ya sea un username token, un

utilizados actualmente.

Page 57: Java Modulo 8

El principal problema que enfrenta el receptor de un mensaje es saber quien es

exactamente el que le está realizan

cliente: con un username token, se debe proveer una pareja

kerberos está encriptado, y el receptor del

WS-Security es extremadamente flexible en el hecho de no definir que tipo de security tokens utilizar; sin

embargo no lo es en lo siguiente: dos sistemas pueden conformar WS

incapaces de comunicarse entre sí. Un sistema por ejemplo p

Kerberos, mientras que el otro aceptar solamente certificados X.509, por ejemplo, por lo que solamente

WS-Security no alcanza. Este tipo de problemas son los que intentan atacar WS

WS-SecurityPolicy

Siempre que se utilicen mecanismos de seguridad, en cualquier ámbito, debe existir algún tipo de

políticas de seguridad; una cosa va de la mano con la otra. Estas políticas clarifican los requisitos de

seguridad específicos en una situación par

WS-Security, se deben definir claramente ciertos aspectos con el fin de que un cliente pueda

comunicarse efectivamente con el servicio. Aspectos como: que tipo de security tokens acepta, que

algoritmo de encriptación se utilizó para encriptar el mensaje, etc., deben estar

por el servicio. Para definir estos aspectos es que se utilizan las políticas.

La especificación WS-Policy define una aproximación general para la especificac

políticas para los servicios web. Basándose en esto, WS

especificar políticas relacionadas con la seguridad. Esta sintaxis define elementos denominados

assertions; que permiten a un servicio w

Las assertions definidas por WS-SecurityPolicy incluyen las siguientes:

Permiten a un web service especificar que tipos de security

quien permitirá que procedan.

Permite a un web service especificar varias opciones sobre las firmas digitales que aceptará.

Permite a un web service especificar opciones sobre como la encriptación se realizará, como por

ejemplo que algoritmo de encriptación se

Permite a un web service especificar que ciertas partes de un

cuales son esas partes.

La forma exacta de cómo las políticas son transportadas desde el servicio al cliente interesado no se

define en WS-SecurityPolicy. Las assertions pueden ser enviadas en un mensaje SOAP o entregado de

cualquier otra forma. WS-Policy define un elemento general,

assertions para las políticas.

El elemento puede contener políticas sobre security tokens, integri

confidencialidad y otras cosas.

A continuación se pasa a detallar la especificación de WS

documento.

Para uso exclusivo de los alumnos de CETICSA S.L.

El principal problema que enfrenta el receptor de un mensaje es saber quien es

exactamente el que le está realizando el pedido. Existen varias formas de verificar la identidad del

cliente: con un username token, se debe proveer una pareja usuario/contraseña correcta; un ticket

kerberos está encriptado, y el receptor del mensaje puede verificar que es correcto.

rity es extremadamente flexible en el hecho de no definir que tipo de security tokens utilizar; sin

embargo no lo es en lo siguiente: dos sistemas pueden conformar WS-Security, pero igualmente ser

incapaces de comunicarse entre sí. Un sistema por ejemplo podría llegar a aceptar solamente tickets

aceptar solamente certificados X.509, por ejemplo, por lo que solamente

Security no alcanza. Este tipo de problemas son los que intentan atacar WS-SecurityPolicy y WS

Siempre que se utilicen mecanismos de seguridad, en cualquier ámbito, debe existir algún tipo de

políticas de seguridad; una cosa va de la mano con la otra. Estas políticas clarifican los requisitos de

seguridad específicos en una situación particular. Supongamos por ejemplo un servicio web utilizando

claramente ciertos aspectos con el fin de que un cliente pueda

efectivamente con el servicio. Aspectos como: que tipo de security tokens acepta, que

tmo de encriptación se utilizó para encriptar el mensaje, etc., deben estar

por el servicio. Para definir estos aspectos es que se utilizan las políticas.

Policy define una aproximación general para la especificac

políticas para los servicios web. Basándose en esto, WS-SecurityPolicy define una sintaxis XML para

especificar políticas relacionadas con la seguridad. Esta sintaxis define elementos denominados

assertions; que permiten a un servicio web especificar sus políticas en una forma no ambigua.

SecurityPolicy incluyen las siguientes:

Permiten a un web service especificar que tipos de security tokens aceptará, y, opcionalmente, de

ermite a un web service especificar varias opciones sobre las firmas digitales que aceptará.

ermite a un web service especificar opciones sobre como la encriptación se realizará, como por

ejemplo que algoritmo de encriptación se utilizará.

a un web service especificar que ciertas partes de un mensaje no deben estar encriptadas, y

La forma exacta de cómo las políticas son transportadas desde el servicio al cliente interesado no se

assertions pueden ser enviadas en un mensaje SOAP o entregado de

Policy define un elemento general, , que puede contener una o más

puede contener políticas sobre security tokens, integridad,

A continuación se pasa a detallar la especificación de WS-Trust, objetivo principal del presente

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Existen varias formas de verificar la identidad del

usuario/contraseña correcta; un ticket

mensaje puede verificar que es correcto.

rity es extremadamente flexible en el hecho de no definir que tipo de security tokens utilizar; sin

Security, pero igualmente ser

odría llegar a aceptar solamente tickets

aceptar solamente certificados X.509, por ejemplo, por lo que solamente

SecurityPolicy y WS-Trust.

Siempre que se utilicen mecanismos de seguridad, en cualquier ámbito, debe existir algún tipo de

políticas de seguridad; una cosa va de la mano con la otra. Estas políticas clarifican los requisitos de

ticular. Supongamos por ejemplo un servicio web utilizando

claramente ciertos aspectos con el fin de que un cliente pueda

efectivamente con el servicio. Aspectos como: que tipo de security tokens acepta, que

tmo de encriptación se utilizó para encriptar el mensaje, etc., deben estar claramente definidos

Policy define una aproximación general para la especificación de todo tipo de

SecurityPolicy define una sintaxis XML para

especificar políticas relacionadas con la seguridad. Esta sintaxis define elementos denominados

eb especificar sus políticas en una forma no ambigua.

tokens aceptará, y, opcionalmente, de

ermite a un web service especificar varias opciones sobre las firmas digitales que aceptará.

ermite a un web service especificar opciones sobre como la encriptación se realizará, como por

mensaje no deben estar encriptadas, y

La forma exacta de cómo las políticas son transportadas desde el servicio al cliente interesado no se

assertions pueden ser enviadas en un mensaje SOAP o entregado de

, que puede contener una o más

Trust, objetivo principal del presente

Page 58: Java Modulo 8

WS-TRUST

WS-Security define las bases para proveer seguridad al intercambio de mensajes SOAP.

WS-Trust utiliza estas bases o mecanismos y define primitivas adicionales y

extensiones para el intercambio de security tokens para permitir la obtención y

diseminación de credenciales entre distintos dominios de confianza.

Para asegurar la comunicación entre dos partes,

seguridad, ya sea directa como indirectamente.

cada una de las partes debe poder determinar si pueden

El objetivo principal de WS-Trust es habilitar a las distintas aplicaciones a construir intercambios confiables

de mensajes. La confianza es representada a través del intercambio e intermediación de security tokens. La especificación provee una forma para solicitar, ren

WS-Security, WS-SecurityPolicy y WS-

de servicios, definido en WS-Federation, que queda fuera del

Web Services Trust Model

El modelo de seguridad en web services definido en WS

servicio puede requerir que todo pedido que se le haga cumpla

viene sin los claims requeridos, se debe rechazar o ig

indicar cuales son los claims requeridos es mediante políticas de seguridad definidas sobre el propio

servicio.

Si el cliente no tiene el(los) token(s) necesarios para cumplir los requisitos de seguridad

servicio en sus políticas, el mismo puede contactar a las autoridades

necesarios. Estas autoridades se indican en la política del servicio, y son llamadas Security Token

Services(STS).

Los STS a su vez tienen definidas sus propias políticas de seguridad, y el cliente debe cumplirlas para

realizar el pedido de security tokens.

La figura que se muestra a continuación muestra que cualquier servicio puede ser un cliente, y a su vez

que el STS es un Web Service. Las flechas muestran posibles vías de

puede obtener un token del STS o puede haberlo

Para uso exclusivo de los alumnos de CETICSA S.L.

Security define las bases para proveer seguridad al intercambio de mensajes SOAP.

estas bases o mecanismos y define primitivas adicionales y

extensiones para el intercambio de security tokens para permitir la obtención y

diseminación de credenciales entre distintos dominios de confianza.

Para asegurar la comunicación entre dos partes, las mismas deben intercambiar credenciales de

seguridad, ya sea directa como indirectamente. Para que el intercambio funcione correctamente,

cada una de las partes debe poder determinar si pueden confiar en las credenciales de la otra parte.

Trust es habilitar a las distintas aplicaciones a construir intercambios confiables

de mensajes. La confianza es representada a través del intercambio e intermediación de security tokens. La especificación provee una forma para solicitar, renovar y validar estos security tokens

-Trust son los cimientos fundamentales para el modelo de Federación

Federation, que queda fuera del alcance de este documento.

El modelo de seguridad en web services definido en WS-Trust está basado en un proceso en el cual un

servicio puede requerir que todo pedido que se le haga cumpla con un conjunto de claims. Si el pedido

viene sin los claims requeridos, se debe rechazar o ignorar el mismo. La manera que tiene un servicio de

indicar cuales son los claims requeridos es mediante políticas de seguridad definidas sobre el propio

Si el cliente no tiene el(los) token(s) necesarios para cumplir los requisitos de seguridad

servicio en sus políticas, el mismo puede contactar a las autoridades apropiadas y solicitar los tokens

Estas autoridades se indican en la política del servicio, y son llamadas Security Token

n definidas sus propias políticas de seguridad, y el cliente debe cumplirlas para

realizar el pedido de security tokens.

La figura que se muestra a continuación muestra que cualquier servicio puede ser un cliente, y a su vez

as flechas muestran posibles vías de comunicación; el cliente (requestor)

puede obtener un token del STS o puede haberlo obtenido por otro medio.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Security define las bases para proveer seguridad al intercambio de mensajes SOAP.

las mismas deben intercambiar credenciales de

funcione correctamente,

confiar en las credenciales de la otra parte.

Trust es habilitar a las distintas aplicaciones a construir intercambios confiables

de mensajes. La confianza es representada a través del intercambio e intermediación de security ovar y validar estos security tokens.

Trust son los cimientos fundamentales para el modelo de Federación

alcance de este documento.

Trust está basado en un proceso en el cual un

con un conjunto de claims. Si el pedido

norar el mismo. La manera que tiene un servicio de

indicar cuales son los claims requeridos es mediante políticas de seguridad definidas sobre el propio

Si el cliente no tiene el(los) token(s) necesarios para cumplir los requisitos de seguridad indicado por el

apropiadas y solicitar los tokens

Estas autoridades se indican en la política del servicio, y son llamadas Security Token

n definidas sus propias políticas de seguridad, y el cliente debe cumplirlas para

La figura que se muestra a continuación muestra que cualquier servicio puede ser un cliente, y a su vez

comunicación; el cliente (requestor)

Page 59: Java Modulo 8

Se tiene un servicio web, el cual tiene definida ciertas políticas de seguridad.

que para realizar un pedido al servicio, es necesario que en el

además este token esté firmado por un STS

confianza previamente establecida de alguna forma.

El cliente debe solicitar al STS indicado el o los security tokens indicados en la política del servicio. Para

esto, el cliente debe enviar las claims apropiadas al STS, el cual define cuales son en su propia política

de seguridad. El STS verifica que los

mensaje de respuesta.

Finalmente, el cliente envía el pedido al servicio, con el token recibido (firmado por el STS).

servicio confía en el STS, valida el pedido del cliente.

Relaciones de confianza

Existen varios mecanismos que pueden ser utilizados para verificar las relaciones de confianza de un

servicio. Estos mecanismos no son obligatorios y no son requeridos por WS

libres de verificar las relaciones de confianza y de establecer las mismas sobre un dominio o extender las

mismas hacia otros dominios mediante cualquier mecanismo.

WS-Trust define los siguientes mecanismos:

Fixed Trust Roots: El más simple de todos.

contiene una lista de todas sus relaciones de confianza. Si los tokens vienen de un servicio perteneciente

a esta lista, el servicio los utiliza.

Trust Hierarchies: El servicio confiará en los tokens siempre y cuando provengan

confianza que lleve a un “trusted root”.

Authentication Service: Este es un servicio especial con el cual el servicio mantiene una relación de

confianza. Cuando el servicio recibe un token, lo envía directamente a este servicio, que es

decidir si es de confianza o no.

Security Token Service

A continuación se explica el funcionamiento de los STS en un escenario WS

Un cliente realiza un pedido de un security token al STS; si la política y los

cumplen, el cliente recibe un security token response.

Este proceso utiliza los siguientes dos elementos:

token y

El elemento

tokens contenidos o referenciados en el propio pedido.

La sintaxis del elemento se muestra en el siguiente ejemplo:

<wst:RequestSecurityToken Context="...">

<wst:TokenType>

...

</wst:TokenType>

<wst:RequestType>

...

</wst:RequestType>

...

</wst:RequestSecurityToken>

Como ya se dijo, el elemento

Para uso exclusivo de los alumnos de CETICSA S.L.

Se tiene un servicio web, el cual tiene definida ciertas políticas de seguridad. Dichas políticas establecen

que para realizar un pedido al servicio, es necesario que en el pedido haya un security token, pero que

además este token esté firmado por un STS determinado, con el cuál el servicio tiene una relación de

establecida de alguna forma.

El cliente debe solicitar al STS indicado el o los security tokens indicados en la política del servicio. Para

esto, el cliente debe enviar las claims apropiadas al STS, el cual define cuales son en su propia política

de seguridad. El STS verifica que los claims sean validos, y de así serlo, envía el token solicitado en

Finalmente, el cliente envía el pedido al servicio, con el token recibido (firmado por el STS).

servicio confía en el STS, valida el pedido del cliente.

Existen varios mecanismos que pueden ser utilizados para verificar las relaciones de confianza de un

servicio. Estos mecanismos no son obligatorios y no son requeridos por WS-Trust. O sea, los servicios son

nes de confianza y de establecer las mismas sobre un dominio o extender las

mismas hacia otros dominios mediante cualquier mecanismo.

Trust define los siguientes mecanismos:

Fixed Trust Roots: El más simple de todos. El servicio (más específicamente la “trust engine” del servicio)

contiene una lista de todas sus relaciones de confianza. Si los tokens vienen de un servicio perteneciente

Trust Hierarchies: El servicio confiará en los tokens siempre y cuando provengan

confianza que lleve a un “trusted root”.

Authentication Service: Este es un servicio especial con el cual el servicio mantiene una relación de

confianza. Cuando el servicio recibe un token, lo envía directamente a este servicio, que es

A continuación se explica el funcionamiento de los STS en un escenario WS-Trust.

Un cliente realiza un pedido de un security token al STS; si la política y los requerimientos del STS se

mplen, el cliente recibe un security token response.

Este proceso utiliza los siguientes dos elementos: para

para la respuesta del STS al cliente.

(RST) debe estar firmado por el que realiza el pedido, utilizando

tokens contenidos o referenciados en el propio pedido.

La sintaxis del elemento se muestra en el siguiente ejemplo:

<wst:RequestSecurityToken Context="...">

es utilizado para

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Dichas políticas establecen

pedido haya un security token, pero que

determinado, con el cuál el servicio tiene una relación de

El cliente debe solicitar al STS indicado el o los security tokens indicados en la política del servicio. Para

esto, el cliente debe enviar las claims apropiadas al STS, el cual define cuales son en su propia política

claims sean validos, y de así serlo, envía el token solicitado en

Finalmente, el cliente envía el pedido al servicio, con el token recibido (firmado por el STS). Como el

Existen varios mecanismos que pueden ser utilizados para verificar las relaciones de confianza de un

Trust. O sea, los servicios son

nes de confianza y de establecer las mismas sobre un dominio o extender las

“trust engine” del servicio)

contiene una lista de todas sus relaciones de confianza. Si los tokens vienen de un servicio perteneciente

Trust Hierarchies: El servicio confiará en los tokens siempre y cuando provengan de una jerarquía de

Authentication Service: Este es un servicio especial con el cual el servicio mantiene una relación de

confianza. Cuando el servicio recibe un token, lo envía directamente a este servicio, que es el que va a

Trust.

requerimientos del STS se

solicitar al STS un security

(RST) debe estar firmado por el que realiza el pedido, utilizando

Page 60: Java Modulo 8

enviar una respuesta a un pedido de un security token.

En general, el token retornado por el STS al cliente que realizó el pedido

forma por el cliente. Si puede llegar a ser incluida otra información respecto al security token, como ser

el tiempo de vida, etc..

La sintaxis de este elemento se muestra a continuación:

<wst:RequestSecurityTokenResponse C

<wst:TokenType>

...

</wst:TokenType>

<wst:RequestedSecurityToken>

...

</wst:RequestedSecurityToken>

...

</wst:RequestSecurityTokenResponse>

Técnicas criptográficas y las firmas digitales

Firmas digitales

DSA y DSS

El DSA (Digital Signature Algorithm

incluido en el DSS (Digital Signature Standard

publicó en 1994.

El DSA está basado en el problema de los logaritmos d

digitales (a diferencia del RSA, que también puede emplearse para encriptar). La elección de este

algoritmo como estándar de firmado generó multitud de críticas: se pierde flexibilidad respecto al RSA

(que además, ya era un estándar de hecho

fue poco claro y la versión original empleaba claves que lo hacían poco seguro.

El algoritmo es más rápido para generar la firma que para validarla, al revés de

RSA. Emplea claves de 1024 bits (originalmente eran 512 bits, pero se aumento por falta de seguridad).

No se conocen ataques eficientes contra este algoritmo, sólo existen problemas con un conjunto de

números primos, pero son fácilmen

claves.

Certificados digitales

Los certificados digitales son el equivalente digital del DNI, en lo que a la autentificación de individuos se

refiere, ya que permiten que un individuo demues

posesión de la clave secreta asociada a su certificado.

Para los usuarios proporcionan un mecanismo para verificar la autenticidad de programas y

documentos obtenidos a través de la red, el envío de correo

control de acceso a recursos, etc.

En este apartado explicaremos qué son los certificados digitales, cuales son los formatos estándar, como

podemos controlar sus periodos de validez o anularlos si se ven comprometid

infraestructuras necesarias para soportarlos.

Un certificado de clave pública es un punto de unión entre la clave pública de una entidad y uno o

más atributos referidos a su identidad. El certificado garantiza que la clave públi

entidad identificada y que la entidad posee la correspondiente clave privada.

Para uso exclusivo de los alumnos de CETICSA S.L.

enviar una respuesta a un pedido de un security token.

En general, el token retornado por el STS al cliente que realizó el pedido, no será modificado de ninguna

forma por el cliente. Si puede llegar a ser incluida otra información respecto al security token, como ser

La sintaxis de este elemento se muestra a continuación:

<wst:RequestSecurityTokenResponse Context="...">

</wst:RequestSecurityTokenResponse>

Técnicas criptográficas y las firmas digitales

o Algoritmo Estándar de Firmado) es el algoritmo de firmado digital

Digital Signature Standard o Estándar de Firmas Digitales) del NIST Norteamericano. Se

El DSA está basado en el problema de los logaritmos discretos y sólo puede emplearse para las firmas

digitales (a diferencia del RSA, que también puede emplearse para encriptar). La elección de este

algoritmo como estándar de firmado generó multitud de críticas: se pierde flexibilidad respecto al RSA

de hecho), la verificación de firmas es lenta, el proceso de elección

fue poco claro y la versión original empleaba claves que lo hacían poco seguro.

El algoritmo es más rápido para generar la firma que para validarla, al revés de

RSA. Emplea claves de 1024 bits (originalmente eran 512 bits, pero se aumento por falta de seguridad).

No se conocen ataques eficientes contra este algoritmo, sólo existen problemas con un conjunto de

números primos, pero son fácilmente evitables si se siguen los sistemas adecuados de generación de

Los certificados digitales son el equivalente digital del DNI, en lo que a la autentificación de individuos se

refiere, ya que permiten que un individuo demuestre que es quien dice ser, es decir, que está en

posesión de la clave secreta asociada a su certificado.

Para los usuarios proporcionan un mecanismo para verificar la autenticidad de programas y

documentos obtenidos a través de la red, el envío de correo encriptado y/o firmado digitalmente, el

En este apartado explicaremos qué son los certificados digitales, cuales son los formatos estándar, como

podemos controlar sus periodos de validez o anularlos si se ven comprometidos, quien los genera y las

infraestructuras necesarias para soportarlos.

Un certificado de clave pública es un punto de unión entre la clave pública de una entidad y uno o

más atributos referidos a su identidad. El certificado garantiza que la clave públi

entidad identificada y que la entidad posee la correspondiente clave privada.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

, no será modificado de ninguna

forma por el cliente. Si puede llegar a ser incluida otra información respecto al security token, como ser

Técnicas criptográficas y las firmas digitales

) es el algoritmo de firmado digital

) del NIST Norteamericano. Se

iscretos y sólo puede emplearse para las firmas

digitales (a diferencia del RSA, que también puede emplearse para encriptar). La elección de este

algoritmo como estándar de firmado generó multitud de críticas: se pierde flexibilidad respecto al RSA

), la verificación de firmas es lenta, el proceso de elección

fue poco claro y la versión original empleaba claves que lo hacían poco seguro.

El algoritmo es más rápido para generar la firma que para validarla, al revés de lo que sucede con el

RSA. Emplea claves de 1024 bits (originalmente eran 512 bits, pero se aumento por falta de seguridad).

No se conocen ataques eficientes contra este algoritmo, sólo existen problemas con un conjunto de

te evitables si se siguen los sistemas adecuados de generación de

Los certificados digitales son el equivalente digital del DNI, en lo que a la autentificación de individuos se

tre que es quien dice ser, es decir, que está en

Para los usuarios proporcionan un mecanismo para verificar la autenticidad de programas y

encriptado y/o firmado digitalmente, el

En este apartado explicaremos qué son los certificados digitales, cuales son los formatos estándar, como

os, quien los genera y las

Un certificado de clave pública es un punto de unión entre la clave pública de una entidad y uno o

más atributos referidos a su identidad. El certificado garantiza que la clave pública pertenece a la

Page 61: Java Modulo 8

Los certificados de clave pública se denominan comúnmente Certificado Digital, ID Digital o

simplemente certificado. La entidad identificada se denomina sujeto

una entidad legal como, por ejemplo, una persona).

Los certificados digitales sólo son útiles si existe alguna Autoridad Certificadora (Certification Authority o

CA) que los valide, ya que si uno se certifica a sí mis

sea la que anuncia, y por lo tanto, no debe ser aceptada por un tercero que no lo conozca.

Es importante ser capaz de verificar que una autoridad certificadora ha emitido un certificado y

detectar si un certificado no es válido. Para evitar la falsificación de certificados, la entidad

certificadora después de autentificar la identidad de un sujeto, firma el certificado digitalmente.

Los certificados digitales proporcionan un mecanismo criptográfico para imple

también proporcionan un mecanismo seguro y escalable para distribuir claves públicas en

comunidades grandes.

Certificados X.509

El formato de certificados X.509 es un estándar del ITU

Telecommunication Standarization Sector) y el ISO/IEC (International Standards Organization /

International Electrotechnical Commission) que se publicó por primera vez en 1988. El formato de la

versión 1 fue extendido en 1993 para incluir dos nuevos campos qu

acceso a directorios. Después de emplear el X.509 v2 para intentar desarrollar un estándar de correo

electrónico seguro, el formato fue revisado para permitir la extensión con campos adicionales, dando

lugar al X.509 v3, publicado en 1996.

Los elementos del formato de un certificado X.509 v3 son:

Versión. El campo de versión contiene el número de versión del certificado codificado.

aceptables son 1, 2 y 3.

Número de serie del certificado. Este campo es un ent

Cada certificado emitido por una CA debe tener un número de serie único.

Identificador del algoritmo de firmadocertificado (como por ejemplo el RSA o

Nombre del emisor. Este campo identifica la CA que ha firmado y emitido el certificado.

Periodo de validez. Este campo indica el periodo de tiempo durante el cual el certificado es válido y la

CA está obligada a mantener información sobre el es

inicial, la fecha en la que el certificado empieza a ser válido y la fecha después de la cual el certificado

deja de serlo.

Nombre del sujeto. Este campo identifica la identidad cuya clave pública está certif

siguiente. El nombre debe ser único para cada entidad certificada por una CA dada, aunque puede

emitir más de un certificado con el mismo nombre si es para la misma entidad.

Información de clave pública del sujetoidentificador del algoritmo con el que se emplea la clave.

Identificador único del emisor. Este es un campo opcional que permite reutilizar nombres de emisor.

Identificador único del sujeto. Este es un campo opcional q

Extensiones.

Las extensiones del X.509 v3 proporcionan una manera de asociar información adicional a sujetos,

claves públicas, etc. Un campo de extensión tiene tres partes:

Tipo de extensión. Es un identificador de objeto que proporciona la semántica y el tipo de información

(cadena de texto, fecha u otra estructura de datos) para un valor de extensión.

Para uso exclusivo de los alumnos de CETICSA S.L.

Los certificados de clave pública se denominan comúnmente Certificado Digital, ID Digital o

simplemente certificado. La entidad identificada se denomina sujeto del certificado o subscriptor (si es

una entidad legal como, por ejemplo, una persona).

Los certificados digitales sólo son útiles si existe alguna Autoridad Certificadora (Certification Authority o

CA) que los valide, ya que si uno se certifica a sí mismo no hay ninguna garantía de que su identidad

sea la que anuncia, y por lo tanto, no debe ser aceptada por un tercero que no lo conozca.

Es importante ser capaz de verificar que una autoridad certificadora ha emitido un certificado y

ficado no es válido. Para evitar la falsificación de certificados, la entidad

certificadora después de autentificar la identidad de un sujeto, firma el certificado digitalmente.

Los certificados digitales proporcionan un mecanismo criptográfico para implementar la autentificación;

también proporcionan un mecanismo seguro y escalable para distribuir claves públicas en

El formato de certificados X.509 es un estándar del ITU-T (International Telecommunication Union

ecommunication Standarization Sector) y el ISO/IEC (International Standards Organization /

International Electrotechnical Commission) que se publicó por primera vez en 1988. El formato de la

versión 1 fue extendido en 1993 para incluir dos nuevos campos que permiten soportar el control de

acceso a directorios. Después de emplear el X.509 v2 para intentar desarrollar un estándar de correo

electrónico seguro, el formato fue revisado para permitir la extensión con campos adicionales, dando

ublicado en 1996.

Los elementos del formato de un certificado X.509 v3 son:

. El campo de versión contiene el número de versión del certificado codificado.

. Este campo es un entero asignado por la autoridad certificadora.

Cada certificado emitido por una CA debe tener un número de serie único.

Identificador del algoritmo de firmado. Este campo identifica el algoritmo empleado para firmar el

certificado (como por ejemplo el RSA o el DSA).

. Este campo identifica la CA que ha firmado y emitido el certificado.

. Este campo indica el periodo de tiempo durante el cual el certificado es válido y la

CA está obligada a mantener información sobre el estado del mismo. El campo consiste en una fecha

inicial, la fecha en la que el certificado empieza a ser válido y la fecha después de la cual el certificado

. Este campo identifica la identidad cuya clave pública está certif

siguiente. El nombre debe ser único para cada entidad certificada por una CA dada, aunque puede

emitir más de un certificado con el mismo nombre si es para la misma entidad.

Información de clave pública del sujeto. Este campo contiene la clave pública, sus parámetros y el

identificador del algoritmo con el que se emplea la clave.

. Este es un campo opcional que permite reutilizar nombres de emisor.

. Este es un campo opcional que permite reutilizar nombres de sujeto.

Las extensiones del X.509 v3 proporcionan una manera de asociar información adicional a sujetos,

claves públicas, etc. Un campo de extensión tiene tres partes:

. Es un identificador de objeto que proporciona la semántica y el tipo de información

(cadena de texto, fecha u otra estructura de datos) para un valor de extensión.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Los certificados de clave pública se denominan comúnmente Certificado Digital, ID Digital o

del certificado o subscriptor (si es

Los certificados digitales sólo son útiles si existe alguna Autoridad Certificadora (Certification Authority o

mo no hay ninguna garantía de que su identidad

sea la que anuncia, y por lo tanto, no debe ser aceptada por un tercero que no lo conozca.

Es importante ser capaz de verificar que una autoridad certificadora ha emitido un certificado y

ficado no es válido. Para evitar la falsificación de certificados, la entidad

certificadora después de autentificar la identidad de un sujeto, firma el certificado digitalmente.

mentar la autentificación;

también proporcionan un mecanismo seguro y escalable para distribuir claves públicas en

T (International Telecommunication Union-

ecommunication Standarization Sector) y el ISO/IEC (International Standards Organization /

International Electrotechnical Commission) que se publicó por primera vez en 1988. El formato de la

e permiten soportar el control de

acceso a directorios. Después de emplear el X.509 v2 para intentar desarrollar un estándar de correo

electrónico seguro, el formato fue revisado para permitir la extensión con campos adicionales, dando

. El campo de versión contiene el número de versión del certificado codificado. Los valores

ero asignado por la autoridad certificadora.

. Este campo identifica el algoritmo empleado para firmar el

. Este campo identifica la CA que ha firmado y emitido el certificado.

. Este campo indica el periodo de tiempo durante el cual el certificado es válido y la

tado del mismo. El campo consiste en una fecha

inicial, la fecha en la que el certificado empieza a ser válido y la fecha después de la cual el certificado

. Este campo identifica la identidad cuya clave pública está certificada en el campo

siguiente. El nombre debe ser único para cada entidad certificada por una CA dada, aunque puede

clave pública, sus parámetros y el

. Este es un campo opcional que permite reutilizar nombres de emisor.

ue permite reutilizar nombres de sujeto.

Las extensiones del X.509 v3 proporcionan una manera de asociar información adicional a sujetos,

. Es un identificador de objeto que proporciona la semántica y el tipo de información

(cadena de texto, fecha u otra estructura de datos) para un valor de extensión.

Page 62: Java Modulo 8

Valor de la extensión. Este subcampo contiene el valor actual del campo.

Indicador de importancia. Es un flag que indica a una aplicación si es seguro ignorar el campo de

extensión si no reconoce el tipo. El indicador proporciona una manera de implementar aplicaciones

que trabajan de modo seguro con certificados y evolucionan conforme se van

extensiones.

El ITU y el ISO/IEC han desarrollado y publicado un conjunto de extensiones estándar en un apéndice al

X.509 v3:

Limitaciones básicas. Este campo indica si el sujeto del certificado es una CA y el máximo nivel de

profundidad de un camino de certificación a través de esa CA.

Política de certificación. Este campo contiene las condiciones bajo las que la CA emitió el certificado y

el propósito del certificado.

Uso de la clave. Este campo restringe el propósito de la clave públ

ejemplo, que la clave sólo se debe usar para firmar, para la encriptación de claves, para la

encriptación de datos, etc. Este campo suele marcarse como importante, ya que la clave sólo está

certificada para un propósito y usarla para otro no estaría validado en el certificado.

El formato de certificados X.509 se especifica en un sistema de notación denominado sintaxis abstracta

uno (Abstract Sintax One o ASN-1). Para la transmisión de los datos se aplica el DER (Distinguishe

Encoding Rules o reglas de codificación distinguible), que transforma el certificado en formato ASN

una secuencia de octetos apropiada para la transmisión en redes reales.

Listas de Anulación de Certificados (CRLs)

Los certificados tienen un periodo de validez que va de unos meses a unos pocos años. Durante el

tiempo que el certificado es válido la entidad certificadora que lo generó mantiene información sobre

el estado de ese certificado.

La información más importante que guarda es el

validez del certificado ha terminado antes de tiempo y el sistema que lo emplee no debe confiar en él.

Las razones de anulación de un certificado son varias: la clave privada del sujeto se ha visto

comprometida, la clave privada de la CA se ha visto comprometida o se ha producido un cambio en la

afiliación del sujeto (por ejemplo cuando un empleado abandona una empresa).

Las listas de anulación de certificados

el cual la CA publica y distribuye información a cerca de los certificados anulados a las aplicaciones

que los emplean. Una CRL es una estructura de datos firmada por la CA que contiene su fecha y hora

de publicación, el nombre de la entidad certific

anulados que aun no han expirado. Cuando una aplicación trabaja con certificados debe obtener la

última CRL de la entidad que firma el certificado que está empleando y comprobar que su número de

serie no está incluido en él.

Existen varios métodos para la actualización de CRLs:

Muestreo de CRLs. Las aplicaciones acceden a la CA o a almacenes de archivos y copian el último CRL

a intervalos regulares. La pega de este esquema es que durante el periodo entre ac

CRL podemos aceptar un certificado ya anulado, por lo que el periodo debe ser corto.

Anuncio de CRLs. La entidad certificadora anuncia que ha habido un cambio en el CRL a las

aplicaciones. El problema de este enfoque es el anuncio puede ser muy costoso y no sabemos que

aplicaciones deben ser informadas.

Verificación en línea. Una aplicación hace una con

revocación de un certificado. Es el mejor método para las aplicaciones, pero es muy costoso para la

CA.

Para uso exclusivo de los alumnos de CETICSA S.L.

. Este subcampo contiene el valor actual del campo.

. Es un flag que indica a una aplicación si es seguro ignorar el campo de

extensión si no reconoce el tipo. El indicador proporciona una manera de implementar aplicaciones

que trabajan de modo seguro con certificados y evolucionan conforme se van

El ITU y el ISO/IEC han desarrollado y publicado un conjunto de extensiones estándar en un apéndice al

. Este campo indica si el sujeto del certificado es una CA y el máximo nivel de

de un camino de certificación a través de esa CA.

. Este campo contiene las condiciones bajo las que la CA emitió el certificado y

. Este campo restringe el propósito de la clave pública certificada, indicando, por

ejemplo, que la clave sólo se debe usar para firmar, para la encriptación de claves, para la

encriptación de datos, etc. Este campo suele marcarse como importante, ya que la clave sólo está

arla para otro no estaría validado en el certificado.

El formato de certificados X.509 se especifica en un sistema de notación denominado sintaxis abstracta

1). Para la transmisión de los datos se aplica el DER (Distinguishe

Encoding Rules o reglas de codificación distinguible), que transforma el certificado en formato ASN

una secuencia de octetos apropiada para la transmisión en redes reales.

Listas de Anulación de Certificados (CRLs)

o de validez que va de unos meses a unos pocos años. Durante el

tiempo que el certificado es válido la entidad certificadora que lo generó mantiene información sobre

La información más importante que guarda es el estado de anulación, que indica que el periodo de

validez del certificado ha terminado antes de tiempo y el sistema que lo emplee no debe confiar en él.

Las razones de anulación de un certificado son varias: la clave privada del sujeto se ha visto

ve privada de la CA se ha visto comprometida o se ha producido un cambio en la

afiliación del sujeto (por ejemplo cuando un empleado abandona una empresa).

listas de anulación de certificados (Certification Revocation Lists o CRL) son un mecanismo med

el cual la CA publica y distribuye información a cerca de los certificados anulados a las aplicaciones

que los emplean. Una CRL es una estructura de datos firmada por la CA que contiene su fecha y hora

de publicación, el nombre de la entidad certificadora y los números de serie de los certificados

anulados que aun no han expirado. Cuando una aplicación trabaja con certificados debe obtener la

última CRL de la entidad que firma el certificado que está empleando y comprobar que su número de

Existen varios métodos para la actualización de CRLs:

. Las aplicaciones acceden a la CA o a almacenes de archivos y copian el último CRL

a intervalos regulares. La pega de este esquema es que durante el periodo entre ac

CRL podemos aceptar un certificado ya anulado, por lo que el periodo debe ser corto.

. La entidad certificadora anuncia que ha habido un cambio en el CRL a las

aplicaciones. El problema de este enfoque es el anuncio puede ser muy costoso y no sabemos que

aplicaciones deben ser informadas.

. Una aplicación hace una consulta en línea a la CA para determinar el estado de

revocación de un certificado. Es el mejor método para las aplicaciones, pero es muy costoso para la

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

. Es un flag que indica a una aplicación si es seguro ignorar el campo de

extensión si no reconoce el tipo. El indicador proporciona una manera de implementar aplicaciones

que trabajan de modo seguro con certificados y evolucionan conforme se van añadiendo nuevas

El ITU y el ISO/IEC han desarrollado y publicado un conjunto de extensiones estándar en un apéndice al

. Este campo indica si el sujeto del certificado es una CA y el máximo nivel de

. Este campo contiene las condiciones bajo las que la CA emitió el certificado y

ica certificada, indicando, por

ejemplo, que la clave sólo se debe usar para firmar, para la encriptación de claves, para la

encriptación de datos, etc. Este campo suele marcarse como importante, ya que la clave sólo está

arla para otro no estaría validado en el certificado.

El formato de certificados X.509 se especifica en un sistema de notación denominado sintaxis abstracta

1). Para la transmisión de los datos se aplica el DER (Distinguished

Encoding Rules o reglas de codificación distinguible), que transforma el certificado en formato ASN-1 en

o de validez que va de unos meses a unos pocos años. Durante el

tiempo que el certificado es válido la entidad certificadora que lo generó mantiene información sobre

, que indica que el periodo de

validez del certificado ha terminado antes de tiempo y el sistema que lo emplee no debe confiar en él.

Las razones de anulación de un certificado son varias: la clave privada del sujeto se ha visto

ve privada de la CA se ha visto comprometida o se ha producido un cambio en la

afiliación del sujeto (por ejemplo cuando un empleado abandona una empresa).

o CRL) son un mecanismo mediante

el cual la CA publica y distribuye información a cerca de los certificados anulados a las aplicaciones

que los emplean. Una CRL es una estructura de datos firmada por la CA que contiene su fecha y hora

adora y los números de serie de los certificados

anulados que aun no han expirado. Cuando una aplicación trabaja con certificados debe obtener la

última CRL de la entidad que firma el certificado que está empleando y comprobar que su número de

. Las aplicaciones acceden a la CA o a almacenes de archivos y copian el último CRL

a intervalos regulares. La pega de este esquema es que durante el periodo entre actualizaciones del

CRL podemos aceptar un certificado ya anulado, por lo que el periodo debe ser corto.

. La entidad certificadora anuncia que ha habido un cambio en el CRL a las

aplicaciones. El problema de este enfoque es el anuncio puede ser muy costoso y no sabemos que

sulta en línea a la CA para determinar el estado de

revocación de un certificado. Es el mejor método para las aplicaciones, pero es muy costoso para la

Page 63: Java Modulo 8

Listas de Anulación de Certificados X.509

El formato de listas de anulación de certificados X.509 e

publicó por primera vez en 1988 como versión 1. El formato fue modificado para incluir campos de

extensión, dando origen al al formato X.509 v2 CRL.

Los campos básicos de un formato X.509 CRL (válidos para las v

Versión. Debe especificar la versión 2 si hay algún campo de extensión.

Firma. El campo contiene identificador del algoritmo empleado para firmar la CRL.

Nombre del generador. Este campo contiene el nombre de la entidad que ha gener

CRL.

Esta actualización. Fecha y hora de la generación de la CRL.

Próxima actualización. Indica la fecha y hora de la próxima actualización. El siguiente CRL puede ser

generado antes de la fecha indicada pero no después de ella.

Certificado del usuario. Contiene el número de serie de un certificado anulado.

Fecha de anulación. Indica la fecha efectiva de la anulación.

Existe también un conjunto de campos de entrada de extensión en las CRLs X.509 v2, como el

razón, que identifica la causa de la anulación: sin especificar, compromiso de clave, compromiso de la

CA, cambio de afiliación, superado (el certificado ha sido reemplazado), cese de operación (el

certificado ya no sirve para su propósito original), certificad

temporalmente) y elimina de la CRL (un certificado que aparecía en una CRL previa debe ser

eliminado).

Adicionalmente también se ha añadido un conjunto de extensiones para las X.509v2 CRL con los mismos

subcampos que en los certificados X.509v3. Estas extensiones permiten que una comunidad o entidad

se defina sus propios campos de extensión privados.

Autoridades Certificadoras

Una autoridad certificadora es una organización fiable que acepta solicitudes de certi

entidades, las valida, genera certificados y mantiene la información de su estado.

Una CA debe proporcionar una

Statement o CPS) que indique claramente sus políticas y prácticas

mantenimiento de los certificados, la responsabilidades de la CA respecto a los sistemas que emplean

sus certificados y las obligaciones de los subscriptores respecto de la misma.

Las labores de un CA son:

Admisión de solicitudes. Un usuario rellena un formulario y lo envía a la CA solicitando un certificado. La

generación de las claves pública y privada son responsabilidad del usuario o de un sistema asociado a

la CA.

Autentificación del sujeto. Antes de firmar la información

verificar su identidad. Dependiendo del nivel de seguridad deseado y el tipo de certificado se deberán

tomar las medidas oportunas para la validación.

Generación de certificados. Después de recibir una solicitud y va

certificado correspondiente y lo firma con su clave privada. Posteriormente lo manda al subscriptor y,

opcionalmente, lo envía a un almacén de certificados para su distribución.

Distribución de certificados. La entidad cert

certificados para que las aplicaciones tengan acceso y puedan obtener los certificados de sus

Para uso exclusivo de los alumnos de CETICSA S.L.

Listas de Anulación de Certificados X.509

El formato de listas de anulación de certificados X.509 es un estándar del ITU

publicó por primera vez en 1988 como versión 1. El formato fue modificado para incluir campos de

extensión, dando origen al al formato X.509 v2 CRL.

Los campos básicos de un formato X.509 CRL (válidos para las versiones 1 y 2) son:

. Debe especificar la versión 2 si hay algún campo de extensión.

. El campo contiene identificador del algoritmo empleado para firmar la CRL.

. Este campo contiene el nombre de la entidad que ha gener

. Fecha y hora de la generación de la CRL.

. Indica la fecha y hora de la próxima actualización. El siguiente CRL puede ser

generado antes de la fecha indicada pero no después de ella.

. Contiene el número de serie de un certificado anulado.

. Indica la fecha efectiva de la anulación.

Existe también un conjunto de campos de entrada de extensión en las CRLs X.509 v2, como el

, que identifica la causa de la anulación: sin especificar, compromiso de clave, compromiso de la

CA, cambio de afiliación, superado (el certificado ha sido reemplazado), cese de operación (el

certificado ya no sirve para su propósito original), certificado en espera (el certificado está suspendido

temporalmente) y elimina de la CRL (un certificado que aparecía en una CRL previa debe ser

Adicionalmente también se ha añadido un conjunto de extensiones para las X.509v2 CRL con los mismos

s que en los certificados X.509v3. Estas extensiones permiten que una comunidad o entidad

se defina sus propios campos de extensión privados.

es una organización fiable que acepta solicitudes de certi

entidades, las valida, genera certificados y mantiene la información de su estado.

Declaración de Prácticas de Certificación

) que indique claramente sus políticas y prácticas relativas a la seguridad y

mantenimiento de los certificados, la responsabilidades de la CA respecto a los sistemas que emplean

sus certificados y las obligaciones de los subscriptores respecto de la misma.

. Un usuario rellena un formulario y lo envía a la CA solicitando un certificado. La

generación de las claves pública y privada son responsabilidad del usuario o de un sistema asociado a

. Antes de firmar la información proporcionada por el sujeto la CA debe

verificar su identidad. Dependiendo del nivel de seguridad deseado y el tipo de certificado se deberán

tomar las medidas oportunas para la validación.

. Después de recibir una solicitud y validar los datos la CA genera el

certificado correspondiente y lo firma con su clave privada. Posteriormente lo manda al subscriptor y,

opcionalmente, lo envía a un almacén de certificados para su distribución.

. La entidad certificadora puede proporcionar un servicio de distribución de

certificados para que las aplicaciones tengan acceso y puedan obtener los certificados de sus

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

s un estándar del ITU-T y la ISO/IEC que se

publicó por primera vez en 1988 como versión 1. El formato fue modificado para incluir campos de

ersiones 1 y 2) son:

. El campo contiene identificador del algoritmo empleado para firmar la CRL.

. Este campo contiene el nombre de la entidad que ha generado y firmado la

. Indica la fecha y hora de la próxima actualización. El siguiente CRL puede ser

Existe también un conjunto de campos de entrada de extensión en las CRLs X.509 v2, como el código de , que identifica la causa de la anulación: sin especificar, compromiso de clave, compromiso de la

CA, cambio de afiliación, superado (el certificado ha sido reemplazado), cese de operación (el

o en espera (el certificado está suspendido

temporalmente) y elimina de la CRL (un certificado que aparecía en una CRL previa debe ser

Adicionalmente también se ha añadido un conjunto de extensiones para las X.509v2 CRL con los mismos

s que en los certificados X.509v3. Estas extensiones permiten que una comunidad o entidad

es una organización fiable que acepta solicitudes de certificados de

entidades, las valida, genera certificados y mantiene la información de su estado.

Declaración de Prácticas de Certificación (Certification Practice

relativas a la seguridad y

mantenimiento de los certificados, la responsabilidades de la CA respecto a los sistemas que emplean

. Un usuario rellena un formulario y lo envía a la CA solicitando un certificado. La

generación de las claves pública y privada son responsabilidad del usuario o de un sistema asociado a

proporcionada por el sujeto la CA debe

verificar su identidad. Dependiendo del nivel de seguridad deseado y el tipo de certificado se deberán

lidar los datos la CA genera el

certificado correspondiente y lo firma con su clave privada. Posteriormente lo manda al subscriptor y,

ificadora puede proporcionar un servicio de distribución de

certificados para que las aplicaciones tengan acceso y puedan obtener los certificados de sus

Page 64: Java Modulo 8

subscriptores. Los métodos de distribución pueden ser: correo electrónico, servicios de directorio com

X.500 o el LDAP, etc.

Anulación de certificados. Al igual que sucede con las solicitudes de certificados, la CA debe validar el

origen y autenticidad de una solicitud de anulación. La CA debe mantener información sobre una

anulación durante todo el tiempo de validez del certificado original.

Almacenes de datos. Hoy en día existe una noción formal de

certificados y la información de las anulaciones. La designación oficial de una base de datos como

almacén tiene por objeto señalar que el trabajo con los certificados es fiable y de confianza.

Infraestructuras de Clave Pública

La difusión de las técnicas de clave pública requiere una

estándares, autoridades de certificación, estructura

validar rutas de certificación, protocolos operacionales, protocolos de gestión, herramientas que

pueden operar entre sí y un marco legislativo.

Los protocolos operacionales se dirigen al problema del envío

emplean certificados. Los protocolos de gestión tratan de los requisitos para la interacción de dos

componentes de la infraestructura: registro, inicialización, certificación, anulación y recuperación de

claves.

Una estructura entre múltiples CAs proporciona una o más rutas de certificación entre un subscriptor y

una aplicación. Una ruta de certificación

puntos conectados entre el subscriptor y una CA raíz.

aplicación, ya que tiene almacenada de forma segura su clave pública.

Un sistema que emplea certificados necesita obtener una ruta de certificación entre un subscriptor y un

CA raíz antes de evaluar el nive

determinar una ruta de certificación entre dos subscriptores arbitrarios en una estructura de

interconexiones entre diferentes CAs se denomina

de verificar la asociación entre el nombre del subscriptor y su clave pública en una ruta de certificación

se denomina validación de la ruta de certificación

Implementar la seguridad en los servicios web

En la siguiente unidad veremos la forma que

con el IDE NetBeans.

Abrir un proyecto de tipo Java Web, Web Application.

Para uso exclusivo de los alumnos de CETICSA S.L.

subscriptores. Los métodos de distribución pueden ser: correo electrónico, servicios de directorio com

. Al igual que sucede con las solicitudes de certificados, la CA debe validar el

origen y autenticidad de una solicitud de anulación. La CA debe mantener información sobre una

iempo de validez del certificado original.

. Hoy en día existe una noción formal de almacén

certificados y la información de las anulaciones. La designación oficial de una base de datos como

señalar que el trabajo con los certificados es fiable y de confianza.

Infraestructuras de Clave Pública

La difusión de las técnicas de clave pública requiere una infraestructura que defina un conjunto de

estándares, autoridades de certificación, estructuras entre múltiples CAs, métodos para descubrir y

validar rutas de certificación, protocolos operacionales, protocolos de gestión, herramientas que

pueden operar entre sí y un marco legislativo.

Los protocolos operacionales se dirigen al problema del envío de certificados y CRLs a los sistemas que

emplean certificados. Los protocolos de gestión tratan de los requisitos para la interacción de dos

componentes de la infraestructura: registro, inicialización, certificación, anulación y recuperación de

na estructura entre múltiples CAs proporciona una o más rutas de certificación entre un subscriptor y

ruta de certificación (o cadena de certificación) es una secuencia de uno o más

puntos conectados entre el subscriptor y una CA raíz. Una CA raíz es una autoridad en la que confía la

aplicación, ya que tiene almacenada de forma segura su clave pública.

Un sistema que emplea certificados necesita obtener una ruta de certificación entre un subscriptor y un

CA raíz antes de evaluar el nivel de confianza en el certificado del subscriptor. El problema de

determinar una ruta de certificación entre dos subscriptores arbitrarios en una estructura de

interconexiones entre diferentes CAs se denomina descubrimiento de rutas de certificación

de verificar la asociación entre el nombre del subscriptor y su clave pública en una ruta de certificación

validación de la ruta de certificación.

Implementar la seguridad en los servicios web

En la siguiente unidad veremos la forma que tenemos de implementar seguridad en un proyecto creado

Abrir un proyecto de tipo Java Web, Web Application.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

subscriptores. Los métodos de distribución pueden ser: correo electrónico, servicios de directorio como el

. Al igual que sucede con las solicitudes de certificados, la CA debe validar el

origen y autenticidad de una solicitud de anulación. La CA debe mantener información sobre una

donde se guardan los

certificados y la información de las anulaciones. La designación oficial de una base de datos como

señalar que el trabajo con los certificados es fiable y de confianza.

que defina un conjunto de

s entre múltiples CAs, métodos para descubrir y

validar rutas de certificación, protocolos operacionales, protocolos de gestión, herramientas que

de certificados y CRLs a los sistemas que

emplean certificados. Los protocolos de gestión tratan de los requisitos para la interacción de dos

componentes de la infraestructura: registro, inicialización, certificación, anulación y recuperación de

na estructura entre múltiples CAs proporciona una o más rutas de certificación entre un subscriptor y

(o cadena de certificación) es una secuencia de uno o más

es una autoridad en la que confía la

Un sistema que emplea certificados necesita obtener una ruta de certificación entre un subscriptor y un

l de confianza en el certificado del subscriptor. El problema de

determinar una ruta de certificación entre dos subscriptores arbitrarios en una estructura de

descubrimiento de rutas de certificación. El problema

de verificar la asociación entre el nombre del subscriptor y su clave pública en una ruta de certificación

Implementar la seguridad en los servicios web

tenemos de implementar seguridad en un proyecto creado

Page 65: Java Modulo 8

Llamaremos al proyecto WS_Seguridad.

Para uso exclusivo de los alumnos de CETICSA S.L.

Llamaremos al proyecto WS_Seguridad.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Page 66: Java Modulo 8

Seleccionamos como servidor GlassFish.

No seleccionaremos ningún Framework, y por

Para uso exclusivo de los alumnos de CETICSA S.L.

Seleccionamos como servidor GlassFish.

No seleccionaremos ningún Framework, y por último le daremos a finalizar.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Page 67: Java Modulo 8

Añadiremos a nuestro proyecto web un archivo de tipo Web Service.

En la caja de texto para introducir el nombre del servicio introduciremos ServicioSeguridad. Guardar el

servicio en el paquete Servicios.

Para uso exclusivo de los alumnos de CETICSA S.L.

Añadiremos a nuestro proyecto web un archivo de tipo Web Service.

En la caja de texto para introducir el nombre del servicio introduciremos ServicioSeguridad. Guardar el

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

En la caja de texto para introducir el nombre del servicio introduciremos ServicioSeguridad. Guardar el

Page 68: Java Modulo 8

Añadimos una nueva operación para crear un método llamado mensaje, devolverá un string con un

nombre.

Veremos el código que generado, e introducimos un string con el nombre que devolverá el método.

package Servicios;

import javax.jws.WebMethod;

import javax.jws.WebParam;

import javax.jws.WebService;

@WebService()

public class ServicioSeguridad {

@WebMethod(operationName = "mensaje")

public String mensaje(@WebParam(name = "nombre")

String nombre) {

return "Hola: "+ nombre;

}

}

Anotaciones creadas:

@WebService identifica a la clase como un servicio Web.

Al incluir este descriptor en la clase el editor del netbeans nos avisa que debemos importa la clase

javax.jws.Webservice.

@WebMethod identifica a una operación como parte del s

Al igual que con WebService se debe importar la clase WebMethod de mismo paquete.

Para uso exclusivo de los alumnos de CETICSA S.L.

na nueva operación para crear un método llamado mensaje, devolverá un string con un

Veremos el código que generado, e introducimos un string con el nombre que devolverá el método.

@WebMethod(operationName = "mensaje")

public String mensaje(@WebParam(name = "nombre")

@WebService identifica a la clase como un servicio Web.

Al incluir este descriptor en la clase el editor del netbeans nos avisa que debemos importa la clase

@WebMethod identifica a una operación como parte del servicio web.

Al igual que con WebService se debe importar la clase WebMethod de mismo paquete.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

na nueva operación para crear un método llamado mensaje, devolverá un string con un

Veremos el código que generado, e introducimos un string con el nombre que devolverá el método.

Al incluir este descriptor en la clase el editor del netbeans nos avisa que debemos importa la clase

Al igual que con WebService se debe importar la clase WebMethod de mismo paquete.

Page 69: Java Modulo 8

@WebParam asigna un nombre a los parametros de una operación.

Probaremos el servicio antes de implementar seguridad.

Sobre la carpeta Web Services, seleccionaremos la opción Test Web Service.

Cuando comprobemos que el servicio web desplega bien, comenzaremos con la implementación de

seguridad.

WSDL generado.

<?xml version='1.0' encoding='UTF-8'?><!

version is _

JAX-WS RI 2.2-hudson-740-. --><!-- Generated by JAX

JAX-WS _

RI 2.2-hudson-740-. --><definitions xmlns:wsu="http://docs.oasis

wssecurity-utility-1.0.xsd" _

Para uso exclusivo de los alumnos de CETICSA S.L.

asigna un nombre a los parametros de una operación.

Probaremos el servicio antes de implementar seguridad.

seleccionaremos la opción Test Web Service.

Cuando comprobemos que el servicio web desplega bien, comenzaremos con la implementación de

8'?><!-- Published by JAX-WS RI at http://jax-ws.dev.

Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is

xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Cuando comprobemos que el servicio web desplega bien, comenzaremos con la implementación de

ws.dev.java.net. RI's

ws.dev.java.net. RI's version is

open.org/wss/2004/01/oasis-200401-wss-

Page 70: Java Modulo 8

xmlns:wsp="http://www.w3.org/ns/ws

xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" _

xmlns:wsam="http://www.w3.org/2007/05/addressing/metad

xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://Servicios/" _

xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/"

targetNamespace="http://Servicios/" _

name="ServicioSeguridadService">

<types>

<xsd:schema>

<xsd:import namespace="http://Servicios/"

schemaLocation="http://localhost:8084/WS_Seguridad/ServicioSeguridad?xsd=1" />

</xsd:schema>

</types>

<message name="mensaje">

<part name="parameters" element="tns:mensaje" />

</message>

<message name="mensajeResponse">

<part name="parameters" element="tns:mensajeResponse" />

</message>

<portType name="ServicioSeguridad">

<operation name="mensaje">

<input wsam:Action="http://Servicios/ServicioSeguridad/mensajeRequest" message="tns:mensaje" />

<output wsam:Action="http://Servicios/ServicioSeguridad/mensajeResponse"

message="tns:mensajeResponse" />

</operation>

</portType>

<binding name="ServicioSeguridadPortBinding" type="tns:ServicioSeguridad">

<soap:binding transport="http://schemas.xmlsoap.org/soap/http"

<operation name="mensaje">

<soap:operation soapAction="" />

<input>

<soap:body use="literal" />

</input>

<output>

<soap:body use="literal" />

</output>

</operation>

</binding>

<service name="ServicioSeguridadService">

<port name="ServicioSeguridadPort" binding="tns:ServicioSeguridadPortBinding">

<soap:address location="http://localhost:8084/WS_Seguridad/ServicioSeguridad" />

</port>

</service>

</definitions>

Para uso exclusivo de los alumnos de CETICSA S.L.

xmlns:wsp="http://www.w3.org/ns/ws-policy"

xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" _

xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"

xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://Servicios/" _

xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/"

targetNamespace="http://Servicios/" _

<xsd:import namespace="http://Servicios/"

schemaLocation="http://localhost:8084/WS_Seguridad/ServicioSeguridad?xsd=1" />

<part name="parameters" element="tns:mensaje" />

nsajeResponse">

<part name="parameters" element="tns:mensajeResponse" />

<portType name="ServicioSeguridad">

<input wsam:Action="http://Servicios/ServicioSeguridad/mensajeRequest" message="tns:mensaje" />

Action="http://Servicios/ServicioSeguridad/mensajeResponse"

<binding name="ServicioSeguridadPortBinding" type="tns:ServicioSeguridad">

<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />

<service name="ServicioSeguridadService">

name="ServicioSeguridadPort" binding="tns:ServicioSeguridadPortBinding">

<soap:address location="http://localhost:8084/WS_Seguridad/ServicioSeguridad" />

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://Servicios/" _

xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/"

schemaLocation="http://localhost:8084/WS_Seguridad/ServicioSeguridad?xsd=1" />

<input wsam:Action="http://Servicios/ServicioSeguridad/mensajeRequest" message="tns:mensaje" />

style="document" />

name="ServicioSeguridadPort" binding="tns:ServicioSeguridadPortBinding">

<soap:address location="http://localhost:8084/WS_Seguridad/ServicioSeguridad" />

Page 71: Java Modulo 8

Marcamos la opción de Secure Service en la consola de nuestro serv

Seleccionamos la opción avanzadas, para abrir el editor de atributos.

t

Para uso exclusivo de los alumnos de CETICSA S.L.

Marcamos la opción de Secure Service en la consola de nuestro servicio.

Seleccionamos la opción avanzadas, para abrir el editor de atributos.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Page 72: Java Modulo 8

En la sección de seguridad del servicio, se puede ver que la han seleccionado los siguientes opciones:

Compatibilidad de la versión. NET 1.0 o 3.0/Metro. 3.5/Metro NET 1.3.

coincide con la versión de Metro o. NET

Mecanismo de seguridad. Especifica el método utilizado para asegurar el s

autenticación de usuario con claves simétricas se selecciona. La autenticación de usuario con claves

simétricas protege a la aplicación de la integridad y confidencialidad. la criptografía de clave simétrica

se basa en una sola tecla, el secreto compartido que se utiliza para firmar y cifrar un mensaje. Las

claves simétricas son generalmente más rápido que la criptografía de clave pública.

Por este mecanismo, el cliente no posee ningún tipo de certificado / clave de su cue

su nombre de usuario / contraseña para la autenticación. El cliente comparte una clave secreta con el

servidor. La clave compartida, se genera en tiempo de ejecución y cifrados con el certificado del

servicio. El cliente debe especificar el alias en el almacén de confianza mediante la identificación de

alias del servidor de certificados.

Usar valores predeterminados para el Desarrollo.almacén de claves del servidor y almacén de confianza, para que puedan ser utilizados

inmediatamente para el desarrollo. Debido a que los certificados por defecto no se encuentran en un

formato adecuado para ser utilizado en este contexto, esta importación se hace para usted, de modo

que usted no tiene que hacerlo manualmente. Además de importar

defecto se crea con nombre de usuario "wsitUser". En un entorno de producci

desee ofrecer sus propios certificados y configuración del usuario, sin embargo, en un entorno de

desarrollo es posible encontrar estos valores predeterminados.

Como mecanismo de seguridad elegiremos

simétricas.

Para uso exclusivo de los alumnos de CETICSA S.L.

En la sección de seguridad del servicio, se puede ver que la han seleccionado los siguientes opciones:

NET 1.0 o 3.0/Metro. 3.5/Metro NET 1.3. Seleccione la última versión que

coincide con la versión de Metro o. NET que tenemos instalado.

Especifica el método utilizado para asegurar el servicio web. En este caso, la

autenticación de usuario con claves simétricas se selecciona. La autenticación de usuario con claves

simétricas protege a la aplicación de la integridad y confidencialidad. la criptografía de clave simétrica

sola tecla, el secreto compartido que se utiliza para firmar y cifrar un mensaje. Las

claves simétricas son generalmente más rápido que la criptografía de clave pública.

Por este mecanismo, el cliente no posee ningún tipo de certificado / clave de su cue

su nombre de usuario / contraseña para la autenticación. El cliente comparte una clave secreta con el

servidor. La clave compartida, se genera en tiempo de ejecución y cifrados con el certificado del

icar el alias en el almacén de confianza mediante la identificación de

predeterminados para el Desarrollo. Seleccione esta opción para importar certificados en el

almacén de claves del servidor y almacén de confianza, para que puedan ser utilizados

inmediatamente para el desarrollo. Debido a que los certificados por defecto no se encuentran en un

uado para ser utilizado en este contexto, esta importación se hace para usted, de modo

que usted no tiene que hacerlo manualmente. Además de importar certificados

defecto se crea con nombre de usuario "wsitUser". En un entorno de producci

desee ofrecer sus propios certificados y configuración del usuario, sin embargo, en un entorno de

desarrollo es posible encontrar estos valores predeterminados.

Como mecanismo de seguridad elegiremos autenticación de usuario con el meca

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

En la sección de seguridad del servicio, se puede ver que la han seleccionado los siguientes opciones:

Seleccione la última versión que

ervicio web. En este caso, la

autenticación de usuario con claves simétricas se selecciona. La autenticación de usuario con claves

simétricas protege a la aplicación de la integridad y confidencialidad. la criptografía de clave simétrica

sola tecla, el secreto compartido que se utiliza para firmar y cifrar un mensaje. Las

claves simétricas son generalmente más rápido que la criptografía de clave pública.

Por este mecanismo, el cliente no posee ningún tipo de certificado / clave de su cuenta, sino que envía

su nombre de usuario / contraseña para la autenticación. El cliente comparte una clave secreta con el

servidor. La clave compartida, se genera en tiempo de ejecución y cifrados con el certificado del

icar el alias en el almacén de confianza mediante la identificación de

Seleccione esta opción para importar certificados en el

almacén de claves del servidor y almacén de confianza, para que puedan ser utilizados

inmediatamente para el desarrollo. Debido a que los certificados por defecto no se encuentran en un

uado para ser utilizado en este contexto, esta importación se hace para usted, de modo

certificados, un usuario por

defecto se crea con nombre de usuario "wsitUser". En un entorno de producción, es probable que

desee ofrecer sus propios certificados y configuración del usuario, sin embargo, en un entorno de

autenticación de usuario con el mecanismo de claves

Page 73: Java Modulo 8

En nuestro ejemplo elegiremos autenticación de usuario con el mecanismo de claves simétricas

podríamos seleccionar cualquiera de las siguientes opciones:

Mutual Certificates Security: El mecanismo mutuo

través de mensaje de protección de autenticación que garantiza la integridad y confidencialidad.

Cuando use certificados mutuos, el archivo de almacén de confianza debe ser configurado tanto para

el lado del cliente y el servidor de la aplicación.

Transport Security (SSL): El mecanismo de seguridad de transporte protege su aplicación durante el uso

de SSL de transporte para la autenticación y confidencialidad. La seguridad de transporte de la capa

es proporcionada por los mecanismos de transporte utilizados para transmitir información sobre el

alambre entre los clientes y proveedores, por lo tanto la seguridad de capa de transporte se basa en

garantizar el transporte HTTP (HTTPS) usando Secure Sockets Layer (SSL).

Message Authentication over SSL: La autenticación de mensajes a través de SSL mecanismo otorga un

seguro de identidad criptográficamente o token de autenticación con el mensaje y el uso de SSL para

la protección de la confidencialidad.

SAML Authorization over SSL: El mecanismo de autorización SAML sobre SSL concede una autorización

simbólica con el mensaje y utiliza SSL para la protección de la confidencialidad

Endorsing Certificate: Este mecanismo utiliza mensajes seguros con la clave simétrica para protección de

la integridad y la confidencialidad, y utiliza un certificado de cliente para aumentar respaldar las

reivindicaciones proporcionada por el símbolo asociado a la firma del mensaje.

SAML Sender Vouches with Certificates:

de la integridad y la confidencialidad y con un remitente da fe de la autorización SAML token.

SAML Holder of Key: Este mecanismo protege a los mensajes con una aserción de SAML firmada

(expedido por una autoridad de confianza) c

autorización y confidencialidad protección de la integridad mediante certificados mutuo.

Podemos seleccionar las casillas de verificación de la derecha para el elemento que le gustaría firmar,

cifrar o requierir.Para ello, pulsaremos sobre el botón Message Parts de la sección Input Message.

Para uso exclusivo de los alumnos de CETICSA S.L.

autenticación de usuario con el mecanismo de claves simétricas

podríamos seleccionar cualquiera de las siguientes opciones:

El mecanismo mutuo de certificados de seguridad

través de mensaje de protección de autenticación que garantiza la integridad y confidencialidad.

, el archivo de almacén de confianza debe ser configurado tanto para

dor de la aplicación.

El mecanismo de seguridad de transporte protege su aplicación durante el uso

de SSL de transporte para la autenticación y confidencialidad. La seguridad de transporte de la capa

ismos de transporte utilizados para transmitir información sobre el

alambre entre los clientes y proveedores, por lo tanto la seguridad de capa de transporte se basa en

garantizar el transporte HTTP (HTTPS) usando Secure Sockets Layer (SSL).

La autenticación de mensajes a través de SSL mecanismo otorga un

seguro de identidad criptográficamente o token de autenticación con el mensaje y el uso de SSL para

la protección de la confidencialidad.

El mecanismo de autorización SAML sobre SSL concede una autorización

simbólica con el mensaje y utiliza SSL para la protección de la confidencialidad.

Este mecanismo utiliza mensajes seguros con la clave simétrica para protección de

la integridad y la confidencialidad, y utiliza un certificado de cliente para aumentar respaldar las

reivindicaciones proporcionada por el símbolo asociado a la firma del mensaje.

SAML Sender Vouches with Certificates: Este mecanismo protege los mensajes con los certificados mutuo

de la integridad y la confidencialidad y con un remitente da fe de la autorización SAML token.

Este mecanismo protege a los mensajes con una aserción de SAML firmada

(expedido por una autoridad de confianza) cliente de llevar a la clave pública y la información con la

autorización y confidencialidad protección de la integridad mediante certificados mutuo.

Podemos seleccionar las casillas de verificación de la derecha para el elemento que le gustaría firmar,

Para ello, pulsaremos sobre el botón Message Parts de la sección Input Message.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

autenticación de usuario con el mecanismo de claves simétricas, pero

e seguridad añade seguridad a

través de mensaje de protección de autenticación que garantiza la integridad y confidencialidad.

, el archivo de almacén de confianza debe ser configurado tanto para

El mecanismo de seguridad de transporte protege su aplicación durante el uso

de SSL de transporte para la autenticación y confidencialidad. La seguridad de transporte de la capa

ismos de transporte utilizados para transmitir información sobre el

alambre entre los clientes y proveedores, por lo tanto la seguridad de capa de transporte se basa en

La autenticación de mensajes a través de SSL mecanismo otorga un

seguro de identidad criptográficamente o token de autenticación con el mensaje y el uso de SSL para

El mecanismo de autorización SAML sobre SSL concede una autorización

.

Este mecanismo utiliza mensajes seguros con la clave simétrica para protección de

la integridad y la confidencialidad, y utiliza un certificado de cliente para aumentar respaldar las

con los certificados mutuo

de la integridad y la confidencialidad y con un remitente da fe de la autorización SAML token.

Este mecanismo protege a los mensajes con una aserción de SAML firmada

liente de llevar a la clave pública y la información con la

autorización y confidencialidad protección de la integridad mediante certificados mutuo.

Podemos seleccionar las casillas de verificación de la derecha para el elemento que le gustaría firmar,

Para ello, pulsaremos sobre el botón Message Parts de la sección Input Message.

Page 74: Java Modulo 8

Después dejar configurado el Web Service, crearemos el cliente que consuma el servicio.

Crear un proyecto aplicación java.

Llamamos al proyecto ConsumoWS_

Para uso exclusivo de los alumnos de CETICSA S.L.

Después dejar configurado el Web Service, crearemos el cliente que consuma el servicio.

Llamamos al proyecto ConsumoWS_Seguridad.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Después dejar configurado el Web Service, crearemos el cliente que consuma el servicio.

Page 75: Java Modulo 8

Añadir un elemento de tipo Web Service Client.

Seleccionamos el Web Service que queremos consumir y pulsamos sobre finalizar.

Para uso exclusivo de los alumnos de CETICSA S.L.

Añadir un elemento de tipo Web Service Client.

Seleccionamos el Web Service que queremos consumir y pulsamos sobre finalizar.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Seleccionamos el Web Service que queremos consumir y pulsamos sobre finalizar.

Page 76: Java Modulo 8

Dentro de nuestra clase, pulsaremos botón derecho para que nos genere el código de llmada al

método mensaje de nuestro Web Service. Seleccionar Insert code, como se muestra en en la imagen.

Posteriormente, pulsamos sobre la opción Call Web Service Operation.

Para uso exclusivo de los alumnos de CETICSA S.L.

Dentro de nuestra clase, pulsaremos botón derecho para que nos genere el código de llmada al

e nuestro Web Service. Seleccionar Insert code, como se muestra en en la imagen.

Posteriormente, pulsamos sobre la opción Call Web Service Operation.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Dentro de nuestra clase, pulsaremos botón derecho para que nos genere el código de llmada al

e nuestro Web Service. Seleccionar Insert code, como se muestra en en la imagen.

Page 77: Java Modulo 8

Elegiremos el método mensaje del servicio web que queremos consumir.

Realizaremos en el main la llamada al método mensaje que nos acaba de generar. Pasaremos como

parámetro un string que es lo que espera nuestro método mensaje.

package consumows_seguridad;

public class Main {

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

System.out.println(mensaje("Rosa"));

}

private static String mensaje(java.lang.String nombre) {

aa.NewWebServiceService service = new aa.NewWebServiceService();

aa.NewWebService port = service.getNewWebServicePort();

return port.mensaje(nombre);

}

}

Para uso exclusivo de los alumnos de CETICSA S.L.

Elegiremos el método mensaje del servicio web que queremos consumir.

la llamada al método mensaje que nos acaba de generar. Pasaremos como

parámetro un string que es lo que espera nuestro método mensaje.

* @param args the command line arguments

lic static void main(String[] args) {

System.out.println(mensaje("Rosa"));

private static String mensaje(java.lang.String nombre) {

aa.NewWebServiceService service = new aa.NewWebServiceService();

service.getNewWebServicePort();

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

la llamada al método mensaje que nos acaba de generar. Pasaremos como

Page 78: Java Modulo 8

Pulsamos sobre edit web Service Attributes para poder incluir validación al conectarnos al web Service.

Marcamos la opción Use development default, de esta manera nos

defecto que tiene GlassFish.

Debido a que los certificados por defecto no se encuentran en un formato adecuado para ser utilizado

en este contexto, se importan unos por defecto.

created in the "file" realm, with username "wsitUser".

utilizarlos validándose con el nombre de usuario "wsitUser".

probably want to provide your own certifica

environment you may find these defaults useful.

ofrecer sus propios certificados y configuración del usuario, sin embargo, en un entorno de desarrollo es

posible encontrar estos valores predeterminados

Para uso exclusivo de los alumnos de CETICSA S.L.

Pulsamos sobre edit web Service Attributes para poder incluir validación al conectarnos al web Service.

Marcamos la opción Use development default, de esta manera nos validaremos con el usuario por

Debido a que los certificados por defecto no se encuentran en un formato adecuado para ser utilizado

, se importan unos por defecto. In addition to importing certificats, a default

created in the "file" realm, with username "wsitUser". Además de importar certificados

nombre de usuario "wsitUser". In a production environment, you will

probably want to provide your own certificates and user settings, however, in a development

environment you may find these defaults useful. En un entorno de producción, es probable que desee

ofrecer sus propios certificados y configuración del usuario, sin embargo, en un entorno de desarrollo es

ar estos valores predeterminados.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Pulsamos sobre edit web Service Attributes para poder incluir validación al conectarnos al web Service.

validaremos con el usuario por

Debido a que los certificados por defecto no se encuentran en un formato adecuado para ser utilizado

In addition to importing certificats, a default user is

certificados, un usuario puede

In a production environment, you will

tes and user settings, however, in a development

En un entorno de producción, es probable que desee

ofrecer sus propios certificados y configuración del usuario, sin embargo, en un entorno de desarrollo es

Page 79: Java Modulo 8

Salida del Consumidor del Servicio:

Ver

en el Módulo 8. Unidad 4, en la plataforma elearning

Para uso exclusivo de los alumnos de CETICSA S.L.

Video: Seguridad Servicios,

en el Módulo 8. Unidad 4, en la plataforma elearning

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

en el Módulo 8. Unidad 4, en la plataforma elearning

Page 80: Java Modulo 8

Objetivo

Implementar seguridad a nuestro servicio web de monedas.

Enunciado

Abriremos un proyecto Web Application para crear el servicio web.

Llamaremos al proyecto WS_Seguridad.

Para uso exclusivo de los alumnos de CETICSA S.L.

Laboratorio: Seguridad Servicios

servicio web de monedas.

Abriremos un proyecto Web Application para crear el servicio web.

Llamaremos al proyecto WS_Seguridad.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Laboratorio: Seguridad Servicios

Page 81: Java Modulo 8

Seleccionamos como servidor GlassFish.

No seleccionaremos ningún Framework, y por último le daremos a

Para uso exclusivo de los alumnos de CETICSA S.L.

Seleccionamos como servidor GlassFish.

No seleccionaremos ningún Framework, y por último le daremos a finalizar.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Page 82: Java Modulo 8

Añadiremos a nuestro proyecto web un archivo de tipo Web Service.

En la caja de texto para introducir el nombre del servicio introduciremos ServicioSeguridad. Guardar el

servicio en el paquete Servicios.

Para uso exclusivo de los alumnos de CETICSA S.L.

Añadiremos a nuestro proyecto web un archivo de tipo Web Service.

En la caja de texto para introducir el nombre del servicio introduciremos ServicioSeguridad. Guardar el

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

En la caja de texto para introducir el nombre del servicio introduciremos ServicioSeguridad. Guardar el

Page 83: Java Modulo 8

Añadimos las operaciones del servicio web de monedas.

//Declaramos un array con el valor de cada una de las monedas

public double[] valores=new double[] {1.26201, 14.4762, 75.6061, 135.861, 166.386};

@WebMethod(operationName = "convertirMonedaEuro")

public Double convertirMonedaEuro(@WebParam(name = "valor")

double valor, @WebParam(name = "indice")

int indice) {

return (valor * valores[indice]);

}

@WebMethod(operationName = "convertirEuroMoneda")

public Double convertirEuroMoneda(@WebParam(name = "valor")

double valor, @WebParam(name = "indice")

int indice) {

return (valor / valores[indice]);

}

Marcamos la opción de Secure Service en la consola de nuestro servicio.

Para uso exclusivo de los alumnos de CETICSA S.L.

servicio web de monedas.

//Declaramos un array con el valor de cada una de las monedas.

public double[] valores=new double[] {1.26201, 14.4762, 75.6061, 135.861, 166.386};

@WebMethod(operationName = "convertirMonedaEuro")

Double convertirMonedaEuro(@WebParam(name = "valor")

double valor, @WebParam(name = "indice")

@WebMethod(operationName = "convertirEuroMoneda")

Double convertirEuroMoneda(@WebParam(name = "valor")

double valor, @WebParam(name = "indice")

Marcamos la opción de Secure Service en la consola de nuestro servicio.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

public double[] valores=new double[] {1.26201, 14.4762, 75.6061, 135.861, 166.386};

Page 84: Java Modulo 8

Seleccionamos la opción avanzadas, para abrir el editor de atributos.

Para uso exclusivo de los alumnos de CETICSA S.L.

la opción avanzadas, para abrir el editor de atributos.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Page 85: Java Modulo 8

Como mecanismo de seguridad elegiremos

simétricas.

Después dejar configurado el Web Service, crearemos el cliente que consuma el servicio.

Para uso exclusivo de los alumnos de CETICSA S.L.

Como mecanismo de seguridad elegiremos autenticación de usuario con el mecanismo de claves

Después dejar configurado el Web Service, crearemos el cliente que consuma el servicio.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

autenticación de usuario con el mecanismo de claves

Después dejar configurado el Web Service, crearemos el cliente que consuma el servicio.

Page 86: Java Modulo 8

Crear un proyecto aplicación java.

Llamamos al proyecto ConsumoWS_Seguridad.

Para uso exclusivo de los alumnos de CETICSA S.L.

Llamamos al proyecto ConsumoWS_Seguridad.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Page 87: Java Modulo 8

Añadir un elemento de tipo Web Service Client.

Seleccionamos el Web Service que queremos consumir y pulsamos sobre finalizar.

Para uso exclusivo de los alumnos de CETICSA S.L.

Añadir un elemento de tipo Web Service Client.

Seleccionamos el Web Service que queremos consumir y pulsamos sobre finalizar.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Seleccionamos el Web Service que queremos consumir y pulsamos sobre finalizar.

Page 88: Java Modulo 8

Dentro de nuestra clase, pulsaremos

método mensaje de nuestro Web Service. Seleccionar Insert code, como se muestra en en la imagen.

Posteriormente, pulsamos sobre la opción Call Web Service Operation.

Realizaremos en el main la llamada al método mensaje que nos acaba de generar. Pasaremos como

parámetro un string que es lo que espera nuestro método mensaje.

public static void main(String[] args)

{

double resultado = convertirMonedaEuro(121,2);

System.out.println(resultado);

}

private static Double convertirMonedaEuro(double valor, int indice) {

ConsumirWS.NewWebServiceService service = new ConsumirWS.NewWebServiceService();

Para uso exclusivo de los alumnos de CETICSA S.L.

Dentro de nuestra clase, pulsaremos botón derecho para que nos genere el código de llmada al

método mensaje de nuestro Web Service. Seleccionar Insert code, como se muestra en en la imagen.

Posteriormente, pulsamos sobre la opción Call Web Service Operation.

a llamada al método mensaje que nos acaba de generar. Pasaremos como

parámetro un string que es lo que espera nuestro método mensaje.

public static void main(String[] args)

double resultado = convertirMonedaEuro(121,2);

private static Double convertirMonedaEuro(double valor, int indice) {

ConsumirWS.NewWebServiceService service = new ConsumirWS.NewWebServiceService();

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

botón derecho para que nos genere el código de llmada al

método mensaje de nuestro Web Service. Seleccionar Insert code, como se muestra en en la imagen.

a llamada al método mensaje que nos acaba de generar. Pasaremos como

ConsumirWS.NewWebServiceService service = new ConsumirWS.NewWebServiceService();

Page 89: Java Modulo 8

ConsumirWS.NewWebService port = service.getNewWebServicePort();

return port.convertirMonedaEuro(valor, indice);

}

Pulsamos sobre edit web Service Attributes para poder incluir validación al conectarnos al web Service.

Marcamos la opción Use development default, de esta manera nos validaremos con el usuario por

defecto que tiene GlassFish.

Debido a que los certificados por defecto no se encuentran en un formato adecuado para ser utilizado

en este contexto, se importan unos por defecto.

created in the "file" realm, with username "wsitUser".

utilizarlos validándose con el nombre de usuario "wsitUser".

probably want to provide your own certificates and user settings, however, in a dev

environment you may find these defaults useful.

ofrecer sus propios certificados y configuración del usuario, sin embargo, en un entorno de desarrollo es

posible encontrar estos valores predetermi

Para uso exclusivo de los alumnos de CETICSA S.L.

ConsumirWS.NewWebService port = service.getNewWebServicePort();

port.convertirMonedaEuro(valor, indice);

Pulsamos sobre edit web Service Attributes para poder incluir validación al conectarnos al web Service.

Marcamos la opción Use development default, de esta manera nos validaremos con el usuario por

Debido a que los certificados por defecto no se encuentran en un formato adecuado para ser utilizado

, se importan unos por defecto. In addition to importing certificats, a default user is

th username "wsitUser". Además de importar certificados

nombre de usuario "wsitUser". In a production environment, you will

probably want to provide your own certificates and user settings, however, in a dev

environment you may find these defaults useful. En un entorno de producción, es probable que desee

ofrecer sus propios certificados y configuración del usuario, sin embargo, en un entorno de desarrollo es

ar estos valores predeterminados.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.

Pulsamos sobre edit web Service Attributes para poder incluir validación al conectarnos al web Service.

Marcamos la opción Use development default, de esta manera nos validaremos con el usuario por

Debido a que los certificados por defecto no se encuentran en un formato adecuado para ser utilizado

In addition to importing certificats, a default user is

certificados, un usuario puede

In a production environment, you will

probably want to provide your own certificates and user settings, however, in a development

En un entorno de producción, es probable que desee

ofrecer sus propios certificados y configuración del usuario, sin embargo, en un entorno de desarrollo es

Page 90: Java Modulo 8

Para uso exclusivo de los alumnos de CETICSA S.L.

www.ceticsa.com

Para uso exclusivo de los alumnos de CETICSA S.L.