Introducción a Servicios Web
P · 2.
TEMARIO
1. Introducción
a. Conceptos básicos de servicios web: Descripción de los estándares y arquitectura delos servicios web
b. Protocolos basados en XML
i. Nociones básicas de XML-RPC
c. SOAP
i. Nociones básicas de Marshalling
ii. Procesamiento de errores y control de excepciones
iii. Streaming (transferencia de grandes volúmenes)
iv. Uso de interceptores
2. WSDL (Web Service Description Language). Puntos de entrada.
3. Solución basada en Apache CXF basado en anotaciones
Introducción a Servicios Web
P · 3.
TEMARIO
4. Invocación a servicios web: Herramientas y APIs para la creación y despliegues deservicios web con java
5. Versionado de servicios web
6. Seguridad
a. Cifrado (HTTPS)
b. Identificación (WSS)
c. Identificación (User/Pass)
7. Servicios web RESTful
Introducción a Servicios Web
P · 4.
Introducción a Servicios Web
P · 5.
1.a. INTRODUCCIÓN - Conceptos básicos
“Los servicios web son a las máquinas lo que las páginas web son a los humanos”.
Introducción a Servicios Web
El diálogo entre las dos partes se establece através de peticiones y respuestas El protocolo de transporte es HTTP Puede intercambiarse cualquier tipo de dato
Textos Imágenes Ficheros Datos firmados
Una transacción comienza con la petición ytermina con la respuesta
P · 6.
1.a. INTRODUCCIÓN - Conceptos básicos - Arquitectura
Un servicio web expone su estructura a través de un fichero WSDL
Servicios disponibles
Puertos disponibles
Tipo de datos esperados
A través de esta información pueden generarse clientes capaces de enviar peticiones al servicio web y procesarlas respuestas del mismo.
Introducción a Servicios Web
P · 7.
1.a. INTRODUCCIÓN - Conceptos básicos - Arquitectura
Existen tres operaciones básicas que son realizadas en cualquier comunicación de servicios web:
Serialización
Convierte los datos representados en memoria (Java, .NET…) en lenguaje XML
Construcción del Mensaje SOAP
Construye una petición o una respuesta SOAP que incluye los datos serializados
Deserialización
Convierte los datos en lenguaje XML a datos en memoria (Java, .NET…)
Introducción a Servicios Web
P · 8.
1.a. INTRODUCCIÓN - Conceptos básicos - Estándares
Básicos
SOAP
WSDL (y XSD)
XML
Mensajería
MTOM
Interoperabilidad
WS-i
Seguridad
WS-Security (WSS)
Java
JSR 101: JAX-RPC
JSR 224: JAX-WS 2.0
JSR 110: WSDL4J
JSR 222: JAXB 2.0
Introducción a Servicios Web
http://www.ibm.com/developerworks/webservices/standards/
P · 9.
1.a. INTRODUCCIÓN - Conceptos básicos – Estándares
Introducción a Servicios Web
http://wsit.java.net/
Web Services Interoperability Technologies
ESTÁNDARES
http://msdn.microsoft.com/en-us/netframework/aa663324
Windows Communication Foundation
INDUSTRIA
P · 10.
1.a. INTRODUCCIÓN - Conceptos básicos – Estándares
Básicos
SOAP - Simple Object Access Protocol Define la estructura de los intercambios de información en XML entre los servicios web
Cada mensaje SOAP incluye cero o más cabeceras y un cuerpo que incluye el “Payload”
Los mensajes SOAP pueden contener errores en forma de SOAP FAULT
http://www.w3.org/TR/soap12 - Versión 1.2
http://www.w3.org/TR/2000/NOTE-SOAP-20000508/ - Versión 1.1
WSDL - Web Services Description Language Define la estructura de los servicios web publicados
http://www.w3.org/TR/wsdl - Versión 1.1
http://www.w3.org/TR/wsdl20 - Versión 2.0 (no utilizada actualmente)
XSD - XML Schema Define los datos de los servicios web publicados como parte del WSDL
http://www.w3.org/XML/Schema - Versión 1.1
XML http://www.w3.org/XML/
Introducción a Servicios Web
P · 11.
1.a. INTRODUCCIÓN - Conceptos básicos – Estándares
Mensajería
MTOM - SOAP Message Transmission Optimization Mechanism Define la estructura para la transmisión de ficheros a través de servicios web
Engloba las dos especificaciones anteriores (SwA y DIME)
http://www.w3.org/TR/soap12-mtom/
Interoperabilidad
WS-i Web Services Interoperability (esta organización ha sido adquirida recientemente por OASIS)
Es un conjunto de perfiles que definen reglas sobre el SOAP para garantizar la compatibilidad de los servicios webentre diferentes tecnologías (.NET, Java, PHP…)
WS-i Basic Profile
Define las reglas para crear servicios web interoperables
http://ws-i.org/Profiles/BasicProfile-1.2-2010-11-09.html
WS-i Attachments Profile (adherido al WS-I Basic Profile a partir de la versión 1.1)
Define las reglas para crear servicios web interoperables (con transmisión de ficheros)
http://www.ws-i.org/Profiles/AttachmentsProfile-1.0.html
Introducción a Servicios Web
P · 12.
1.a. INTRODUCCIÓN - Conceptos básicos – Estándares
Seguridad
WSS
WS-Security
Define extensiones SOAP que permiten la autenticación, integridad y confidencialidad de los datosintercambiados por los servicios web a través de
Múltiples formatos de tokens de seguridad
Múltiples dominios de confianza
Múltiples formatos de firma (XML)
Múltiples técnicas de cifrado
Seguridad de punto a punto sin confiar en la seguridad del transporte
http://www.oasis-open.org/specs/index.php#wssv1.0
Introducción a Servicios Web
P · 13.
1.a. INTRODUCCIÓN - Conceptos básicos – Estándares
Java
JSR 101: JAX-RPC
Permite implementar el envío RPC de mensajes de acuerdo a la especificación SOAP 1.1
http://java.net/projects/jax-rpc/
JSR 224: JAX-WS 2.0
Es una evolución de JAX-RPC, compatible con su predecesora, que soporta nuevas funcionalidades(SOAP 1.2, WS-i Perfil Básico 1.1, MTOM,…)
http://jax-ws.java.net/
JSR 110: WSDL4J
Permite la creación, representación y manipulación de documentos WSDL
http://sourceforge.net/projects/wsdl4j/
JSR 222: JAXB 2.0
Java Architecture for XML Data Binding
Permite mapear los objetos Java en estructuras XML de manera automática
Se lo denomina “herramienta de marshalling”
http://jaxb.java.net/
Introducción a Servicios Web
P · 14.
Introducción a Servicios Web
P · 15.
1.b. INTRODUCCIÓN - Protocolos basados en XML
XML-RPC
Es un protocolo de intercambio de información con formato XML que utiliza HTTP como protocolo detransporte (http://www.xmlrpc.com/)
SOAP es la evolución del protocolo XML-RPC
Permite hacer llamadas a procedimientos remotos usando XML como lenguaje común y HTTP comoprotocolo de transporte.
También permite usar otros protocolos de transporte (JMS, correo electrónico…)
Introducción a Servicios Web
P · 16.
1.b. INTRODUCCIÓN - Protocolos basados en XML
SOAP es un protocolo mas completo que XML-RPC
Inicialmente fue diseñado para evitar los problemas relativos a la apertura de puertos derivados detecnologías como RMI (SOAP puede funcionar por el puerto 80)
Introducción a Servicios Web
Característica XML-RPC SOAPEscalares básicos V VEstructuras V VArrays V VEstructuras nombradas y arrays X VManejo de fallos V VEncoding X VTipos de datos definidos por el usuario X VRequiere entendimiento del cliente X VInstrucciones de proceso específicas X V
P · 17.
Introducción a Servicios Web
P · 18.
1.c. INTRODUCCIÓN - SOAP
SOAP - Estructura
SOAP es un protocolo basado en XML que consta de tres partes
ENVELOPE Envuelve a los HEADERs y al BODY
Define la estructura que describe el contenido del mensaje y sus instrucciones de proceso
HEADER Aparece cero o más veces en el mensaje
Es utilizado para definir información de control
BODY Aparece exactamente una vez en el mensaje
Define los parámetros y sus valores
Introducción a Servicios Web
P · 19.
1.c. INTRODUCCIÓN - SOAP
SOAP – Estilos de comunicación
Document
El parámetro de entrada de un servicio es cualquier documento XML
La respuesta puede ser cualquier cosa o incluso ninguna cosa
Este estilo de comunicación es requerido para garantizar interoperabilidad WS-i
RPC
Fue el primer estilo de comunicación definido, por lo que es muy utilizado en la actualidad
SOAP gestiona las llamadas RPC a través de XML
SOAP – Encodings
Encoded
Permite marshalling/unmarshalling de valores para los tipos definidos en el modelo SOAP 1.1
Literal
Permite mensajes XML simples que no incluyen información de encoding
Define los tipos empleados a través de un XML Schema (XSD)
Introducción a Servicios Web
P · 20.
1.c. INTRODUCCIÓN - SOAP
SOAP – Modelos de mensaje
Document/literal
Debe utilizarse para la creación de cualquier servicio web nuevo
Provee interoperabilidad WS-i
RPC/literal
No es muy usado en la práctica, ya que no permite (por ejemplo) el mapeo de Arrays
RPC/encoded
No provee interoperabilidad WS-i
Las primeras implementaciones de servicios web en Java (por ejemplo http://axis.apache.org/axis/)solo soportaban este modelo, por lo que todavía existen muchos servicios web generados de estamanera
Document/encoded
No se usa en la práctica
Introducción a Servicios Web
P · 21.
1.c. INTRODUCCIÓN - SOAP
Introducción a Servicios Web
RPC/encoded
Document/literal
P · 22.
1.c.i INTRODUCCIÓN - Marshalling
Se denomina Object/XML Mapping al proceso que convierte un documento XML a un objeto y viceversa. A esteproceso también se le denomina XML Marshalling o Serialización XML.
Actualmente se utilizan varios motores de marshalling de manera generalizada:
JAXB (http://jaxb.java.net/) – Estándar de Java desarrollado por Oracle
JIBX (http://jibx.sourceforge.net/) – Proyecto de código libre
XMLBeans (http://xmlbeans.apache.org/) – Proyecto iniciado por Weblogic y cedido posteriormente aApache
Castor (http://www.castor.org/) – Uno de los primeros proyectos de software libre para realizarmarshalling
(!) Axis 1 (http://axis.apache.org/axis/) – Axis ya realizaba el proceso de marshalling a través de laconstrucción de clases Java de conversión estáticas a partir del documento WSDL
La mayoría de ellos utilizan encoding UTF-8 por defecto para realizar sus transformaciones, ya que el “WS-IBasic Profile 1.1” define que los documentos XML de un servicio web deben utilizar encoding UTF-8 o UTF-16.
Se puede configurar el proceso de marshalling de dos maneras:
Generando las clases Java de conversión (estáticas o dinámicas) a partir de un documento XSD
Utilizando anotaciones en los beans de Java para indicarle los campos que deben ser convertidos almotor de marshalling
Introducción a Servicios Web
P · 23.
1.c.i INTRODUCCIÓN - Marshalling
Introducción a Servicios Web
<xs:element name="person"><xs:complexType><xs:sequence><xs:element name="name" type="xs:string" /><xs:any processContents="skip" maxOccurs="unbounded" minOccurs="0" />
</xs:sequence></xs:complexType>
</xs:element>
<xs:element name="person"><xs:complexType><xs:sequence><xs:element name="name" type="xs:string" /><xs:any processContents="skip" maxOccurs="unbounded" minOccurs="0" />
</xs:sequence></xs:complexType>
</xs:element>
import org.w3c.dom.Element;
@XmlRootElementclass Person {public String getName();public void setName(String);
@XmlAnyElementpublic List<Element> getAny();
}
import org.w3c.dom.Element;
@XmlRootElementclass Person {public String getName();public void setName(String);
@XmlAnyElementpublic List<Element> getAny();
}
Esquema XSD
Definición por anotaciones
P · 24.
1.c.ii INTRODUCCIÓN – Procesamiento de errores y control de excepciones
Cuando se produce un error de proceso o una excepción en el tratamiento de una petición a un servicio web,aparece un bloque en el SOAP BODY denominado SOAP FAULT.
El elemento SOAP FAULT debe aparecer como una entrada del SOAP BODY y solo debe aparecer una vez.
Elementos de un SOAP FAULT
Code o FaultCode
Es un elemento obligatorio que contiene el tipo de error
Puede contener los siguientes valores
VersionMismatch - Cuando el nodo ENVELOPE no es el elemento raíz del mensaje SOAP o suestructura no se ajusta a la especificación declarada
MustUnderstand – Se produce cuando no se cumplen las restricciones o inclusiones relativas aespacios de nombres declaradas en el HEADER
DataEncodingUnknown – Es el código menos usual y solo aplica al modelo encoded. Seproduce cuando el valor de uno de los nodos del mensaje lleva un encoding diferente alsoportado
Sender – Se ha producido un error de proceso de la petición en el servidor.
Receiver – Se ha producido un error de proceso de la respuesta en el cliente bien debido avalores no esperados o bien debido a estructura del mensaje no esperada
Introducción a Servicios Web
P · 25.
1.c.ii INTRODUCCIÓN – Procesamiento de errores y control de excepciones
Elementos de un SOAP FAULT (cont.)
Reason o FaultString
Es un elemento obligatorio
Incluye información textual sobre el error
Node
Es un elemento opcional
Indica la URI del nodo del mensaje SOAP que ha provocado el error
Role o FaultActor
Es un elemento opcional
Indica la URI del nodo que se estaba procesando cuando se produjo el error
Detail
Es un elemento opcional
Incluye información adicional sobre el error específica para la aplicación
Introducción a Servicios Web
P · 26.
1.c.ii INTRODUCCIÓN – Procesamiento de errores y control de excepciones
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"xmlns:m="http://www.example.org/timeouts"xmlns:xml="http://www.w3.org/XML/1998/namespace">
<env:Body><env:Fault><env:Code><env:Value>env:Sender</env:Value><env:Subcode><env:Value>m:MessageTimeout</env:Value></env:Subcode>
</env:Code><env:Reason><env:Text xml:lang="en">Sender Timeout</env:Text>
</env:Reason><env:Detail><m:MaxTime>P5M</m:MaxTime></env:Detail></env:Fault></env:Body></env:Envelope>
Introducción a Servicios Web
P · 27.
1.c.iii INTRODUCCIÓN – Streaming
Message Transmission Optimizacion Mechanism (MTOM)
http://www.w3.org/TR/soap12-mtom/
Permite la transmisión de cadenas de datos binarias
MTOM encapsula los dos estándares anteriores
SOAP Message with Attachments (SwA) - Java
http://www.w3.org/TR/SOAP-attachments
Direct Internet Message Encapsulation (DIME) - Microsoft
http://bgp.potaroo.net/ietf/all-ids/draft-nielsen-dime-02.txt
MTOM es interoperable
Cumple el profile de interoperabilidad 1.1 de WS-i
Introducción a Servicios Web
P · 28.
1.c.iii INTRODUCCIÓN – Streaming
El mecanismo se basa en la utilización de datos base64Binary definido en la especificación XSD 2
http://www.w3.org/TR/2004/PER-xmlschema-2-20040318/#base64Binary<soap:Body><tns:ByteEcho><tns:data>JVBERi0xLjYNJeLjz9MNCjE+DQpzdGFyNCjEx0YNCg==</tns:data></tns:ByteEcho></soap:Body>
Una vez detectada la cadena, el mecanismo MTOM se encarga de separar los datos en un contenedor MIMEutilizando el estándar XOP (http://www.w3.org/TR/xop10/)<soap:Envelope><soap:Body><tns:ByteEcho><tns:data><xop:Include href="cid:[email protected]"/></tns:data></tns:ByteEcho></soap:Body></soap:Envelope>--MIMEBoundary000000content-id: <[email protected]>content-type: application/octet-streamcontent-transfer-encoding: binary
Introducción a Servicios Web
P · 29.
1.c.iv INTRODUCCIÓN – Uso de interceptores
Interceptores
El uso de interceptores o manejadores en servicios web es análogo al uso de filtros en páginas web.
Permiten aplicar reglas comunes a todos los servicios web de petición y respuesta gestionados por laaplicación
Requieren configuración XML para su lanzamiento y la implementación de un interface para modelar sucomportamiento
Interface de JAX-RPC
http://download.oracle.com/javaee/1.4/api/javax/xml/rpc/handler/Handler.html
package javax.xml.rpc.handler;public interface Handler{
public boolean handleRequest(javax.xml.rpc.handler.MessageContext context);public boolean handleResponse(javax.xml.rpc.handler.MessageContext context);public boolean handleFault(javax.xml.rpc.handler.MessageContext context);public void destroy();public void init(javax.xml.rpc.handler.HandlerInfo config);public javax.xml.namespace.QName[] getHeaders();
}
Introducción a Servicios Web
P · 30.
1.c.iv INTRODUCCIÓN – Uso de interceptores
Interface de JAX-WS
http://jax-ws.java.net/nonav/jaxws-api/2.2/javax/xml/ws/handler/Handler.html
package javax.xml.ws.handler;public interface Handler<C extends javax.xml.ws.handler.MessageContext> {
public boolean handleMessage(C context);public boolean handleFault(C context);public void close(C context);
}
¿Para qué puede emplearse un interceptor?
Escribir la traza de peticiones y respuestas SOAP
Ejecutar validaciones comunes de datos
Ejecutar acciones de identificación comunes
Unificar el tratamiento de errores
Introducción a Servicios Web
P · 31.
Introducción a Servicios Web
P · 32.
2. WSDL - Puntos de entrada
Web Service Description Language (WSDL)
Estándar que permite describir el “contrato” de un servicio web
Información que contienen las peticiones y respuestas a un servicio web
Cómo se trasmite el servicio a través de protocolo particular (por ejemplo SOAP sobre HTTP)
La ubicación o punto de entrada del servicio web
Introducción a Servicios Web
P · 33.
2. WSDL - Puntos de entrada
WSDL Definition (<wsdl:definitions>)
Documento XML que compone una descripción WSDL
Incluye los espacios de nombres utilizados por los diferentes elementos del documento
Se recomiendo utilizar un espacio de nombres significativo para los elementos definidos por lapropia aplicación
targetNamespace=http://censo.servicios.zaragoza.es
Tipos (<wsdl:types>)
Define los tipos de datos que van a ser utilizados por los métodos del servicio web
Se describen a través de Esquemas XML (XSD - http://www.w3.org/XML/Schema)
Mensajes (<wsdl:message>)
Cada mensaje está identificado por un nombre
Contiene una o más partes que hacen referencia a alguno de los tipos definidos
Introducción a Servicios Web
P · 34.
2. WSDL - Puntos de entrada
Tipo de Puertos (<wsdl:portType>)
Un puerto incluye una serie de operaciones
Cada operación puede contener tres tipos de mensaje
Input Output Fault
Mapeos (<wsdl:binding>)
Son una instanciación de un puerto
Definen el protocolo y el puerto de entrada de cada una de las operaciones
Cada operación tiene un estilo (document/rpc) y un encoding (literal/encoded)
Servicios (<wsdl:service>)
Define la ubicación de los puertos mapeados
Contiene una o más partes que hacen referencia a alguno de los tipos definidos
Introducción a Servicios Web
P · 35.
2. WSDL - Puntos de entrada
Introducción a Servicios Web
P · 36.
2. WSDL - Puntos de entrada
Introducción a Servicios Web
P · 37.
Introducción a Servicios Web
P · 38.
3. SOLUCIÓN - CXF con anotaciones
Enfoques de diseño
Introducción a Servicios Web
Enfoque Ventajas DesventajasJava first • Requiere menos conocimiento de
WSDL, XML, WS-i…• Mejor soportada por las
herramientas de desarrollo• Más natural para desarrolladores
Java
• Propensa a problemas deinteroperabilidad
• Más sensible a los cambios• Menos control sobre el WSDL
WSDL first • Facilita la interoperabilidad• Menos sensible a los cambios
(versionado)• Permite mayor control sobre el
WSDL
• Requiere más conocimiento deWSDL, XML, WS-i…
• No están soportadas por unentorno de desarrollo propio
• Tiempos de desarrollo máselevados
P · 39.
3. SOLUCIÓN - CXF con anotaciones
¿Por qué se ha elegido CXF?
Es la propuesta de Apache como sustituto a la familia Axis
Es uno de los frameworks de servicios web más utilizados
Da soporte a todos los estándares
Permite múltiples protocolos de transporte
Tendencias
AXIS 2 – Herencia de AXIS 1 http://axis.apache.org/axis2/java/core/
Spring WS – Modelar a partir del contrato http://static.springsource.org/spring-ws/sites/2.0/
CXF – Modelar a partir de los datos http://cxf.apache.org/
Metro - Implementación de referencia http://metro.java.net/
* Más información en http://wiki.apache.org/ws/StackComparison
Introducción a Servicios Web
P · 40.
3. SOLUCIÓN - CXF con anotaciones
Características de Apache CXF (http://cxf.apache.org/)
Estándares soportados
SOAP 1.1, 1.2
WSDL 1.1
WS-I BasicProfile 1.1
WS-Security 1.0, 1.1
Especificaciones implementadas
JAXB 2.x
JAX-WS 2.x
Requisitos
Java 5 o superior (aunque puede funcionar en Java 1.4 con http://retrotranslator.sourceforge.net/)
Herramientas
Integración nativa con Spring 2 o superior
Soporte a múltiples marshallers (JAXB, XmlBeans, Aegis, SDO)
Publicación automática de WSDL
Generación de servicios a partir de XSD o WSDL
Introducción a Servicios Web
P · 41.
3. SOLUCIÓN - CXF con anotaciones
Anotaciones
Están disponibles a partir de Java 5
Permiten asociar comportamientos a atributos y métodos de las clases java
http://download.oracle.com/javase/1.5.0/docs/guide/language/annotations.html
Anotaciones utilizadas por CXF
Descripción del servicio
Utiliza anotaciones estándar de JAX-WS
@WebService, @WebMethod, @WebParam, @WebResult…
http://jax-ws.java.net/jax-ws-ea3/docs/annotations.html
Descripción del mapeo de datos
Utiliza anotaciones estándar de JAXB
@XmlElement, @XmlAttribute, @XmlType, @XmlValue…
http://download.oracle.com/javaee/5/api/javax/xml/bind/annotation/package-summary.html
Integración con Spring
Utiliza las características de inyección de beans a través de descriptores XML
http://static.springsource.org/spring/docs/2.0.x/reference/beans.html
Introducción a Servicios Web
P · 42.
3. SOLUCIÓN - CXF con anotaciones
Paso 1. Definir el servicio web// Utilizando anotaciones de JAX-WS@WebServicepublic interface CensoService {Persona getPersona(@WebParam(name=“nif”) String nif);
}Paso 2. Implementar el servicio web// Anotación de JAX-WS@WebService( endpointInterface = “CensoService” )public class CensoServiceImpl implements CensoService {Persona getPersona(String nif) {
…}
…}
Introducción a Servicios Web
P · 43.
3. SOLUCIÓN - CXF con anotaciones
Paso 3. Definir los beans de intercambio de datos// Utilizando anotaciones de JAXB@XmlRootElementpublic class Persona {private String nif;private String nombre;
public String getNif() { … }public void setNif(String nif) { … }public String getNombre() { … }public void setNombre(String nombre) { … }
…}
Introducción a Servicios Web
P · 44.
3. SOLUCIÓN - CXF con anotaciones
Paso 4. Definir las opciones de publicación del servicio web (cxf.xml)<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:jaxws="http://cxf.apache.org/jaxws"xsi:schemaLocation="
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsdhttp://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<!–- Utilizando el espacio de nombres de JAX-WS --><jaxws:endpoint id=“censo”
implementor=“CensoServiceImpl”address="/CensoWS">
</jaxws:endpoint>
</beans>
Introducción a Servicios Web
P · 45.
3. SOLUCIÓN - CXF con anotaciones
Paso 5. Dar de alta el punto de entrada en el descriptor web<web-app><!–- Añadir la configuración de CXF a través de Spring --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:cxf.xml</param-value>
</context-param><!–- Listener de SPRING --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener><!–- Servlet de CXF --><servlet><servlet-name>CXFServlet</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet><servlet-mapping><servlet-name>CXFServlet</servlet-name><url-pattern>/services/*</url-pattern>
</servlet-mapping></web-app>
Introducción a Servicios Web
P · 46.
3. SOLUCIÓN - CXF con anotaciones
¡El servicio web ya está disponible!
Introducción a Servicios Web
P · 47.
3. SOLUCIÓN - CXF con anotaciones
Interceptores
http://cxf.apache.org/docs/interceptors.html
Utiliza los interceptores por defecto de JAX-WS en sus cuatro cadenas de procesamiento
inInterceptors - Permite realizar operaciones sobre los SOAP de entrada
outInterceptors – Permite realizar operaciones sobre los SOAP de salida
inFaultInterceptors – Permite realizar operaciones sobre SOAP FAULT de entrada
outFaultInterceptors – Permite realizar operaciones sobre SOAP FAULT de salida
Introducción a Servicios Web
// Utilizando inyección de Spring<jaxws:endpoint id=“censo”
implementor=“CensoServiceImpl”address="/CensoWS">
<jaxws:inInterceptors><bean class=“MyInterceptor”/>
</jaxws:inInterceptors></jaxws:endpoint>
// Utilizando inyección de Spring<jaxws:endpoint id=“censo”
implementor=“CensoServiceImpl”address="/CensoWS">
<jaxws:inInterceptors><bean class=“MyInterceptor”/>
</jaxws:inInterceptors></jaxws:endpoint>
// Utilizando anotaciones de JAX-WS@WebService@InInterceptors (interceptors={“MyInterceptor"})public interface CensoService {}
// Utilizando anotaciones de JAX-WS@WebService@InInterceptors (interceptors={“MyInterceptor"})public interface CensoService {}
P · 48.
3. SOLUCIÓN - CXF con anotaciones
Interceptores – Fases
Introducción a Servicios Web
P · 49.
3. SOLUCIÓN - CXF con anotaciones
Interceptores
public class MyInterceptor extends AbstractPhaseInterceptor<Message> {
public MyInterceptor() {super(Phase.RECEIVE);
}
public void handleMessage(Message message) {String encoding = (String) message.get(Message.ENCODING);if (encoding.toLowerCase().indexOf("utf-8") == -1) {
throw new Fault("Encoding " + encoding + " no soportado. Use UTF-8");}
}
public void handleFault(Message messageParam) {}
}
Introducción a Servicios Web
P · 50.
Introducción a Servicios Web
P · 51.
4. INVOCACIÓN a SERVICIOS WEB
La invocación a un servicio web puede construirse de diferentes maneras:
Utilizando un software específico
Recomendable para la realización de pruebas
El más utilizado es denominado SOAP UI (http://www.soapui.org/)
Creando un cliente Java a partir del fichero WSDL
Casi todos los frameworks de servicio web disponen de una herramienta para crear clientes Java
En el caso de CXF la herramienta es denominada wsdl2java (http://cxf.apache.org/docs/wsdl-to-java.html)
Estas herramientas pueden integrarse con scripts de Ant
Creación de clientes con Apache CXF
En caso de que se haya creado el servicio web con CXF y se desee proveer un cliente dereferencia, puede empaquetarse el interface del servicio web junto con los beans de parámetros
El cliente puede realizar la invocación al servicio a través de las clase base de JAX-WSJaxWsProxyFactoryBean
(*) Herramientas adicionales http://cxf.apache.org/docs/tools.html
Introducción a Servicios Web
P · 52.
4. INVOCACIÓN a SERVICIOS WEB
SOAP UI
Introducción a Servicios Web
P · 53.
4. INVOCACIÓN a SERVICIOS WEB
Generación a partir del WSDL
Introducción a Servicios Web
Ficheros generados
Peticion.java
Bean JAXB que representa los datos dela petición
Respuesta.java
Bean JAXB que representa los datos dela respuesta
Servicio.xsd
Esquema XML que define loselementos de petición y respuesta
Servicio.wsdl
Documento WSDL del servicio
P · 54.
4. INVOCACIÓN a SERVICIOS WEB
Cliente CXFimport org.apache.cxf.interceptor.LoggingInInterceptor;import org.apache.cxf.interceptor.LoggingOutInterceptor;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
public final class Client {private static String URL = "http://localhost:8080/sampleCXF/services/CensoWS";public static void main(String args[]) throws Exception {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.getInInterceptors().add(new LoggingInInterceptor());factory.getOutInterceptors().add(new LoggingOutInterceptor());factory.setServiceClass(CensoService.class);factory.setAddress(URL);CensoService client = (CensoService) factory.create();
Persona response = client.getPersona("88888888Y");System.out.println(response.getNif() + " - " + response.getNombre());
}}
Introducción a Servicios Web
P · 55.
Introducción a Servicios Web
P · 56.
5. VERSIONADO DE SERVICIOS WEB
Es un problema que no está resuelto en las arquitecturas de servicios web, aunque el borrador de laespecificación de WSDL 2.0 (http://www.w3.org/TR/wsdl20/) ya incluye directrices de diseño
Debe ser resuelto aplicando patrones de diseño y manuales de buenas maneras
Condiciones de compatibilidad genéricas
Compatibilidad hacia atrás (versionado menor)
Añadir nuevas operaciones (WSDL)
Añadir nuevos valores (XSD)
Incompatibilidad hacia atrás (versionado mayor)
Eliminar operaciones (WSDL)
Renombrar operaciones (WSDL)
Cambio de los parámetros (el orden o el tipo) de una operación
Cambio en la estructura de un tipo de datos complejo
Introducción a Servicios Web
P · 57.
5. VERSIONADO DE SERVICIOS WEB
Versionado menor
Servicio Censo 1.0
@WebServicepublic interface CensoService {Persona getPersona(@WebParam(name="nif") String nif);
}
public class Persona {private String nif;private String nombre;…
}
Introducción a Servicios Web
P · 58.
5. VERSIONADO DE SERVICIOS WEB
Versionado menor
Servicio Censo 1.1
@WebServicepublic interface CensoService {Persona getPersona(@WebParam(name="nif") String nif);Empresa getEmpresa(@WebParam(name="cif") String cif);
}
public class Persona {private String nif;private String nombre;private String direccion;…
}
Introducción a Servicios Web
P · 59.
5. VERSIONADO DE SERVICIOS WEB
Versionado mayor
Servicio Censo 2.0
@WebServicepublic interface CensoServiceV2 {Persona getPersona(@WebParam(name="persona") Persona persona);Empresa getEmpresa(@WebParam(name="empresa") Empresa empresa);
}
Es necesario añadir un nuevo punto de entrada
http://localhost:8888/cxfMTOM/services/CensoWS Servicio en versión 1.X
http://localhost:8888/cxfMTOM/services/CensoV2WS Servicio en versión 2.X
Introducción a Servicios Web
P · 60.
Introducción a Servicios Web
P · 61.
6. SEGURIDAD – Cifrado (HTTPS)
Capa de transporte
Los servicios web pueden ser invocados a través de diferentes capas de transporte
HTTP
JMS
Local
EmailConfiguración de medios de transporte en CXF - http://cxf.apache.org/docs/transports.html
Seguridad en la capa transporte (HTTPS)
No es necesaria ninguna configuración adicional para los servicios web
El cifrado de datos se aplica a través de la capa de transporte HTTP
Requiere un certificado privado en el servidor y un certificado público en el cliente
Introducción a Servicios Web
P · 62.
6. SEGURIDAD – Identificación y no repudio (WSS)
WS-Security
Especificación que define la seguridad de los servicios web a nivel de mensaje
http://docs.oasis-open.org/wss/v1.1/
Soporta los mecanismos básicos de seguridad
Autenticación: SAML, Username Token, XML Signature (JSR-105)
Autorización: J2EE security, SAML Assertions
Confidencialidad: XML Encryption (JSR-106)
Integridad: XML Signature (JSR-105)
No repudio: XML Signature (JSR-105)
Introducción a Servicios Web
P · 63.
6. SEGURIDAD – Identificación y no repudio (WSS)
Frameworks
Axis2
Basado en Apache Rampart
http://axis.apache.org/axis2/java/rampart/
Spring WS
Independiente del motor de WSS
http://static.springsource.org/spring-ws/sites/2.0/reference/html/security.html
CXF
Basado en WSS4j
http://ws.apache.org/wss4j/
Metro (Glassfish)
Basado en XWSS
http://xwss.java.net/
http://www.ibm.com/developerworks/webservices/library/j-jws14/index.html?ca=drs-
Introducción a Servicios Web
P · 64.
6. SEGURIDAD – Identificación y no repudio (WSS)
Frameworks – Interoperabilidad
Existen ciertas partes del estándar WSS que no están cubiertas por las primeras versiones de WSS4J
WSS4j no soporta InclusiveNamespaces en la canonicalización de los métodos de XMLDSig (opcional enel estándar WSS)
WSS4j no soporta Timestamp firmado (opcional en el estándar WSS)
Configuración de XWSS para garantizar la compatibilidad con WSS4j
<xwss:Sign includeTimestamp="false"><xwss:CanonicalizationMethod disableInclusivePrefix="true" /><xwss:SignatureTarget type="qname" value="SOAP-BODY">
<xwss:Transform algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" disableInclusivePrefix="true"/></xwss:SignatureTarget>
</xwss:Sign>
Introducción a Servicios Web
P · 65.
6. SEGURIDAD – Identificación y no repudio (WSS)
WSS en CXF
Debe definirse a través de los interceptores de WSS4j<jaxws:inInterceptors>
<bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"/><bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor"/>
</jaxws:inInterceptors>
Para utilizar la firma WSS debe implementarse la clase abstracta provista por CXF(AbstractWSS4JInterceptor)
Mensajes de entrada (InInterceptor)
Verificar el mensaje SOAP
Mensajes de salida (OutInterceptor)
Firmar el mensaje SOAP
Introducción a Servicios Web
P · 66.
Introducción a Servicios Web
P · 67.
7. Servicios web RESTfulRepresentational State Transfer (REST)
Servicios Web REST
WS- collection
service
collection
entry
listEntries()
addEntry()
getEntry()
deleteEntry()
updateEntry()
listEntries()
addEntry()
getEntry()
deleteEntry()
updateEntry()
RESTful
Único endpoint que procesatodas las operaciones a travésde un interface específico
Conjunto de "recursos" conoperaciones asociadas a lacolección y al recurso
P · 68.
7. Servicios web RESTfulEstándares
JAX-RS (JSR-311) es la JCP que provee la API Java para servicios web RESTful sobre protocolo HTTP
http://jsr311.java.net/
XML, eXtensible Markup Language, es un metalenguaje extensible de etiquetas desarrollado por el (W3C)
http://www.w3.org/XML/
<user><username>john</username><password>password</password><link>/users/john</link>
</user>
JSON, acrónimo de JavaScript Object Notation, es un formato ligero para el intercambio de datos. JSON es unsubconjunto de la notación literal de objetos de JavaScript que no requiere el uso de XML.
http://www.json.org/
{"user":{"username":"john", "password":"password", "link":"/users/john"}
Servicios Web REST
P · 69.
7. Servicios web RESTfulUn ejemplo con CXF
Paso 1. Definir el servicio web// Utilizando anotaciones de JAX-RS@Path("/")@Produces("application/xml")public interface CensoService {
@GET@Path("/personas")Personas getPersonas();
}Paso 2. Implementar el servicio webpublic class CensoServiceImpl implements CensoService {
public Personas getPersonas() {…
}…}
Servicios Web REST
P · 70.
7. Servicios web RESTfulUn ejemplo con CXF
Paso 3. Definir los recursos// Utilizando anotaciones de JAXB@XmlRootElement(name="persona")public class Persona {
private Integer id;private String nombre;
}@XmlRootElement(name="personas")public class Personas {
private Collection<Persona> personas;@XmlElement(name="persona")@XmlElementWrapper(name="personas")public Collection<Persona> getPersonas() {
return personas;}
}
Servicios Web REST
P · 71.
7. Servicios web RESTfulUn ejemplo con CXF
Paso 4. Definir las opciones de publicación del servicio web (cxf.xml)<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:jaxrs="http://cxf.apache.org/jaxrs"xsi:schemaLocation=“http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsdhttp://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">
<!–- Utilizando el espacio de nombres de JAX-RS --><jaxrs:server id="service" address="/">
<jaxrs:serviceBeans><bean id="serviceImpl" class=“CensoServiceImpl”/>
</jaxrs:serviceBeans><jaxrs:extensionMappings>
<entry key="xml" value="application/xml" /></jaxrs:extensionMappings>
</jaxrs:server></beans>
Servicios Web REST
P · 72.
7. Servicios web RESTfulUn ejemplo con CXF
Paso 5. Dar de alta el punto de entrada en el descriptor web<web-app><!–- Añadir la configuración de CXF a través de Spring --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:cxf.xml</param-value>
</context-param><!–- Listener de SPRING --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener><!–- Servlet de CXF --><servlet><servlet-name>CXFServlet</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet><servlet-mapping><servlet-name>CXFServlet</servlet-name><url-pattern>/*</url-pattern>
</servlet-mapping></web-app>
Servicios Web REST
P · 73.
7. Servicios web RESTfulUn ejemplo con CXF
El servicio web ya está disponible
Servicios Web REST
P · 74.
7. Servicios web RESTfulUso de servicios web RESTful
Suelen usarse junto con AJAX
Escenarios adecuados
Cuando los recursos van a estar disponibles para un grupo de usuarios desconocidos potencialmentegrande.
Cuando el propósito de la aplicación es mandar información.
Cuando está previsto que la aplicación crezca continuamente.
Cuando el uso de recursos hardware (CPU, memoria, ancho de banda…) no es determinante.
Cuando la gestión del estado de la aplicación es simple.
Escenarios desaconsejados
Situaciones donde la seguridad de los datos es determinante
Cuando el propósito principal de la aplicación es recibir y procesar grandes cantidades de información.
Cuando el uso de los recursos hardware es determinante.
Cuando la gestión del estado de la aplicación no es trivial
Servicios Web REST
P · 75.
Introducción a Servicios Web
P · 76.
REFERENCIAS
“The Java Web Services Tutorial”
http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/2.0/tutorial/doc/
“JAX-WS 2.2 Specification”
http://jcp.org/aboutJava/communityprocess/mrel/jsr224/index3.html
“Developing Apache CXF Interceptors”
http://fusesource.com/docs/esb/4.2/cxf_interceptors/cxf_interceptors.pdf
“Configuring Web Service Endpoints”
http://fusesource.com/docs/esb/4.2/deploy_service/deploy_service.pdf
“CXF for the enterprise and web”
http://netzooid.com/presentations/cxf-apachecon-us-07.ppt
“Understanding and modelling WSDL 1.1”
http://www.ibm.com/developerworks/webservices/library/j-jws20/index.html
“Web Services Handbook for WebSphere Application Server Version 6.1”
www.redbooks.ibm.com/redbooks/pdfs/sg247257.pdf
“Java Enterprise Edition 5 Web Services Developer Certified Professional Exam” http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=41&p_exam_id=1Z0_862
Introducción a Servicios Web