Upload
juan-carlos-rubio-pineda
View
1.929
Download
1
Embed Size (px)
DESCRIPTION
Curso JEE5, Soa, Web Services, ESB y XML
Citation preview
Simple Object Access Protocol
»SOAP
.
• Índice− Introducción
− Estructura de mensaje SOAP
− Terminología SOAP
− Intercambio de mensajes SOAP
− Modelo de procesamiento SOAP
− Visión inicial de la API Java para SOAP.
SOAP: Introducción
¿Qué es SOAP? Definición de la W3C− SOAP es un protocolo ligero diseñado para intercambiar
información estructurada en un entorno descentralizado y distribuido.
− SOAP usa tecnología XML para definir un framework de mensajería extensible proporcionando una estructura de mensaje que puede ser intercambiado sobre una variedad de protocolos subyacentes
− El framework ha sio diseñado para ser independiente de cualquier modelo particular de programación y de implementaciones de semánticas específicas.
SOAP:Introducción
• ¿Qué es SOAP?− Simple Object Access Protocol (Protocolo simple de acceso a
objetos)
− Procotolo similar a• IIOP para CORBA
• JRMP para RMI
− Se usa XML para codificar datos• Protocolos basados en "texto" versus protocolos basados en datos
"binarios"
− Soporta RPC sobre XML (Remote Procedure Call)
SOAP:Introducción
• ¿Qué es SOAP− Sin estado
− Paradigma de intercambio de mensajes en un sólo sentido
− Las aplicaciones pueden crear patrones de interacción más complejos (solicitud/respuesta,solicitud/múltiples_respuestas, etc) combinando los intercambios de un sólo sentido con características proporcionadas po protocolos subyacentes y/o información específica de la aplicación.
− Se enfoca en el transporte, no en la semántica de los datos transportados.
SOAP:Introducción
• ¿Qué no es SOAP?− No es un modelo de componentes
• Por ello, no reemplaza ni a objetos ni a componentes (PEj. EJB, JavaBeans, etc)
− No es un lenguaje de programación• Por ello, no reemplazará a Java
− No es una solución para todo• Por ello, no reemplazará a otras tecnologías de computación distribuida
como RMI
SOAP:Introducción
• Objetivos de diseño de SOAP− Simplicidad
− Extensibilidad• Los nuevos estándares, definen nuevas semánticas
− Características no soportadas (por definición)• Recolección de basura distribuida
• Objetos por referencia
• Activación
• Procesamiento en lote de mensajes
Estructura de mensaje SOAP
Estructura de mensaje
• SOAP: Estructura de mensaje
Estructura de mensaje
• Sobre de mensaje SOAP ( SOAP Message Envelope)− Información incluída
• Namespaces
• Información de codificado ( Encoding)
− Cabecera ( HEADER)• Opcional
• Puede ser manipulada por intermediarios
− Cuerpo ( body)• Obligatoria
• Manipulado sólo por el receptor final.
Estructura de mensaje
• SOAP Header (<env:Header>)− Usado como mecanismo de extensión
• Context (contexto)
• Authentication (autenticación)
• Transaction (transacción)
• Management (gestión)
• Muchas otras de alto nivel.
− Hecho de Bloques de cabecera Header blocks (Headerentities o entidades de cabecera)
− La mayoría de las actividades estándar de los web servicesson básicamente definir entradas de cabecera estándar para un dominio particular
Estructura de mensaje
• Bloques (entradas) de cabecera SOAP− Elementos hijos de una cabecera SOAP
− Diseñados PARA SOAP como anticipación a usos futuros POR intermediarios SOAP.
• Pueden ser dirigidos individualmente a nodos SOAP
• Permiten a los intermediarios SOAP proporcionar servicios de valor añadido.
− Pueden ser inspeccionados, insertados, borrados o reenviados por nodos SOAP encontrados en el camino de un mensaje SOAP
Estructura de mensaje
• Cuerpo SOAP/SOAP Body(<env:Body>)−Hechos por bloques de cuerpo o body blocks (body
entries)
−Consumidos por receptores SOAP finales
−Transportan la información extremo a extremo, que puede ser:
• Datos de aplicación (documento XML)
• Métodos RPC y parámetros
• Errores SOAP (SOAP Fault)
Estructura de mensaje FAULT
• Fallo SOAP o SOAP Fault (<env:Fault>)−Usado para transportar información de error o
estado−Tiene los siguientes subelementos:
• faultcode
• faultstring
• faultactor
• detail
Estructura de mensaje FAULT
• Códigos de fallo de SOAP predefinidos− VersionMismatch
• Namespace inválido en el sobre SOAP
− MustUnderstand• El receptor no puede tratar el bloque de cabecera SOAP
mustUnderstand SOAP.
− Client• Indica error en el lado del cliente
− Server• Indica error en el lado servidor
Estructura de mensaje FAULT• Ejemplo de fallo SOAP : mustUnderstand no puede tratarse
<env:Envelope xmlns:env='http://www.w3.org/2001/06/s oap-envelope'>
<env:Header>
<abc:Extension1 xmlns:abc='http://example.org/2001/0 6/ext‘ env:mustUnderstand='1' />
<def:Extension2 xmlns:def='http://example.com/stuff‘ env:mustUnderstand='1' />
</env:Header>
<env:Body>
. . .
</env:Body>
</env:Envelope>
Estructura de mensaje FAULT• Ejemplo de fallo SOAP: respuesta al fallo
mustUnderstand<env:Envelope xmlns:env='http://www.w3.org/2001/06/soap-envelope'
xmlns:f='http://www.w3.org/2001/06/soap-faults' ><env:Header>
<f:Misunderstood qname='abc:Extension1‘ xmlns:abc='http://example.org/2001/06/ext'/><f:Misunderstood qname='def:Extension2‘ xmlns:def='http://example.com/stuff'/>
</env:Header>
<env:Body><env:Fault>
<faultcode>MustUnderstand</faultcode>
<faultstring> One or more mandatory headers not understood</faultstring>
</env:Fault></env:Body>
</env:Envelope>
Estructura de mensaje
• ¿Dónde poner los datos, en el bloque Header o en el bloque body? − Decisión a tomar durante el desarrollo de la aplicación
− Los bloques Header pueden ser dirigidos a varios nodos que podrían encontrarse en el camino desde el remitente hacia el destinatario final.
− Los nodos SOAP intermedios pueden proporcionar servicios de valor añadido basados en los datos de las cabeceras.
Ejemplos
• Ejemplo de mensaje de solicitud (request) de un webservice simple con un método decirHola que responde un “hola”
• SOAP Request<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://hola/">
<soapenv:Body> <ns1:decirHola>
<arg0>le envío hola</arg0> </ns1:decirHola>
</soapenv:Body>
</soapenv:Envelope> .
Ejemplos
• Ejemplo de mensaje de solicitud (request) de un webservice simple con un método decirHola que responde un “hola”
<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://hola/">
<soapenv:Body> <ns1:decirHolaResponse>
<return>Hola hola hola holaaaaaaa hola!</return></ns1:decirHolaResponse>
</soapenv:Body>
</soapenv:Envelope>
Ejemplos• Código fuente del Web Service
@WebService()
public class HolaWS {
@WebMethod
public String decirHola(String s) throws java.rmi.RemoteException {
return "Hola hola hola holaaaaaaa " + s + "!";
}
}
Rápida introducción a los namespaces
Namespaces
• Namespaces XML− Se usan para evitar la colisión de nombres
− Facilitan el agrupado de elementos.• Por ejemplo: las aplicaciones SOAP saben qué elementos pertenecen
a un determinado namespace
− Pueden usarse como esquema de control de versiones
− Sintaxis• Declaración de Namespace
• Elementos y atributos.
Namespaces
• Declaración de namespaces XML− Un prefijo se asocia con una URI
− La asociación se defina como un atributo dentro de un elemento:
xmlns:prefix
− xmlns es la palabra reservada de Namespaces; el prefijo lo define el usuario.
<classes xmlns:XMLclass=“ http://www.brandeis.edu/rseg-0151-g”><XMLclass:syllabus>...</XMLclass:syllabus></ classes>
Namespaces
• Ejemplo de Namespaces SOAP<env:Envelope xmlns :env="http://www.w3.org/2001/06/soap-envelope" >
<env:Body>
<m:GetLastTradePrice env:encodingStyle="http://www.w3.org/2001/06/soap-enco ding"
xmlns :m="http://example.org/2001/06/quotes">
<symbol>DIS</symbol>
</m:GetLastTradePrice>
</env:Body>
</env:Envelope >
• El namespace env (envelope) está definido en SOAP
• El namespace m es un namespace creado por nosotros.
Namespaces
• URI’s de Namespaces SOAP 1.1− Envelope
• http://www.w3.org/2001/06/soap-envelope
• Used for "version mismatch" check
− Serialization• http://www.w3.org/2001/06/soap-encoding
− mustUnderstand fault• http://www.w3.org/2001/06/soap-faults
− Upgrade• http://www.w3.org/2001/06/soap-upgrade
Terminología utilizada en SOA
Terminología• Conceptos del protocolo
− Nodo SOAP− Rol (role) SOAP− Enlazado (binding) SOAP− Característica (feature) SOAP
• Es una extensión del framework de mensajería SOAP:− Confiabilidad− Seguridad− Correlación
− Módulo SOAP• Realización de las características (features) SOAP
− Patrón de intercambio de mensajes SOAP− Aplicación SOAP
Terminología• Nodo SOAP : Es el elemento que procesa la lógica necesaria para transmitir, recibir, procesar y/o
reenviar un mensaje SOAP, cumpliendo el conjunto de convenciones definidas por la recomendación SOAP
• Rol SOAP : Es la función esperada por un receptor SOAP en un mensaje SOAP.
• Binding SOAP : El conjunto formal de reglas para transportar un mensaje SOAP dentro o encima de otro protocolo. Ejemplo de binding SOAP puede incluir transportar un mensaje SOAP dentro de HTTP.
• Característica SOAP (SOAP feature): Es una extensión del framework de mensajería SOAP. Ejemplos de features pueden ser: "reliability" (confiabilidad), "security" (seguridad), "correlation" (correlación), "routing" (enrutado), y "Message Exchange Patterns" -patrones de intercambio de mensajes- (MEPs).
• Módulo SOAP : Un módulo SOAP es una especificación que contiene la sintaxis y semántica combinada de los bloques de cabecera SOAP especificadas cumpliendo las reglas SOAP Module 3.3
• Patrón de intercambio de mensajes SOAP (MEP): Una plantilla para el intercambio de mensajes entre nodos SOAP habilitados mediante uno o más SOAP bindings.
• Aplicación SOAP : Una entidad software que produce, consume o actúa de cualquier modo sobre mensajes SOAP conforme al modelo de proceso SOAP.
Terminología
• Conceptos de encapsulación de datos− Mensaje SOAP (SOAP message)
− Sobre SOAP (SOAP Envelope)
− Cabecera SOAP (SOAP Header)
− Bloque de cabecera SOAP (SOAP Header block)
− Cuerpo SOAP (SOAP Body)
− Fallo SOAP (SOAP Fault)
Terminología• Mensaje SOAP : Es la unidad básica de comunicación entre nodos SOAP
• Sobre SOAP : Es elemento de información más alto de un mensaje SOAP.
• Cabecera SOAP : Un conjunto de cero o más bloques de cabecera SOAP, cada uno de los cuales puede ser dirigido a cualquier destinatario SOAP dentro del camino SOAP.
• Bloque de cabecera SOAP : Un elemento de información que se usa para delimitar datos que constituyen una única unidad computacional lógica dentro de la cabecera SOAP. − El tipo de bloque de cabecera SOAP se identifica por el nombre XML expandido del
elemento de información de bloque de cabecera.
• Cuerpo SOAP : Un conjunto de cero o más elementos de información dirigidos a un destinatario SOAP final en el camino del mensaje SOAP
• Fallo SOAP (SOAP Fault): Un elemento de información SOAP que contiene información de fallo generado por un nodo SOAP
Terminología
• Remitentes y destinatarios de mensajes. Conceptos− SOAP sender (remitente)
− SOAP receiver (destinatario)
− SOAP message path (camino o trayectoria del mensaje)
− initial SOAP sender (remitente SOAP inicial)
− SOAP intermediary
− ultimate SOAP receiver (destinatario final)
Terminología• SOAP sender: Un nodo SOAP que transmite un mensaje SOAP
• SOAP receiver: uno nodo SOAP que acepta un mensaje
• SOAP message path: un conjunto de nodos SOAP a través de los cuales pasa un mensaje SOAP. Incluye el initial SOAP sender, cero o más intermediarios SOAP y el ultimate SOAP receiver.
• Initial SOAP sender: el remitente SOAP que origina el mensaje SOAP en el punto inicial de un SOAP message path.
• SOAP intermediary: Funciona tanto como remitente SOAP y como destinatario SOAP. Procesa los bloques de cabecera SOAP que van dirigidos a él y los reenvía en la dirección del destinatario SOAP final.
• Ultimate SOAP receiver: El SOAP receiver que es el destino final del mensaje SOAP. Es responsable de procesar los contenidos del cuerpo SOAP y cualesquiera de los bloques de cabecera SOAP que ha recibido dirigidos a él.
Práctica
• Ejercicio:− Crear un web service llamado HolaWS, con un método
“decirHola” que devuelva “Hola desde el curso SOA”.
− Hacer un test web service para comprobar el intercambio de mensajes SOAP entre el proveedor del servicio y el consumidor.
Anexo
• Axis incluye un monitor SOAP:− Para ejecutarlo, basta hacer lo siguiente
• Setenv
• java org.apache.axis.utils.tcpmon 9090 localhost 8080
• Esto arrancará una aplicación Java que permanecerás escuchando en el puerto 9090, y que reenviará todas las peticiones al puerto 8080
• Para probar esta aplicación, es necesario que las aplicaciones que sean clientes de nuestros web services, a la hora de ser depuradas u observadas con esta herramienta, deben atacar al servidor al puerto 9090.
Anexo
FINAL