Click here to load reader

Web Services JAX-RS RESTful y SOAP

  • View
    116

  • Download
    13

Embed Size (px)

Text of Web Services JAX-RS RESTful y SOAP

Prctica V: Web Services JAX-RS RESTful y SOAP

EQUIPO DE TRABAJO:

0-Cdigo de la Prctica Web Services 2016

La aplicacin esta compuesta por dos proyectos:

APITwitterTagV2 (Servidor Web)

JAXClient (Cliente)

Pueden ser descargados del repositorio SVN de la UNED accediendo a:http://62.204.199.127/JAVA_UNED/alef/browser/UNED_2016/J2EE/APITwitterWS/trunk

Descarga del cdigo del repositorio mediante TortoiseSVN (https://tortoisesvn.net/downloads.html)Nuestro compaero Jose, realiz un vdeo explicativo para poner en marcha ambas aplicaciones partiendo del repositorio. Es importante recalcar, que las librerias necesarias son descargadas con el proyecto y debemos configurar nuestro "Build Path" de acuerdo a lo indicado en el video: http://62.204.199.127/alef/UNED_2016/J2EE/APITwitterWS/19563377-sesionPruebas.ogv.bin

Descarga de la BBDD del repositorio en:

https://62.204.199.127/alef/UNED_2016/J2EE/APITwitterWS/apitwitter.sql

1-Punto de partidaLa aplicacin en su conjunto esta formada por dos proyectos y una BBDD:

ApiTwitterTagV2 Servidor de servicios.

JAXClient Consumidor de servicios.

Apitwitter.sql BBDD en la que se almacena informacin sobre Tweets (extrados con anterioridad de la API de Twitter) y Estudios Clnicos (extrados con anterioridad de la API de ClinicalTrials) mediante el Crawler ApiTwitter.

NOTA: Para ms informacin sobre el funcionamiento del Crawler o Robot consultar: http://62.204.199.127/JAVA_UNED/alef/wiki/2016_practica_APITwitter

2-Servicios Web

Se han desarrollado cinco servicios Web: Recuperar Tweets partiendo de un Hashtag elegido por el Cliente.

Recuperar un Tweet partiendo de su Id. Cada Tweet dispone de un identificador nico. Este es seleccionado por el Cliente (consumidor del servicio) y el Servicio Web recupera el Tweet correspondiente.

Recuperar Estudios Clnicos partiendo de un Hashtag elegido por el Cliente. Para no extender este documento, nos centraremos en la explicacin de este servicio en su dos metodologas: Restful y Soap.

Recuperar un Estudio Clnico partiendo de su NCT. Cada Estudio Clnico dispone de un identificador nico (nct). Este es seleccionado por el Cliente (consumidor del servicio) y el Servicio Web recupera el Estudio Clnico correspondiente.

Recuperar Hashtag vecinos partiendo de un Hashtag seleccionado por el Cliente (consumidor del servicio). El Servicio Web recupera un listado de Hashtags vecinos.Nota: Dado un Hashtag concreto podemos localizar Tweets relacionados. Dentro de estos Tweets tambin existen nuevos Hashtags que nos llevarn a su vez a nuevos Tweets relacionados con un tema concreto. A estos Hashtags los denominamos Neighbour (vecinos)

3-Estudios Clnicos partiendo de un Hashtagweb.xml RESTfulEl archivo web.xml se encuentra en la ruta WebContent/Web-INF

Para aadir los servicios RESTful es necesario indicar:

El provider JAX-RS de referencia, jersey

Las aplicaciones jersey

Los mappings para ejecutar los servicios JAX-RS

4-Recuperar Estudios Clnicos partiendo de un HashtagRESTful

Esquema de paquetes empleados en Servidor (APITwitterTagV2):

4.1 uned.java2016.apitwitter.dao4.2 uned.java2016.apitwitter.services.rs (RESTful)

4.2.1 uned.java2016.apitwitter.services.rs.EstudioService.java4.2.2 uned.java2016.apitwitter.services.rs.RSApplication.java

4.3 uned.java2016.apitwitter.services.rs.filters (RESTful)4.4 uned.java2016.apitwitter.services.rs.jaxb (RESTful)

4.1 uned.java2016.apitwitter.dao

En este paquete se estable el [Objeto de Acceso a Datos] denominado: Estudio Clnico

Dicho objeto tiene tanto los atributos como los mtodos necesarios para la gestin de la informacin extrada de un Estudio Clnico.

Destaca nctId en su papel de identificador unvoco.

Las clases de este paquete sern requeridas por el servicio WEB para lograr la funcionalidad.

4.2 uned.java2016.apitwitter.services.rs RESTful

Se crea la clase EstudiosService.java.

Dicha clase implementa el Servicio Web 'estudios'

Se publica en el path 'estudios' bajo el que opera Jersey

4.2.1 uned.java2016.apitwitter.services.rs.EstudiosService.java

Nos centramos en la clase EstudiosService.java:

Programacin (RESTful) mediante anotaciones en Java:

@GET

@Path("/getByHashtag/{ht: [a-zA-Z]+}/{count: [0-9]{1,2}}")

@Produces({MediaType.APPLICATION_XML})

Mtodo getEstudioRecupera los estudios que contienen el hashtag elegido por el usuario Parmetros:

@param ht Hashtag

@param count Numero de estudios a recuperar

@return Estudios que contienen el hashtag 'ht'

4.2.1uned.java2016.apitwitter.services.rs.EstudiosService.java

Detalle del mtodo getEstudio:

4.2.2 uned.java2016.apitwitter.services.rs.RSAplicattion.java

Se aade nuestro servicio a los ya existentes en la clase RSAplicattion.java:

4.3 uned.java2016.apitwitter.services.rs.filters (RESTful)

Filtro de autenticacin para todos los servicios RESTful.

Espera una cabecera 'Authorization' con las credenciales segn el esquema :

Accede a la BBDD y comprueba si el usuario tiene perfil 'adm'.

Si no, aborta la ejecucin de la llamada al WS y devuelve el error 401 UNAUTHORIZED

4.4 uned.java2016.apitwitter.services.rs.jaxb (RESTful)

Se aade la clase llamada Estudios.java

Guarda un grupo de estudios para su uso con jaxb.

5-Recuperar Estudios Clnicos partiendo de un HashtagSOAP5.1 Implementar el servicio JAX-WS con el modelo de Servlet.

Existen dos mtodos para implementar el desarrollo en Soap:

Partir de una clase Java que implemente el servicio Web.

Un fichero WSDL (formato XML que describe un servicio Web).

En nuestro caso hemos elegido la primera opcin.

5.2 Esquema de paquetes y clases

Se han introducido dos nuevos paquetes para desarrollar los Servicios Web SOAP:

5.2.1 uned.java2016.apitwitter.services.soap

5.2.1.1 uned.java2016.apitwitter.services.soap.EstudioServiceImpl.javaClase EstudioServiceImpl.java (Detalle Mtodo getByHashtag)

5.2.1.2 uned.java2016.apitwitter.services.soap.EstudioService.java (Interface)

5.2.2 uned.java2016.apitwitter.services.jaxws

5.2.1.1 uned.java2016.apitwitter.services.soap.EstudioServiceImpl.java

Se ha creado la siguiente clase para implementar el servicio Web:

Clase EstudioServiceImpl.java

La clase EstudioServiceImpl.java con la anotacin @WebService tiene dos mtodos de implementacin:

1- Define un SEI (Service Endpoint Interface) de forma implcita por lo que no ser necesario proporcionar dicha interfaz.

2- Especificando de forma explcita una interfaz aadiendo el atributo endpointInterface a la anotacin @WebService. En ese caso, s es necesario proporcionar la interfaz que defina los mtodos pblicos disponibles en la clase que implementa el servicio.

La anotacin @WebService no precisa que se especifique la ubicacin del WSDL. Si se utiliza el atributo wsdlLocation en la anotacin @WebService, el fichero WSDL debe ser empaquetado junto con las clases java del servicio web.

En la variable context, se inyectar un objeto WebServiceContext. De esta forma tendremos acceso al contexto del servicio. Como el servicio es un componente web, a travs de este objeto podremos tener acceso a componentes de la API de servlets como a la peticin HTTP (HttpServletRequest), la sesin (HttpSession), etc.

Clase EstudioServiceImpl.java (Detalle Mtodo getByHashtag)

Detalle del mtodo getByHashtag:Mediante el mtodo getByHashtag se accede a la BBDD mediante los mtodos del DAO y se retorna una lista de los Estudios Clnicos partiendo de un Hashtag elegido por el usuario.El mtodo getByHashtag dispone de los parmetros de entrada:

ht Hashtag (String de bsqueda en la BBDD)

count Nmero de Objetos Estudios a recuperar

El mtodo devuelve Estudios que contienen el Hashtag 'ht'.5.2.2.2 uned.java2016.apitwitter.services.soap.EstudioService.java

Interfaz EstudioService.java

La clase EstudioServiceImpl.java implementa el interface EstudioService.java creado previamente:

5.3 Despliegue del servicio web en el Servidor

Define la configuracin del despliegue en los ficheros:

4.3.1 web.xml 4.3.2 sun-jaxws.xml

Se utiliza el modelo de despliegue especfico de JAX-WS RI, que define la configuracin del despliegue en los ficheros web.xml y sun-jaxws.xml.

Se trata de un despliegue sin descriptores, por tanto la implementacin de nuestro servicio web no sera "descubierta" automticamente por el contenedor (por ejemplo Tomcat).

Debemos incluir descriptores de despliegue para "decirle" a la librera JAX-WS cmo queremos que se desplieguen nuestros servicios web.

En nuestro caso, que utilizamos Tomcat, tendramos que aadir en el directorio WEB-INF los ficheros sun-jaxws.xml y web.xml. Ambos ficheros contendrn informacin para realizar el "despliegue" de los servicios web.

5.3.1 web.xml

En el fichero web.xml declaramos el listener JAX-WS WSServletContextListener, que inicializa y configura el endpoint (componente port) del servicio web, y el servlet JAXWS WSServlet, que es el que sirve las peticiones al servicio, utilizando la clase que implementa dicho servicio. El contenido de nuestro fichero web.xml quedara as:

5.3.2 sun-jaxws.xml

El fichero sun-jaxws.xml contiene la definicin de la implementacin del endpoint del servicio. Cada endpoint representa un port WSDL, y contiene toda la informacin sobre la clase que implementa el servicio, url-pattern del servlet, informacin de binding, ubicacin del fichero WSDL, y nombres "cualificados" (quali

Search related