Академический Документы
Профессиональный Документы
Культура Документы
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.
Introducción a Servicios Web
TEMARIO
P · 3.
Introducción a Servicios Web
P · 4.
Introducción a Servicios Web
“Los servicios web son a las máquinas lo que las páginas web son a los humanos”.
P · 5.
Introducción a Servicios Web
P · 6.
Introducción a Servicios Web
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.
Introducción a Servicios Web
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.
Introducción a Servicios Web
ESTÁNDARES INDUSTRIA
http://wsit.java.net/
Web Services Interoperability Technologies
http://msdn.microsoft.com/en-us/netframework/aa663324
Windows Communication Foundation
P · 9.
Introducción a Servicios Web
Básicos
P · 10.
Introducción a Servicios Web
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.
Introducción a Servicios Web
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.
Introducción a Servicios Web
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.
Introducción a Servicios Web
P · 14.
Introducción a Servicios Web
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.
Introducción a Servicios Web
P · 16.
Introducción a Servicios Web
P · 17.
Introducción a Servicios Web
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.
Introducción a Servicios Web
P · 19.
Introducción a Servicios Web
P · 20.
Introducción a Servicios Web
RPC/encoded
Document/literal
P · 21.
Introducción a Servicios Web
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.
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>
Esquema XSD
import org.w3c.dom.Element;
@XmlRootElement
class Person {
public String getName();
public void setName(String);
@XmlAnyElement
public List<Element> getAny();
}
P · 23.
Introducción a Servicios Web
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.
Introducción a Servicios Web
P · 25.
Introducción a Servicios Web
<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.
Introducción a Servicios Web
MTOM es interoperable
Cumple el profile de interoperabilidad 1.1 de WS-i
P · 27.
Introducción a Servicios Web
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.
Introducción a Servicios Web
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.
Introducción a Servicios Web
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);
}
P · 30.
Introducción a Servicios Web
P · 31.
Introducción a Servicios Web
P · 32.
Introducción a Servicios Web
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.
Introducción a Servicios Web
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.
Introducción a Servicios Web
P · 35.
Introducción a Servicios Web
P · 36.
Introducción a Servicios Web
P · 37.
Introducción a Servicios Web
Enfoques de diseño
P · 38.
Introducción a Servicios Web
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/
P · 39.
Introducción a Servicios Web
P · 40.
Introducción a Servicios Web
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.
Introducción a Servicios Web
P · 42.
Introducción a Servicios Web
P · 43.
Introducción a Servicios Web
</beans>
P · 44.
Introducción a Servicios Web
P · 45.
Introducción a Servicios Web
P · 46.
Introducción a Servicios Web
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
P · 47.
Introducción a Servicios Web
Interceptores – Fases
P · 48.
Introducción a Servicios Web
Interceptores
public MyInterceptor() {
super(Phase.RECEIVE);
}
P · 49.
Introducción a Servicios Web
P · 50.
Introducción a Servicios Web
P · 51.
Introducción a Servicios Web
SOAP UI
P · 52.
Introducción a Servicios Web
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.
Introducción a Servicios Web
Cliente CXF
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
factory.getInInterceptors().add(new LoggingInInterceptor());
factory.getOutInterceptors().add(new LoggingOutInterceptor());
factory.setServiceClass(CensoService.class);
factory.setAddress(URL);
CensoService client = (CensoService) factory.create();
}
}
P · 54.
Introducción a Servicios Web
P · 55.
Introducción a 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
P · 56.
Introducción a Servicios Web
Versionado menor
@WebService
public interface CensoService {
Persona getPersona(@WebParam(name="nif") String nif);
}
P · 57.
Introducción a Servicios Web
Versionado menor
@WebService
public interface CensoService {
Persona getPersona(@WebParam(name="nif") String nif);
Empresa getEmpresa(@WebParam(name="cif") String cif);
}
P · 58.
Introducción a Servicios Web
Versionado mayor
@WebService
public interface CensoServiceV2 {
Persona getPersona(@WebParam(name="persona") Persona persona);
Empresa getEmpresa(@WebParam(name="empresa") Empresa empresa);
}
P · 59.
Introducción a Servicios Web
P · 60.
Introducción a Servicios Web
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
P · 61.
Introducción a Servicios Web
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.
Introducción a Servicios Web
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.
Introducción a Servicios Web
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)
<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.
Introducción a Servicios Web
WSS en CXF
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.
Introducción a Servicios Web
P · 66.
Servicios Web 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.
Servicios Web REST
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.
Servicios Web REST
P · 69.
Servicios Web REST
P · 70.
Servicios Web REST
P · 71.
Servicios Web REST
P · 72.
Servicios Web REST
P · 73.
Servicios Web REST
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.
Introducción a Servicios Web
P · 75.
Introducción a Servicios Web
REFERENCIAS
P · 76.