Formación WS

8,940 views

Published on

Published in: Technology
  • Be the first to like this

Formación WS

  1. 1. Introducción a Servicios Web
  2. 2. Introducción a Servicios Web TEMARIO 1. Introducción a. Conceptos básicos de servicios web: Descripción de los estándares y arquitectura de los 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 P · 2.
  3. 3. Introducción a Servicios Web TEMARIO 4. Invocación a servicios web: Herramientas y APIs para la creación y despliegues de servicios 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 P · 3.
  4. 4. Introducción a Servicios Web P · 4.
  5. 5. Introducción a Servicios Web 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”.  El diálogo entre las dos partes se establece a travé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 y termina con la respuesta P · 5.
  6. 6. Introducción a Servicios Web 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 procesar las respuestas del mismo. P · 6.
  7. 7. Introducción a Servicios Web 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…) P · 7.
  8. 8. Introducción a Servicios Web 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 http://www.ibm.com/developerworks/webservices/standards/ P · 8.
  9. 9. Introducción a Servicios Web 1.a. INTRODUCCIÓN - Conceptos básicos – Estándares ESTÁNDARES INDUSTRIA http://wsit.java.net/ Web Services Interoperability Technologies http://msdn.microsoft.com/en-us/netframework/aa663324 Windows Communication Foundation P · 9.
  10. 10. Introducción a Servicios Web 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/ P · 10.
  11. 11. Introducción a Servicios Web 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 web entre 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 P · 11.
  12. 12. Introducción a Servicios Web 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 datos intercambiados 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 P · 12.
  13. 13. Introducción a Servicios Web 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/ P · 13.
  14. 14. Introducción a Servicios Web P · 14.
  15. 15. Introducción a Servicios Web 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 de transporte (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 como protocolo de transporte.  También permite usar otros protocolos de transporte (JMS, correo electrónico…) P · 15.
  16. 16. Introducción a Servicios Web 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 de tecnologías como RMI (SOAP puede funcionar por el puerto 80) Característica XML-RPC SOAP Escalares básicos V V Estructuras V V Arrays V V Estructuras nombradas y arrays X V Manejo de fallos V V Encoding X V Tipos de datos definidos por el usuario X V Requiere entendimiento del cliente X V Instrucciones de proceso específicas X V P · 16.
  17. 17. Introducción a Servicios Web P · 17.
  18. 18. Introducción a Servicios Web 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 P · 18.
  19. 19. Introducción a Servicios Web 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) P · 19.
  20. 20. Introducción a Servicios Web 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 esta manera  Document/encoded  No se usa en la práctica P · 20.
  21. 21. Introducción a Servicios Web 1.c. INTRODUCCIÓN - SOAP RPC/encoded Document/literal P · 21.
  22. 22. Introducción a Servicios Web 1.c.i INTRODUCCIÓN - Marshalling Se denomina Object/XML Mapping al proceso que convierte un documento XML a un objeto y viceversa. A este proceso 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 a Apache  Castor (http://www.castor.org/) – Uno de los primeros proyectos de software libre para realizar marshalling  (!) Axis 1 (http://axis.apache.org/axis/) – Axis ya realizaba el proceso de marshalling a través de la construcció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-I Basic 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 al motor de marshalling P · 22.
  23. 23. Introducción a Servicios Web 1.c.i INTRODUCCIÓN - Marshalling <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> Esquema XSD import org.w3c.dom.Element; @XmlRootElement class Person { public String getName(); public void setName(String); @XmlAnyElement public List<Element> getAny(); } Definición por anotaciones P · 23.
  24. 24. Introducción a Servicios Web 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 su estructura no se ajusta a la especificación declarada  MustUnderstand – Se produce cuando no se cumplen las restricciones o inclusiones relativas a espacios de nombres declaradas en el HEADER  DataEncodingUnknown – Es el código menos usual y solo aplica al modelo encoded. Se produce cuando el valor de uno de los nodos del mensaje lleva un encoding diferente al soportado  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 a valores no esperados o bien debido a estructura del mensaje no esperada P · 24.
  25. 25. Introducción a Servicios Web 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 P · 25.
  26. 26. Introducción a Servicios Web 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> P · 26.
  27. 27. Introducción a Servicios Web 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 P · 27.
  28. 28. Introducción a Servicios Web 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 MIME utilizando el estándar XOP (http://www.w3.org/TR/xop10/) <soap:Envelope> <soap:Body> <tns:ByteEcho> <tns:data><xop:Include href="cid:1.633335845875937500@example.org"/></tns:data> </tns:ByteEcho> </soap:Body> </soap:Envelope> --MIMEBoundary000000 content-id: <1.633335845875937500@example.org> content-type: application/octet-stream content-transfer-encoding: binary P · 28.
  29. 29. Introducción a Servicios Web 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 la aplicación  Requieren configuración XML para su lanzamiento y la implementación de un interface para modelar su comportamiento 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(); } P · 29.
  30. 30. Introducción a Servicios Web 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 P · 30.
  31. 31. Introducción a Servicios Web P · 31.
  32. 32. Introducción a Servicios Web 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 P · 32.
  33. 33. Introducción a Servicios Web 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 la propia 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 P · 33.
  34. 34. Introducción a Servicios Web 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 P · 34.
  35. 35. Introducción a Servicios Web 2. WSDL - Puntos de entrada P · 35.
  36. 36. Introducción a Servicios Web 2. WSDL - Puntos de entrada P · 36.
  37. 37. Introducción a Servicios Web P · 37.
  38. 38. Introducción a Servicios Web 3. SOLUCIÓN - CXF con anotaciones Enfoques de diseño Enfoque Ventajas Desventajas Java first • Requiere menos conocimiento de • Propensa a problemas de WSDL, XML, WS-i… interoperabilidad • Mejor soportada por las • Más sensible a los cambios herramientas de desarrollo • Menos control sobre el WSDL • Más natural para desarrolladores Java WSDL first • Facilita la interoperabilidad • Requiere más conocimiento de • Menos sensible a los cambios WSDL, XML, WS-i… (versionado) • No están soportadas por un • Permite mayor control sobre el entorno de desarrollo propio WSDL • Tiempos de desarrollo más elevados P · 38.
  39. 39. Introducción a Servicios Web 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 P · 39.
  40. 40. Introducción a Servicios Web 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 P · 40.
  41. 41. Introducción a Servicios Web 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 P · 41.
  42. 42. Introducción a Servicios Web 3. SOLUCIÓN - CXF con anotaciones Paso 1. Definir el servicio web // Utilizando anotaciones de JAX-WS @WebService public 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) { … } … } P · 42.
  43. 43. Introducción a Servicios Web 3. SOLUCIÓN - CXF con anotaciones Paso 3. Definir los beans de intercambio de datos // Utilizando anotaciones de JAXB @XmlRootElement public class Persona { private String nif; private String nombre; public String getNif() { … } public void setNif(String nif) { … } public String getNombre() { … } public void setNombre(String nombre) { … } … } P · 43.
  44. 44. Introducción a Servicios Web 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/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://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> P · 44.
  45. 45. Introducción a Servicios Web 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> P · 45.
  46. 46. Introducción a Servicios Web 3. SOLUCIÓN - CXF con anotaciones ¡El servicio web ya está disponible! P · 46.
  47. 47. Introducción a Servicios Web 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 // Utilizando inyección de Spring <jaxws:endpoint id=“censo” implementor=“CensoServiceImpl” address="/CensoWS"> // Utilizando anotaciones de JAX-WS <jaxws:inInterceptors> @WebService <bean class=“MyInterceptor”/> @InInterceptors (interceptors={“MyInterceptor"}) </jaxws:inInterceptors> public interface CensoService { </jaxws:endpoint> } P · 47.
  48. 48. Introducción a Servicios Web 3. SOLUCIÓN - CXF con anotaciones Interceptores – Fases P · 48.
  49. 49. Introducción a Servicios Web 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) { } } P · 49.
  50. 50. Introducción a Servicios Web P · 50.
  51. 51. Introducción a Servicios Web 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 de referencia, 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-WS JaxWsProxyFactoryBean (*) Herramientas adicionales http://cxf.apache.org/docs/tools.html P · 51.
  52. 52. Introducción a Servicios Web 4. INVOCACIÓN a SERVICIOS WEB SOAP UI P · 52.
  53. 53. Introducción a Servicios Web 4. INVOCACIÓN a SERVICIOS WEB Generación a partir del WSDL Ficheros generados  Peticion.java  Bean JAXB que representa los datos de la petición  Respuesta.java  Bean JAXB que representa los datos de la respuesta  Servicio.xsd  Esquema XML que define los elementos de petición y respuesta  Servicio.wsdl  Documento WSDL del servicio P · 53.
  54. 54. Introducción a Servicios Web 4. INVOCACIÓN a SERVICIOS WEB Cliente CXF import 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()); } } P · 54.
  55. 55. Introducción a Servicios Web P · 55.
  56. 56. Introducción a Servicios Web 5. VERSIONADO DE SERVICIOS WEB  Es un problema que no está resuelto en las arquitecturas de servicios web, aunque el borrador de la especificació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 P · 56.
  57. 57. Introducción a Servicios Web 5. VERSIONADO DE SERVICIOS WEB Versionado menor Servicio Censo 1.0 @WebService public interface CensoService { Persona getPersona(@WebParam(name="nif") String nif); } public class Persona { private String nif; private String nombre; … } P · 57.
  58. 58. Introducción a Servicios Web 5. VERSIONADO DE SERVICIOS WEB Versionado menor Servicio Censo 1.1 @WebService public 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; … } P · 58.
  59. 59. Introducción a Servicios Web 5. VERSIONADO DE SERVICIOS WEB Versionado mayor Servicio Censo 2.0 @WebService public 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 P · 59.
  60. 60. Introducción a Servicios Web P · 60.
  61. 61. Introducción a Servicios Web 6. SEGURIDAD – Cifrado (HTTPS) Capa de transporte Los servicios web pueden ser invocados a través de diferentes capas de transporte  HTTP  JMS  Local  Email Configuració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 P · 61.
  62. 62. Introducción a Servicios Web 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) P · 62.
  63. 63. Introducción a Servicios Web 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- P · 63.
  64. 64. Introducción a Servicios Web 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 en el 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> P · 64.
  65. 65. Introducción a Servicios Web 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 P · 65.
  66. 66. Introducción a Servicios Web P · 66.
  67. 67. Servicios Web REST 7. Servicios web RESTful Representational State Transfer (REST) WS- listEntries() addEntry() collection Único endpoint que procesa todas las operaciones a través getEntry() service de un interface específico deleteEntry() updateEntry() RESTful listEntries() addEntry() collection Conjunto de "recursos" con operaciones asociadas a la colección y al recurso getEntry() deleteEntry() updateEntry() entry P · 67.
  68. 68. Servicios Web REST 7. Servicios web RESTful Está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 un subconjunto 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"} P · 68.
  69. 69. Servicios Web REST 7. Servicios web RESTful Un 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 web public class CensoServiceImpl implements CensoService { public Personas getPersonas() { … } … } P · 69.
  70. 70. Servicios Web REST 7. Servicios web RESTful Un 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; } } P · 70.
  71. 71. Servicios Web REST 7. Servicios web RESTful Un 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.xsd http://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> P · 71.
  72. 72. Servicios Web REST 7. Servicios web RESTful Un 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> P · 72.
  73. 73. Servicios Web REST 7. Servicios web RESTful Un ejemplo con CXF El servicio web ya está disponible P · 73.
  74. 74. Servicios Web REST 7. Servicios web RESTful Uso de servicios web RESTful Suelen usarse junto con AJAX Escenarios adecuados  Cuando los recursos van a estar disponibles para un grupo de usuarios desconocidos potencialmente grande.  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 P · 74.
  75. 75. Introducción a Servicios Web P · 75.
  76. 76. Introducción a Servicios Web 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 P · 76.

×