tsi2 07-web-services
DESCRIPTION
Web ServicesTRANSCRIPT
![Page 1: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/1.jpg)
Instituto de
Computación
Facultad de
Ingeniería
Universidad de la
República de Uruguay
Taller de Sistemas de
Información 2
Web Services
11 de Setiembre de 2012
![Page 2: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/2.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 2
![Page 3: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/3.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 3
Que es un web service?
● Es un servicio o funcionalidad
● Se encuentra disponible a través de Internet o una
Intranet
● Usando una forma estandarizada de mensajería
(generalmente XML)
● No se encuentra atado a ningún sistema operativo ni
ningún lenguaje de programación
● Se puede auto describir (generalmente vía XML)
● Puede ser descubierto a través de un mecanismo de
búsqueda
![Page 4: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/4.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 4
Tendencias
● Hoy día tenemos dos grandes tendencias en el
desarrollo de web services
● Web services que estandarizan su información
a través de mensajes XML, en formato SOAP.
Estos se denominan servicios SOAP
● Web services que no estandarizan su
información, denominados servicios REST
![Page 5: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/5.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 5
Web Services SOAP
● Este tipo de servicios, implica el intercambio de
mensajes XML, codificados según el protocolo
SOAP
● Estos mensajes tienen la forma:
![Page 6: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/6.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 6
Web Services SOAP
● Estos mensajes en formato SOAP son movidos de un
sistema a otro, utilizando HTTP
● El sistema recibe el mensaje, hace lo que tiene que
hacer, y devuelve una respuesta también en formato
SOAP
● Es un sistema simple, que no tiene en cuenta aspectos
importantes del desarrollo de soluciones empresariales,
pero que son tenidas en cuenta a través de extensiones
a los estándares
![Page 7: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/7.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 7
Especificaciones
● Los servicios web utilizan diferentes
especificaciones para estandarizar su
funcionamiento
● Estas se dividen en dos tipos
● Especificaciones básicas
● Especificaciones avanzadas, de las cuales algunas
se destacan por su utilidad para la construcción de
soluciones de integración
![Page 8: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/8.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 8
WSDL
Web Services Description Language
(WSDL)
HTTP
SOAP Simple Object
Access Protocol (SOAP)
Universal Description, Discovery and Integration
(UDDI)
Publish Find
FTP, SMTP, etc.
Especificaciones basicas
![Page 9: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/9.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 9
![Page 10: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/10.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 10
![Page 11: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/11.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 11
![Page 12: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/12.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 12
Mensajes SOAP
● La estructura básica de un mensaje SOAP
consiste de un elemento “Envelope” el cual
contiene
● un elemento opcional “Header”
● un elemento requerido “Body”
– que puede incluir un elemento “Fault”
● El “Envelope” es el elemento raíz de todo
mensaje SOAP e identifica un documento XML
como un mensaje SOAP
![Page 13: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/13.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 13
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:Header>
...
</soap:Header>
<soap:Body>
...
<soap:Fault> ... </soap:Fault>
</soap:Body>
</soap:Envelope>
![Page 14: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/14.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 14
Mensaje SOAP – Body
<soap:Body>
<t:Translate xmlns:t="http://....../translations">
<t:Word>red</t:Word>
</t:Translate>
</soap:Body>
<soap:Body>
<t:TranslateResponse
xmlns:t="http://....../translations">
<t:Translation>rojo</t:Translation>
</t:TranslateResponse>
</soap:Body>
resultado
solicitud
![Page 15: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/15.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 15
Transporte de mensajes
● SOAP no impone el uso de un determinado
protocolo para el intercambio de mensajes
● A través del concepto de “binding” SOAP
permite especificar:
● cómo los mensajes SOAP se encapsulan en un
protocolo de transporte
● cómo los mensajes SOAP deben ser tratados con
las primitivas del protocolo
![Page 16: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/16.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 16
![Page 17: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/17.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 17
WSDL
● Web Services Description Language
● Lenguaje basado en XML que permite describir
la interfaz y otras características de un Web
Service
● Un documento WSDL puede dividirse en dos
partes:
● descripción abstracta
● descripción concreta
![Page 18: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/18.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 18
![Page 19: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/19.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 19
Estandares avanzados
![Page 20: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/20.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 20
Profiles
● Basic Profile (BP)
● Guías para el desarrollo de WS interoperables utilizando las
especificaciones centrales
● Basic Security Profile (BSP)
● Extiende el BP definiendo guías para el desarrollo de WS
seguros
● Algunos ejemplos:
● Prohíbe el uso de SSL 2.0
● Restringe cantidad de timestamps en header a 1
● Prohíbe encriptar los elementos body, header y envelope
![Page 21: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/21.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 21
Plataformas para web services
● Las plataformas de Web Services son un
conjunto de herramientas para un lenguaje de
programación específico
● Permiten:
● invocar web services
● realizar el deploy de Web Services
● Las plataformas tienen en general
componentes en el servidor y en el cliente
![Page 22: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/22.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 22
Plataformas para web services
● Los componentes en el servidor se alojan
usualmente en algún tipo de contenedor
● servidor Java EE
● contenedor de servlets
● Los componentes en el cliente se empaquetan
en general como herramientas para acceder a
interfaces asociadas a WS
![Page 23: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/23.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 23
Plataformas para web services
● Las plataformas de Web Services
proveen en general tres subsistemas:
● Invocación
● Serialización
● Deployment
![Page 24: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/24.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 24
Subsistema de invocación (servidor)
● Recibir SOAPs desde el transporte (HTTP, etc)
● Invocar manejadores para QoS (seguridad, etc)
● Determinar la operación que se quiere invocar
● Determinar la clase/método que se quiere invocar
● Enviar el SOAP al sistema de serialización
● Invocar la clase-método
● Enviar el resultado al sistema de serialización
● Crear y enviar el mensaje SOAP al transporte para el
envío de la respuesta
![Page 25: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/25.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 25
Subsistema de invocación (cliente)
● Instanciar la clase que implementa la interfaz para
acceder a WS y manejar su invocación
● Enviar parámetros al sistema de serialización
● Adjuntar los mismos en un mensaje SOAP
● Invocar manejadores para QoS
● Enviar el SOAP a través del trasporte (ej. HTTP)
● Recibir los SOAPs respuesta desde el transporte
● Enviar los SOAP al sistema de serialización y completar
la invocación
![Page 26: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/26.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 26
Subsistema de invocación
Subsistema de Invocación (cliente)
Subsistema de Invocación (servidor)
Param
Param
Param
Request
SOAP
Request
SOAP
Respons
e SOAP
Respons
e SOAP
Param
Param
Param
Return
Objeto
Función
Invocación de Métodos
Invocación de Métodos
Intercambio de Mensajes SOAP
Return
![Page 27: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/27.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 27
Subsistema de serialización
![Page 28: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/28.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 28
Subsistema de deployment
● Provee herramientas para configurar un
componente de software para que pueda ser
invocado como un WS vía mensajes SOAP
● Desplegar el componente de SW
● Mapeo operaciones WSDL – componente SW
● Configuración serialización (esquema – params)
● Publicación del WSDL
● Configurar aspectos avanzados (seguridad, etc.)
● Configurar el listener en una dirección de red
![Page 29: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/29.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 29
Algunas plataformas de WS
● Windows Communication Foundation
● http://msdn.microsoft.com/en-us/library/ms730294.aspx
● Apache AXIS 2
● http://axis.apache.org/axis2/java/core/
● Apache CXF
● http://cxf.apache.org/
● Proyecto Metro
● http://metro.java.net/
● JBoss Web Services
● http://www.jboss.org/jbossws
![Page 30: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/30.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 30
Implementacion de WS
● Implementación Bottom-up
● Se comienza por el código (por ejemplo, una
clase Java)
● Code-First / Contract-Last
● Implementación Top-down
● Se comienza por el WSDL
● Code-Last / Contract-First
![Page 31: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/31.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 31
Bottom-Up
● Ventajas
● Forma rápida de exponer funcionalidades vía WS
● No requiere conocimiento de XMLSchema, WSDL
● Desventajas
● El esquema es embebido en el WSDL
● Los cambios en la interfaz son más difíciles de
manejar
● En el WSDL hay dependencias con la
implementación (paquetes y namespaces)
![Page 32: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/32.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 32
Top-Down
● Ventajas
● Permite el desarrollo independiente y paralelo entre
cliente y servicio
● Cuando se crean nuevos tipos, éstos pueden ser
reutilizados por otros servicios
● No se generan dependencias con la implementación
● Desventajas
● Requiere conocimiento de XMLSchema y WSDL
![Page 33: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/33.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 33
Web Services en JavaEE 6
● La plataforma JavaEE 6, incluye soporte para
web services, utilizando el protocolo SOAP, a
traves del API JAX-WS
● Java API for XML Web Services
● La implementacion de referencia se denomina
Metro, es desarrollada por Oracle y viene
incluida dentro del servidor de aplicaciones
GlassFish
![Page 34: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/34.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 34
Web Services en JavaEE6 y JDK6
● En el caso de Jboss, la implementacion de
referencia viene incluida en el componente
JBossWS, dentro del servidor de aplicaciones
JBoss 6
● A partir de la version 6 (update 4), la plataforma
Java estandar (JDK), incluye las APIs para
trabajar con JAX-WS y JAXB, fundamentales
para el consumo de web services
![Page 35: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/35.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 35
Definiendo un web service
![Page 36: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/36.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 36
Definiendo un web service
● En el ejemplo anterior se intercambia un objeto
CreditCard entre el consumidor y el proveedor
del servicio
● Los datos intercambiados, deben ser un
documento XML, por lo que se necesita un
método para transformar el objeto Java en un
documento XML y viceversa
● Para esto utilizamos JAXB, anotándolo con
@javax.xml.bind.annotation.XmlRootElement
![Page 37: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/37.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 37
Definiendo un web service
![Page 38: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/38.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 38
Invocando un web service
● Un ejemplo de posible cliente...
![Page 39: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/39.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 39
JAXB
● Si bien el intercambio de información
entre el consumidor y proveedor se hace
en base a XML, el codigo Java no tiene
porque interactuar con esto directamente
● JAXB provee un estándar para trabajar
con representaciones Java de
documentos XML y viceversa
![Page 40: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/40.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 40
La clase CreditCard
![Page 41: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/41.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 41
El documento XML
![Page 42: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/42.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 42
El schema XML
![Page 43: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/43.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 43
Binding
![Page 44: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/44.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 44
Marshalling/Unmarshalling
![Page 45: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/45.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 45
Anotaciones
● JAXB es similar a JPA, salvo que la
persistencia se realiza contra un documento
XML, en vez de una tabla de la base de datos
● El mapping al documento puede ser
customizado utilizando las anotaciones en el
paquete javax.xml.bind.annotation
● El equivalente de @Entity en JAXB, se
denomina @XmlRootElement
![Page 46: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/46.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 46
Anotaciones
![Page 47: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/47.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 47
El esquema asociado...
![Page 48: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/48.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 48
El documento obtenido
![Page 49: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/49.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 49
![Page 50: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/50.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 50
Web Services / Funcionamiento
● Si bien el programador Java no debe
preocuparse del manejo de los protocolos de
bajo nivel en web services, es conveniente
conocer que esta sucediendo por detras...
![Page 51: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/51.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 51
JAX-WS
● Como la mayoría de los componentes Java EE,
los web services utilizan el esquema de
configuración por excepción
● Solo necesitamos una anotación para
transformar un POJO en un web service,
@WebService
● Como en el caso de los EJBs, hay una serie de
requerimientos a la hora de escribir un
servicio...
![Page 52: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/52.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 52
JAX-WS
● La clase debe estar anotada con
@javax.jws.WebService
● Si el web service es implementado con un EJB,
entonces este solo puede ser stateless
● La clase debe ser publica, y no puede ser final ni
abstract
● La clase debe tener un constructor por defecto
● La clase no debe definir el método finalize
● El servicio debe ser stateless
![Page 53: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/53.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 53
JAX-WS
● Basta con que un POJO cumpla con los
requisitos anteriores, para que pueda ser
desplegado en un servlet container
● Esto se conoce como servlet endpoint
● Análogamente, un Stateless EJB puede ser
utilizado como clase de implementación del
servicio
● Esto se conoce como EJB endpoint
![Page 54: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/54.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 54
@WebService
● Esta anotación marca una clase o interfaz como un web
service
● Si se aplica directamente sobre la clase y no la interfaz,
entonces el container generara la interfaz a partir de los
métodos públicos
![Page 55: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/55.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 55
@WebMethod
● Por defecto, todos los métodos públicos del
web service (o de su interfaz) son incluidos
dentro de lo que se expone al exterior
● Para customizar la forma en como se hace esto
(por ejemplo para cambiar el nombre del
método), usamos la anotación @WebMethod,
aplicada sobre el método a modificar
● Por ejemplo...
![Page 56: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/56.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 56
@WebMethod
![Page 57: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/57.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 57
@WebResult
● Opera en conjunto con la anotación anterior
● Permite customizar el nombre del mensaje
devuelto como resultado de la operación
![Page 58: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/58.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 58
@WebParam
● Permite customizar los parámetros que son enviados al
servicio
● Podemos cambiar el nombre y el tipo de parámetro (IN,
OUT, INOUT)
![Page 59: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/59.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 59
@OneWay
● Es una anotación que permite indicar que un
método, no retorna valores
● Por ejemplo, los métodos que retornan void
● Esto permite que el container realice
optimizaciones con los métodos de este tipo,
por ejemplo, usando Asynchronous (solo en
EJB)
![Page 60: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/60.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 60
Ciclo de vida
● El ciclo de vida de los web services es similar al de los
stateless session beans
● No mantienen ningún estado, simplemente existen o no
existen
● Como en el caso de los stateless, podemos usar las
anotaciones @PreDestroy y @PostConstruct
● En el caso de un web service implementado como EJB,
se pueden utilizar interceptors
![Page 61: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/61.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 61
Ciclo de vida
![Page 62: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/62.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 62
Web Service Context
● Como en el caso de los EJBs, el web service
tiene un contexto que permite obtener
información útil del ambiente de ejecución del
servicio
● Se inyecta como en el caso de los EJB, usando
@Resource
![Page 63: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/63.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 63
Web Service Context
● GetMessageContext
● Permite acceder al mensaje SOAP, por ejemplo para
obtener los headers
● GetUserPrincipal
● Identifica a traves del Principal al emisor del
mensaje
● IsUserInRole
● Determina si un usuario autenticado esta presente
en un rol determinado
![Page 64: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/64.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 64
Invocando un web service
![Page 65: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/65.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 65
Invocando un web service
● Usando herramientas que generen stubs y clases Java
a partir del WSDL, podemos invocar un servicio web
● El JDK provee una herramienta, denominada wsimport
que genera las clases necesarias para poder realizar la
invocación a un determinado web service del que
conocemos su wsdl
● Las interfaces generadas se denominan SEI (Service
Endpoint Interfaces)
![Page 66: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/66.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 66
Invocando un web service
● Las interfaces y artefactos generados, deben
ser colocados en el proyecto que realizara el
consumo del servicio web
● Una vez colocados los artefactos (.java)
generados, podemos hacer la invocacion de
esta forma:
![Page 67: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/67.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 67
Generando los artefactos
● Usamos la herramienta wsimport
● Por ejemplo, en el practico tenemos este
ejemplo:
● wsimport -keep -d ../src
http://localhost:8080/WebService/CalculadoraSer
viceImpl/CalculadoraServiceImpl?wsdl
● keep permite mantener el codigo fuente generado
● -d ../src es la ruta donde se almacena dicho codigo
![Page 68: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/68.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 68
@WebServiceRef
● Permite inyectar una referencia a un servicio
web, indicando la localizacion del WSDL del
servicio
● Por ejemplo:
@WebServiceRef(wsdlLocation="http://localhost:8
080/app/CalculatorService?WSDL")
private CalculatorService service;
● Solo puede ser utilizado en componentes
managed (managed beans, ejbs, etc)
![Page 69: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/69.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 69
REST
● La motivación para desarrollar REST fue la de crear un
modelo arquitectónico de como tiene que funcionar la
web, de forma que sirva de guía para los protocolos de
la web
● REST ha sido usado para describir la arquitectura de la
web, identificar problemas existentes, comparar
soluciones alternativas, y asegurarse que las
extensiones a los protocolos no violan las restricciones
centrales que hace a la web exitosa
![Page 70: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/70.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 70
REST
● Representational State Transfer
● Es un estilo arquitectónico para la
construcción de software
● REST fue desarrollado junto con el
protocolo HTTP/1.1, el cual se adhiere a
REST
![Page 71: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/71.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 71
Conceptos
● La arquitectura esta compuesta por clientes y
servidores
● Requests y Responses
● Los Requests y Responses son construidos en
base a la idea de transferir representaciones de
recursos
● Los clientes contienen representaciones
● Los servidores contienen los recursos en si
![Page 72: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/72.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 72
Conceptos
![Page 73: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/73.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 73
Conceptos
![Page 74: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/74.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 74
ROA
● REST es un estilo arquitectónico
● Una arquitectura que se adhiere a este
estilo, es ROA: Resource Oriented
Architecture
● Existen otras que pueden (en parte)
también adherirse a este estilo de trabajo
![Page 75: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/75.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 75
Ejemplos de ROA
● Las URLs apuntan a recursos
(sustantivos)
● Métodos universales para manejar los
recursos
● GET, POST, PUT, DELETE
● No se maneja estado en el servidor
● Se hace uso de cache
![Page 76: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/76.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 76
Definimos REST en base a...
● Recursos y URIs
● Representaciones
● Interfaces uniformes
● HATEOAS
![Page 77: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/77.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 77
... pero NO en base a ...
● Schemas (XSD)
● Lenguajes de descripción
● Generación de código
● Registros
![Page 78: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/78.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 78
REST/HTTP: Recursos
● Algo, una cosa con identidad
● Una persona, un perfil de Facebook, un usuario en
Twitter, una direccion, una imagen, un video en
Youtube
● Los recursos se nombran con URIs
● Las URIs son estables (no cambian tan seguido)
![Page 79: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/79.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 79
REST/HTTP: Recursos
● Podemos pensar que la URI es la PK del
recurso
![Page 80: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/80.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 80
URI
● Generalmente son opacas
● http://www.test.com/24985725
● Lo importante es que los clientes no tengan que
parsearla y entenderla
● Sin embargo, son opacas para las aplicaciones
cliente, pero no para los desarrolladores de clientes
● Una buena forma de organizar los recursos, es
usar un enfoque jerárquico
● http://example.com/movie/TheAvengers/review
![Page 81: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/81.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 81
Representaciones
● Son los elementos que se envían dentro de un
request, y que se reciben en un response
● Por ejemplo:
![Page 82: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/82.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 82
Media Types (MIME Types)
● Son el equivalente a la clase de un objeto, o el
schema de un documento XML
![Page 83: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/83.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 83
Negociacion
● Las representaciones son negociables
![Page 84: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/84.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 84
Negociacion
● La idea es no sobrecargar las URIs
● Le decimos a los intermediarios y clientes como
vamos a aceptar una representación
![Page 85: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/85.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 85
Interfaz uniforme
![Page 86: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/86.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 86
![Page 87: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/87.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 87
Como se describen las APIs
![Page 88: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/88.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 88
Un ejemplo:
● Una aplicación quiere transferir U$S1000
de una cuenta bancaria a la otra
● Que Recursos y URIs tendriamos?
![Page 89: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/89.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 89
Un ejemplo
![Page 90: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/90.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 90
Una transferencia...
![Page 91: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/91.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 91
... respuesta
![Page 92: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/92.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 92
Status
![Page 93: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/93.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 93
Es esto RESTful?
En realidad, son nombres de recursos
![Page 94: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/94.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 94
Es esto RESTful?
A través de GET, queremos hacer una operación de modificación
Debemos usar PUT
![Page 95: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/95.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 95
Es esto RESTful?
Estamos usando GET y POST como sinónimos, cuando no lo son
![Page 96: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/96.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 96
Es esto RESTful?
Estamos usando IDs internos de aplicación, cuando deberían utilizarse LINKS
![Page 97: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/97.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 97
Es esto RESTful?
Estamos escondiendo errores del intermediario o del cliente
Debemos usar los códigos de error de HTTP 4xx o 5xx
![Page 98: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/98.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 98
Web Service + REST
● Son web services desarrollados según la
filosofía de REST
● El énfasis esta en el uso de una comunicación
simple usando HTTP entre cliente y servidor,
intercambiando POX (Plain Old Xml)
● También pueden intercambiarse otros formatos
equivalente sencillos (JSON)
● Un ejemplo sencillo…
![Page 99: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/99.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 99
Web Service + REST
● Tenemos un servicio REST para obtener el
valor de un stock en el mercado
● Este seria el REQUEST
![Page 100: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/100.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 100
Web Service + REST
● Y esta seria la respuesta
![Page 101: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/101.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 101
Comparación
Sitios web, por el año 1992
![Page 102: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/102.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 102
Comparación
Servicios web WS-*, desde el año 2000
![Page 103: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/103.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 103
Comparación
Servicios web REST, desde el año 2006
![Page 104: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/104.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 104
Estandares
![Page 105: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/105.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 105
Servicio Web SOAP
![Page 106: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/106.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 106
Servicio web RESTful
![Page 107: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/107.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 107
Protocolos en SOAP
![Page 108: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/108.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 108
Protocolos en REST
![Page 109: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/109.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 109
JAX-RS
● Para escribir un servicio web que utilice REST,
solo se necesita un cliente y un servidor que
soporte HTTP
● Como en el caso de SOAP, a fin de eliminar el
trabajo con protocolos de bajo nivel, aparece el
API JAX-RS
● La implementación de referencia de esta API,
se denomina Jersey (es un proyecto open
source)
![Page 110: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/110.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 110
JAX-RS
![Page 111: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/111.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 111
JAX-RS
● En el ejemplo anterior, el recurso
BookResource esta publicado en la URI /book
● El método getBookTitle() queda asociado al
método GET HTTP, produciendo un contenido
de tipo “text/plain”
● Para acceder al recurso, solo debemos usar un
browser con la dirección
http://www.myserver.com/book
![Page 112: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/112.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 112
JAX-RS
● El servicio REST no implementa ninguna
interfaz ni extiende ninguna clase
● Debemos usar la anotación @Path
● Si queremos usar un EJB, entonces solo
podemos usar @Stateless
● La clase debe ser public, y no abstract ni final
● Debe contener un constructor por defecto
● La clase no debe incluir el método finalize()
![Page 113: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/113.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 113
Default Providers
![Page 114: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/114.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 114
Interfaz de acceso al recurso
● JAX-RS define una serie de anotaciones, para
indicar que método HTTP se utilizara para
acceder a un recurso
● Estas anotaciones corresponden a los métodos
HTTP disponibles
● @GET, @POST, @PUT, @DELETE, @HEAD,
@OPTIONS
● Solo los métodos públicos de una clase pueden
exponerse como métodos de recurso
![Page 115: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/115.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 115
Interfaz CRUD
![Page 116: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/116.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 116
Interfaz de acceso al recurso
● Cuando un método de recurso es invocado
● Los parámetros para los cuales hay un extractor, son
cargados con dicho valor
● Los valores de parámetros no anotados, llamados
entity parameters, es mapeado del cuerpo del
request, a través de un entity provider
● Los métodos pueden devolver void, un tipo Java o
un Response
● Response es usado cuando es necesario devolver
mas información (metadatos) en la respuesta
![Page 117: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/117.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 117
Información contextual
![Page 118: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/118.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 118
Manejo de excepciones
![Page 119: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/119.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 119
Ciclo de vida
![Page 120: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/120.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 120
HelloWorld
● Creamos una web application
● Para exponer recursos REST, necesitamos una
implementacion de REST
● Puede ser JAX-RS
● En el caso de JBoss, podemos usar RESTEasy
● Esta es una implementacion que ya viene
incorporada en el servidor 6.0
● Necesitamos que el web.xml sea version 3.0
![Page 121: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/121.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 121
HelloWorld
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> ... ... ... </web-app>
![Page 122: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/122.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 122
HelloWorld
● Creamos una clase HelloWorldResource
package ejemplos;
import javax.ws.rs.*;
@Path("tutorial")
public class HelloWorldResource {
@GET
@Path("hello")
public String helloworld() {
return "Hello World!";
}
}
![Page 123: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/123.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 123
HelloWorld
● Luego de creado el recurso, deployeamos
y ejecutamos la aplicación web
● Accedemos al recurso, a través de la URL
● http://localhost:8080/HelloWorld/tutorial/h
ello
● Deberíamos obtener “Hello World!!”
![Page 124: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/124.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 124
PathParam
● Permite extraer “pedazos” de la URL
package ejemplos;
import javax.ws.rs.*;
@Path("tutorial")
public class HelloWorldPoliteResource {
@GET
@Path("sayhello/{name}")
public String helloworld(@PathParam("name")
final String name) {
return "Hi!, how are you " + name;
}
}
![Page 125: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/125.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 125
PathParam
● Como antes, se deployea y ejecuta la
aplicacion
● Debemos entrar a la URL:
● http://localhost:8080/HelloWorld/tutorial/sayhello/Pablo
● Deberíamos obtener: “Hi!, how are you Pablo”
![Page 126: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/126.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 126
Intercambio de XML
● Podemos intercambiar objetos XML, tanto
para el resultado como para los
parametros
● Para esto debemos usar providers JAXB
(idem SOAP), que se encarguen de
mapear instancias en documentos XML
● Por ejemplo, vamos a intercambiar
objetos Java, “Items”
![Page 127: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/127.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 127
package ejemplo;
@XmlRootElement
public class Item {
private String codigo;
private int precio;
public Item() {
}
public Item(String codigo, int precio) {
this.codigo = codigo;
this.precio = precio;
}
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public int getPrecio() {
return precio;
}
public void setPrecio(int precio) {
this.precio = precio;
}
}
![Page 128: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/128.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 128
ItemResource
package ejemplo;
import javax.ws.rs.*;
@Path("items")
public class ItemResource {
@GET
@Path("item")
@Produces({ "application/xml" })
public Item getItem() {
Item item = new Item("IPhone5", 1500);
return item;
}
}
![Page 129: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/129.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 129
ItemResource
● Si ejecutamos la aplicacion, al especificar
application/xml, se utilizara el provider
adecuado para obtener este XML
<item>
<description>IPhone5</description>
<price>1500</price>
</item>
![Page 130: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/130.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 130
@FormParam
● Esta anotacion sirve para extraer
informacion de un formulario
<html>
<body>
<form method="POST" action="login">
Email Address: <input type="text" name="email"><br>
Password: <input type="text" name="password"><br>
<br>
<input type="submit">
</form>
</body>
</html>
![Page 131: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/131.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 131
@FormParam
package ejemplos;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@Path("/")
public class LoginResource {
@Path("login")
@POST
public String login(
@FormParam("email") String email,
@FormParam("password") String password) {
return "Ingreso con el email: " + email +
" y el password " + password;
}
}
![Page 132: Tsi2 07-web-services](https://reader033.vdocuments.us/reader033/viewer/2022042816/5593f2311a28ab5a278b459b/html5/thumbnails/132.jpg)
Instituto de Computación – Facultad de Ingeniería – UdelaR – Montevideo, Uruguay 132
@QueryParam
● Es muy similar al anterior, solo que al
usarlo, se trata de extraer el valor el query
parameter con el nombre indicado
@Path("login/{id}")
public String loginQPM(@QueryParam("id") String idvalue) {
return "Id es " + idvalue;
}
http://localhost:8080/<Nombre de proyecto>/login?id=12345