Web Services. Objetivos Introducción a conceptos técnicos relacionados con web services....

Post on 31-Dec-2014

11 views 1 download

Transcript of Web Services. Objetivos Introducción a conceptos técnicos relacionados con web services....

Web Services

Objetivos

• Introducción a conceptos técnicos relacionados con web services.

• Presentación de un ejemplo sobre cómo publicar y consumir un web service.

Contenidos

• SOAP.• WSDL.• JAX-WS.• Ejemplo.

SOAP

SOAP

• Simple Object Access Protocol• Es una especificación, no un

producto.• Utiliza XML para describir un

mensaje.• Permite que esta descripción sea

interpretada por distintas plataformas.

Mensajes SOAP

Estructura de un mensaje SOAP

Header

• Es opcional.• Permite incluir información para el

procesamiento del mensaje.• Es un punto de extensibilidad del

modelo.• Los intermediarios pueden

modificarlo.

Body

• Es una estructura XML arbitraria.• Su semántica es relevante al

emisor y al receptor del mensaje.• Deben ponerse de acuerdo en

dicha semántica.• Los intermediarios no deben

modificarlo.

Ejemplo de un mensaje SOAP

<?xml version="1.0"?><soap:Envelope

xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Bodyxmlns:m="http://www.stock.org/stock">

<m:GetStockPrice><m:StockName>IBM</m:StockName>

</m:GetStockPrice></soap:Body>

</soap:Envelope>

WSDL

WSDL

• Web Services Description Language.

• Es un lenguaje implementado con XML.

• Independiente de plataformas y lenguajes.

• Dos tipos de descripciones:– Abstractas: tipos de datos, mensajes,

operaciones.– Concretas: bindings y servicios.

Estructura de un documento WSDL

types

• Definen tipos de datos utilizados en los mensajes.

• La definición es independiente de plataformas y lenguajes.

• Cada plataforma/lenguaje tiene formas de “mapear” estas definiciones en estructuras propias.

message

• Define un mensaje de entrada o salida involucrado en una operación.

• Utiliza tipos estándar o definidos con type.

• Puede ser utilizado en más de una operación.

portType

• Define una agrupación de operaciones.

• El equivalente en Java sería una interfaz.

• Son utilizados para después definir servicios.

operation

• Describe una operación determinada.

• Indica los mensajes de entrada y/o salida que la componen.

• Se agrupan en tipos de puertos.• El equivalente en Java sería un

método de una interfaz.

binding

• Especifica una implementación de una operación.

• Indica el estilo (document/rpc) de una operación y el transporte (HTTP/SMTP) utilizado.

service

• Define un servicio a través de:– Indicar qué operaciones soporta,

relacionándolo con un portType.– Especificar cómo está implementado,

relacionándolo con un binding.– Indicar dónde está publicado,

relacionándolo con una URL.

JAX-WS

JAX-WS

• Java API for XML Web Services• Especificación de JEE 5• Ofrece anotaciones y herramientas

para generar Web Services a partir de clases Java

• Soporte para client side y server side

Ventajas

• Implementado dentro de la especificación y el servidor de aplicaciones

• Abstrae la complejidad del manejo de XML mediante anotaciones en código Java

• Asegura la interoperabilidad entre clientes y servicios implementados en otras tecnologías

Desventajas

• Se puede perder control de la infraestructura generada para implementar el servicio:– Documentos WSDL– Bindings– Mapeos XML

Cómo usarlo

• Top-Down– Desarrollar el contrato primero (WSDL) y

partir de éste la implementación

– Mayor control del mensaje de intercambio y de la implementación generada

– Permite asegurar una correcta interoperabilidad con otras implementaciones

– Se recomienda para proyectos grandes y con mucha interoperabilidad

Cómo usarlo

• Bottom-Up– Desarrollar el contrato (WSDL) a partir

de la implementación

– Menor control del mensaje de intercambio y del contrato generado

– La interoperabilidad sólo se asegura con implementaciones similares

– Se recomienda para proyectos departamentales

Cómo funciona

• Web Service Endpoint– Clase o interface anotada con

@WebService– Declara los métodos que un cliente

puede invocar en el servicio mediante llamadas SOAP

– Los métodos publicados del servicio deben estar anotados con @WebMethod (no todos los métodos necesitan ser publicados)

Cómo funciona

• Deployment– El deployment es como cualquier

clase o componente JEE:• El contenedor procesa las anotaciones y

genera los artefactos necesarios

– Se pueden revisar los Web Services publicados en el contenedor:• http://localhost:8080/jbossws/services• Y acceder a cada WSDL en particular

Arquitectura

Herramientas

• wsconsume <WSDL URL>– Genera clases de cliente para invocar

un servicio a partir de un documento WSDL

• Este código se puede ejecutar desde clases de integración entre componentes

Pasos para la creación de Web Services con JAX-WS y JBoss

Ejemplo construcción WS

• Ejemplo a desarrollar: una guía telefónica con los siguientes servicios:

• getNombreGuia(Integer telefono);• setDatos(Integer telefono, Persona

persona);• cambiarTelefono(Integer telefono, Integer

nuevoTelefono);

Ejemplo construcción WS

• Configurar el Jboss (Instalación JAX-WS)– Copiar jars de carpeta endorsed a

JBOSS_HOME/lib/endorsed– Copiar carpeta http-invoker.sar a

JBOSS_HOME/server/default/deploy– Copiar carpeta jboss-bean.deployer a

JBOSS_HOME/server/default/deploy

Pasos construcción WS

Crear un proyecto EjemploWS-Servidor

Construir una interface Java con los servicios a proveer

• Interface GuiaTelefonica.java• Class Persona.java

Construir la implementación• En el ejemplo es un Stateless Session

Bean

Pasos construcción WS

Anotar la implementación para que publique un Web Service Endpoint

• Clase con @WebService– Representa el servicio a publicar

• Métodos con @WebMethod– Representa el/los métodos a proveer

• Desplegar el componente• El contenedor genera todos los artefactos:

– http://127.0.0.1:8080/GuiaTelefonica/GuiaTelefonicaServer?wsdl

Pasos construcción WS

Generar clases cliente con wsconsume

• En el directorio donde se encuentra el codigo cliente

• %jboss%/bin/wsconsume -k http://127.0.0.1:8080/GuiaTelefonica/GuiaTelefonicaServer?wsdl

• Genera varios archivos que se pueden utilizar para hacer una llamada al servicio desde Java

Pasos construcción WS

Llamar al servicio• Utilizando las clases proxy generadas:

– GuiaTelefonicaServerService– GuiaTelefonicaServer

Bibliografía

• SOAP:– http://msdn.microsoft.com/library/default.asp?url=/

library/en-us/dnsoap/html/understandsoap.asp– http://www.w3schools.com/soap/default.asp

• WSDL:– http://www.w3schools.com/wsdl/default.asp– http://msdn.microsoft.com/archive/default.asp?url=/

archive/en-us/dnarxml/html/wsdlexplained.asp• JAX-WS:

– http://java.sun.com/javaee/5/docs/tutorial/doc/bnayl.html• JBoss Web Services:

– http://www.redhat.com/docs/en-US/JBoss_Enterprise_Application_Platform/4.3.0.cp06/html/Server_Configuration_Guide/Server_Configuration_Guide-Web_Services-Web_Service_Endpoints_.html