2. .
• Í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.
3. 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.
4. 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)
5. 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.
6. 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
7. 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
10. 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.
11. 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 (Header
entities o entidades de cabecera)
− La mayoría de las actividades estándar de los web services
son básicamente definir entradas de cabecera estándar para
un dominio particular
12. 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
13. 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)
14. 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
15. 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
16. Estructura de mensaje FAULT
• Ejemplo de fallo SOAP : mustUnderstand no puede tratarse
<env:Envelope xmlns:env='http://www.w3.org/2001/06/soap-envelope'>
<env:Header>
<abc:Extension1 xmlns:abc='http://example.org/2001/06/ext‘ env:mustUnderstand='1' />
<def:Extension2 xmlns:def='http://example.com/stuff‘ env:mustUnderstand='1' />
</env:Header>
<env:Body>
...
</env:Body>
</env:Envelope>
17. 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>
18. 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.
19. Ejemplos
• Ejemplo de mensaje de solicitud (request) de un web
service 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> .
20. Ejemplos
• Ejemplo de mensaje de solicitud (request) de un web
service 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>
21. 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 + "!";
}
}
23. 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.
24. 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>
25. 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-encoding"
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.
28. 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
29. 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.
30. 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)
31. 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
33. 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.
34. 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.
35. 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.