SlideShare una empresa de Scribd logo
1 de 28
Práctica V: Web Services JAX-RS RESTful y SOAP
EQUIPO DE TRABAJO:
0-Código de la Práctica Web Services 2016
➢ La aplicación esta compuesta por dos proyectos:
1. APITwitterTagV2 (Servidor Web)
2. 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 código del repositorio mediante TortoiseSVN (https://tortoisesvn.net/downloads.html)
Nuestro compañero Jose, realizó un vídeo 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 partida
La aplicación 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 información sobre Tweets (extraídos con anterioridad de la API de
Twitter) y Estudios Clínicos (extraídos con anterioridad de la API de ClinicalTrials) mediante el Crawler “ApiTwitter”.
NOTA: Para más información 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:
1. Recuperar Tweets partiendo de un Hashtag elegido por el Cliente.
2. 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.
3. Recuperar Estudios Clínicos partiendo de un Hashtag elegido por el Cliente. Para no extender este
documento, nos centraremos en la explicación de este servicio en su dos metodologías: Restful y Soap.
4. Recuperar un Estudio Clínico partiendo de su NCT. Cada Estudio Clínico dispone de un identificador único (nct).
Este es seleccionado por el Cliente (consumidor del servicio) y el Servicio Web recupera el Estudio Clínico
correspondiente.
5. 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 también existen
nuevos Hashtags que nos llevarán a su vez a nuevos Tweets relacionados con un tema concreto. A estos Hashtags
los denominamos→ Neighbour (vecinos)
3-Estudios Clínicos partiendo de un Hashtag→web.xml →RESTful
➢ El archivo web.xml se encuentra en la ruta WebContent/Web-INF
➢ Para añadir 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 Clínicos partiendo de un Hashtag→RESTful
Esquema de paquetes empleados en Servidor (APITwitterTagV2):
4.1 uned.java2016.apitwitter.dao
4.2 uned.java2016.apitwitter.services.rs (RESTful)
4.2.1 uned.java2016.apitwitter.services.rs.EstudioService.java
4.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 Clínico
➢ Dicho objeto tiene tanto los atributos como los métodos necesarios para la gestión de la información
extraída de un Estudio Clínico.
➢ Destaca “nctId” en su papel de identificador unívoco.
➢ Las clases de este paquete serán 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:
➢ Programación (RESTful) mediante anotaciones en Java:
➢ @GET
➢ @Path("/getByHashtag/{ht: [a-zA-Z]+}/{count: [0-9]{1,2}}")
➢ @Produces({MediaType.APPLICATION_XML})
➢ Método getEstudio→Recupera los estudios que contienen el hashtag elegido por el usuario
Parámetros:
➢ @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 método getEstudio:
4.2.2 uned.java2016.apitwitter.services.rs.RSAplicattion.java
Se añade nuestro servicio a los ya existentes en la clase RSAplicattion.java:
4.3 uned.java2016.apitwitter.services.rs.filters (RESTful)
➢ Filtro de autenticación para todos los servicios RESTful.
➢ Espera una cabecera 'Authorization' con las credenciales según el esquema <user>:<password>
➢ Accede a la BBDD y comprueba si el usuario tiene perfil 'adm'.
➢ Si no, aborta la ejecución de la llamada al WS y devuelve el error 401 UNAUTHORIZED
4.4 uned.java2016.apitwitter.services.rs.jaxb (RESTful)
➢ Se añade la clase llamada Estudios.java
➢ Guarda un grupo de estudios para su uso con jaxb.
5-Recuperar Estudios Clínicos partiendo de un Hashtag→SOAP
5.1 Implementar el servicio JAX-WS con el modelo de Servlet.
Existen dos métodos 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 opción.
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.java
Clase EstudioServiceImpl.java (Detalle Método 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 anotación @WebService tiene dos métodos de implementación:
1- Define un SEI (Service Endpoint Interface) de forma implícita por lo que no será necesario
proporcionar dicha interfaz.
2- Especificando de forma explícita una interfaz añadiendo el atributo endpointInterface a la anotación
@WebService. En ese caso, sí es necesario proporcionar la interfaz que defina los métodos
públicos disponibles en la clase que implementa el servicio.
➢ La anotación @WebService no precisa que se especifique la ubicación del WSDL. Si se utiliza el atributo
wsdlLocation en la anotación @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 través de este objeto podremos tener
acceso a componentes de la API de servlets como a la petición HTTP (HttpServletRequest), la sesión
(HttpSession), etc.
Clase EstudioServiceImpl.java (Detalle Método getByHashtag)
Detalle del método getByHashtag:
Mediante el método getByHashtag se accede a la BBDD mediante los métodos del DAO y se retorna una lista
de los Estudios Clínicos partiendo de un Hashtag elegido por el usuario.
➢ El método getByHashtag dispone de los parámetros de entrada:
➢ ht → Hashtag (String de búsqueda en la BBDD)
➢ count → Número de Objetos Estudios a recuperar
➢ El método 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 configuración del despliegue en los ficheros:
4.3.1 web.xml
4.3.2 sun-jaxws.xml
➢ Se utiliza el modelo de despliegue específico de JAX-WS RI, que define la configuración del despliegue en los
ficheros web.xml y sun-jaxws.xml.
➢ Se trata de un despliegue sin descriptores, por tanto la implementación de nuestro servicio web no sería
"descubierta" automáticamente por el contenedor (por ejemplo Tomcat).
➢ Debemos incluir descriptores de despliegue para "decirle" a la librería JAX-WS cómo queremos que se
desplieguen nuestros servicios web.
➢ En nuestro caso, que utilizamos Tomcat, tendríamos que añadir en el directorio WEB-INF los ficheros sun-
jaxws.xml y web.xml. Ambos ficheros contendrán información 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 quedaría así:
5.3.2 sun-jaxws.xml
El fichero sun-jaxws.xml contiene la definición de la implementación del endpoint del servicio. Cada endpoint representa
un port WSDL, y contiene toda la información sobre la clase que implementa el servicio, url-pattern del servlet,
información de binding, ubicación del fichero WSDL, y nombres "cualificados" (qualified names) del port y service del
WSDL.
Si no especificamos la ubicación del fichero WSDL, éste será generado y publicado durante el despliegue. En el
siguiente fichero sun-jaxws.xml indicamos que la implementación de nuestro servicio viene dada por la clase
uned.java2016.apitwitter.services.EstudioServiceImpl.java (dicha clase debe estar anotada con @WebService).
5.3.3 Herramienta de despliegue wsgen y generación de clases
➢ La herramienta de despliegue comienza el proceso examinando el artefacto desplegado para determinar qué
módulos contienen servicios Web, para ello analiza las anotaciones de servicios web o los descriptores de
despliegue contenidos en el módulo. A continuación, obtiene la información de enlazado (binding), despliega los
componentes y servicios web definidos en el módulo. Seguidamente publica los documentos WSDL que
representan a los servicios web desplegados, configura al servidor e inicia la aplicación.
➢ wsgen→herramienta para generar servicios web a partir de una clase java.
➢ Proceso:
1. Lo primero que deberemos hacer es compilar la clase que implementa el servicio al igual que cualquier otra
clase Java, con la herramienta javac.
2. Generaremos el servicio con wsgen a partir de la clase compilada. Sobre la línea de comandos lanzamos la
herramienta wsgen del siguiente modo:
wsgen -cp <classpath> -s <src.dir> -d <dest.dir> <nombre.clase.servicio>
3. La clase que implementa el servicio (<nombre.clase.servicio>) se especificará mediante su nombre completo,
es decir, incluyendo el nombre del paquete al que pertenece.
4. En el caso concreto del servicio EstudioService definido anteriormente, podríamos generar las clases
necesarias de la siguiente forma:
wsgen -s src -d build/classes -cp build/classes uned.java2016.apitwitter.services.soap.EstudioServiceImpl
➢ Para comprobar que el nuestro servicio web esta desplegado, podemos acceder a su definición WSDL a
través de la dirección:
http://localhost:8080/APITwitterWeb/services/soap/ClinicalStudyWS?wsdl
➢ Con esto se generarán una serie de clases en el servidor que implementan el servicio web. Se crean en el
paquete:
4.2.2 uned.java2016.apitwitter.services.soap.estudios.jaxws
5.4 Despliegue del servicio web en el Cliente
➢ A partir de JDK 1.6 se incluye en Java SE la librería JAX-WS y las herramientas necesarias para crear e
invocar servicios. Podemos encontrar las clases de la API de JAX-WS dentro del paquete javax.xml.ws.
➢ Para crear un cliente en JDK 1.6 (o con JAX-WS en versiones anteriores de JDK) utilizaremos la
herramienta: wsimport.
➢ wsimport:
1. Toma como entrada el documento WSDL del servicio al que queremos acceder y producirá un conjunto
de clases Java que nos permitirán acceder al servicio.
2. Esta herramienta se puede invocar desde línea de comando del siguiente modo:
wsimport -s <src.dir> -d <dest.dir> -p <pkg> <wsdl.uri>
<src.dir>→ directorio donde queremos que guarde los fuentes de las clases generadas
<dest.dir>→ directorio donde guardará estas clases compiladas
<pkg>→paquete en el que se generará este conjunto de clases (<pkg>)
<wsdl.uri>→El WSDL se especificará mediante su ruta en el disco o mediante su URL.
3. Para generar los artefactos del lado del cliente a partir del servicio web previamente creado debemos
ejecutar en línea de comandos:
wsimport -keep -verbose http://localhost:8080/APITwitterWeb/services/soap/ClinicalStudyWS?wsdl
4. Se generarán una serie de clases que nos permitirán acceder al servicio web e invocar sus operaciones
desde nuestro cliente.
Una de estas clases recibirá el mismo nombre que el servicio y heredará de la clase Service.
5.5 Programando la “Vista” en Swing Cliente
1. Centrandonos en el controlador de Swing “SwingSOAPController.java”. En nuestro caso, dentro del
paquete:
package uned.java2016.apitwitter.services.rs.client;
2. Deberemos instanciar la clase generada anteriormente “EstudioServiceImplService” y a partir de ella
obtendremos el stub para acceder a un puerto del servicio. Este stub tendrá la misma interfaz que el
servicio web, y a partir de él podremos invocar sus operaciones.
3. En nuestro ejemplo de Servicio SOAP “Obtener Estudios Clínicos partiendo de un Hashtag elegido por
el usuario accederíamos de la siguiente forma:
Detalle de SwingSOAPController.java:

Más contenido relacionado

La actualidad más candente

Programación web con JSP
Programación web con JSPProgramación web con JSP
Programación web con JSPousli07
 
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVCSEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVCParadigma Digital
 
12.android servicios web
12.android   servicios web12.android   servicios web
12.android servicios webguidotic
 
Servicios web java php-perl-google
Servicios web java php-perl-googleServicios web java php-perl-google
Servicios web java php-perl-googleJosue Hernandez
 
Servlets y jsp
Servlets y jspServlets y jsp
Servlets y jspdtbadboy0
 
Programacion web java
Programacion web javaProgramacion web java
Programacion web javaCésar Ocampo
 
Arquitectura Rest
Arquitectura RestArquitectura Rest
Arquitectura RestIsrael Rey
 
7/9 Curso JEE5, Soa, Web Services, ESB y XML
7/9 Curso JEE5, Soa, Web Services, ESB y XML7/9 Curso JEE5, Soa, Web Services, ESB y XML
7/9 Curso JEE5, Soa, Web Services, ESB y XMLJuan Carlos Rubio Pineda
 
Desarrollando un API con REST
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con RESTAlex Puig
 
Java Primeros Pasos Revista- Edición 2
Java Primeros Pasos Revista- Edición 2Java Primeros Pasos Revista- Edición 2
Java Primeros Pasos Revista- Edición 2guest39ff1b
 
Taller Android Party: Automatic API REST + Notificaciones PUSH
Taller Android Party: Automatic API REST + Notificaciones PUSHTaller Android Party: Automatic API REST + Notificaciones PUSH
Taller Android Party: Automatic API REST + Notificaciones PUSHAlejandro Esquiva Rodriguez
 
WORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API RESTWORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API RESTBEEVA_es
 
Servicios REST - PucelaTechDay
Servicios REST - PucelaTechDayServicios REST - PucelaTechDay
Servicios REST - PucelaTechDayAsier Marqués
 
Guia programacionwebdesarrollositiosweb
Guia programacionwebdesarrollositioswebGuia programacionwebdesarrollositiosweb
Guia programacionwebdesarrollositiosweblissette_torrealba
 
STRUTS (MVC e Java)
STRUTS (MVC e Java)STRUTS (MVC e Java)
STRUTS (MVC e Java)ousli07
 

La actualidad más candente (20)

Programación web con JSP
Programación web con JSPProgramación web con JSP
Programación web con JSP
 
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVCSEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
 
12.android servicios web
12.android   servicios web12.android   servicios web
12.android servicios web
 
Servicios web java php-perl-google
Servicios web java php-perl-googleServicios web java php-perl-google
Servicios web java php-perl-google
 
Servlets y jsp
Servlets y jspServlets y jsp
Servlets y jsp
 
Programacion web java
Programacion web javaProgramacion web java
Programacion web java
 
Facelets
FaceletsFacelets
Facelets
 
Introducción a las API's Rest
Introducción a las API's RestIntroducción a las API's Rest
Introducción a las API's Rest
 
Arquitectura REST
Arquitectura RESTArquitectura REST
Arquitectura REST
 
Arquitectura Rest
Arquitectura RestArquitectura Rest
Arquitectura Rest
 
Servicios web Extendido_error perl
Servicios web Extendido_error perlServicios web Extendido_error perl
Servicios web Extendido_error perl
 
7/9 Curso JEE5, Soa, Web Services, ESB y XML
7/9 Curso JEE5, Soa, Web Services, ESB y XML7/9 Curso JEE5, Soa, Web Services, ESB y XML
7/9 Curso JEE5, Soa, Web Services, ESB y XML
 
Desarrollando un API con REST
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con REST
 
Java Primeros Pasos Revista- Edición 2
Java Primeros Pasos Revista- Edición 2Java Primeros Pasos Revista- Edición 2
Java Primeros Pasos Revista- Edición 2
 
Taller Android Party: Automatic API REST + Notificaciones PUSH
Taller Android Party: Automatic API REST + Notificaciones PUSHTaller Android Party: Automatic API REST + Notificaciones PUSH
Taller Android Party: Automatic API REST + Notificaciones PUSH
 
Curso Jsp
Curso JspCurso Jsp
Curso Jsp
 
WORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API RESTWORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API REST
 
Servicios REST - PucelaTechDay
Servicios REST - PucelaTechDayServicios REST - PucelaTechDay
Servicios REST - PucelaTechDay
 
Guia programacionwebdesarrollositiosweb
Guia programacionwebdesarrollositioswebGuia programacionwebdesarrollositiosweb
Guia programacionwebdesarrollositiosweb
 
STRUTS (MVC e Java)
STRUTS (MVC e Java)STRUTS (MVC e Java)
STRUTS (MVC e Java)
 

Similar a Web Services JAX-RS RESTful y SOAP

Similar a Web Services JAX-RS RESTful y SOAP (20)

Servlet
ServletServlet
Servlet
 
Introducción a Tomcat
Introducción a TomcatIntroducción a Tomcat
Introducción a Tomcat
 
[ES] Introducción a las Aplicaciones Web con Java
[ES] Introducción a las Aplicaciones Web con Java[ES] Introducción a las Aplicaciones Web con Java
[ES] Introducción a las Aplicaciones Web con Java
 
Servicios web
Servicios webServicios web
Servicios web
 
Presentacion de la práctica de Ajax 2016
Presentacion de la práctica de Ajax 2016Presentacion de la práctica de Ajax 2016
Presentacion de la práctica de Ajax 2016
 
Servicios web
Servicios webServicios web
Servicios web
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Introducción al desarrollo de aplicaciones web en Java
Introducción al desarrollo de aplicaciones web en JavaIntroducción al desarrollo de aplicaciones web en Java
Introducción al desarrollo de aplicaciones web en Java
 
Servicios web
Servicios webServicios web
Servicios web
 
UDA-Guia desarrollo web services
UDA-Guia desarrollo web servicesUDA-Guia desarrollo web services
UDA-Guia desarrollo web services
 
Java Web - Servlet
Java Web - ServletJava Web - Servlet
Java Web - Servlet
 
10.desarrollowebconjava
10.desarrollowebconjava10.desarrollowebconjava
10.desarrollowebconjava
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
Servicios web
Servicios webServicios web
Servicios web
 
Curso Java Avanzado 2 Servlets
Curso Java Avanzado   2 ServletsCurso Java Avanzado   2 Servlets
Curso Java Avanzado 2 Servlets
 
Desarrollo web con JAVA: Introduccion a los Servlets
Desarrollo web con JAVA: Introduccion a los ServletsDesarrollo web con JAVA: Introduccion a los Servlets
Desarrollo web con JAVA: Introduccion a los Servlets
 
Computación avanzada en java cert
Computación avanzada en java certComputación avanzada en java cert
Computación avanzada en java cert
 

Último

Edificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCEdificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCANDECE
 
Cadenas de Markov investigación de operaciones
Cadenas de Markov investigación de operacionesCadenas de Markov investigación de operaciones
Cadenas de Markov investigación de operacionesal21510263
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTFundación YOD YOD
 
Sesion 02 Patentes REGISTRO EN INDECOPI PERU
Sesion 02 Patentes REGISTRO EN INDECOPI PERUSesion 02 Patentes REGISTRO EN INDECOPI PERU
Sesion 02 Patentes REGISTRO EN INDECOPI PERUMarcosAlvarezSalinas
 
CICLO DE DEMING que se encarga en como mejorar una empresa
CICLO DE DEMING que se encarga en como mejorar una empresaCICLO DE DEMING que se encarga en como mejorar una empresa
CICLO DE DEMING que se encarga en como mejorar una empresaSHERELYNSAMANTHAPALO1
 
Fisiología del Potasio en Plantas p .pdf
Fisiología del Potasio en Plantas p .pdfFisiología del Potasio en Plantas p .pdf
Fisiología del Potasio en Plantas p .pdfJessLeonelVargasJimn
 
Propositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicacionesPropositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicaciones025ca20
 
CAP4-TEORIA EVALUACION DE CAUDALES - HIDROGRAMAS.pdf
CAP4-TEORIA EVALUACION DE CAUDALES - HIDROGRAMAS.pdfCAP4-TEORIA EVALUACION DE CAUDALES - HIDROGRAMAS.pdf
CAP4-TEORIA EVALUACION DE CAUDALES - HIDROGRAMAS.pdfReneBellido1
 
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptxAMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptxLuisvila35
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPJosLuisFrancoCaldern
 
produccion de cerdos. 2024 abril 20..pptx
produccion de cerdos. 2024 abril 20..pptxproduccion de cerdos. 2024 abril 20..pptx
produccion de cerdos. 2024 abril 20..pptxEtse9
 
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfPresentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfMirthaFernandez12
 
Fe_C_Tratamientos termicos_uap _3_.ppt
Fe_C_Tratamientos termicos_uap   _3_.pptFe_C_Tratamientos termicos_uap   _3_.ppt
Fe_C_Tratamientos termicos_uap _3_.pptVitobailon
 
Fisiología del azufre en plantas S.S.pdf
Fisiología del azufre en plantas S.S.pdfFisiología del azufre en plantas S.S.pdf
Fisiología del azufre en plantas S.S.pdfJessLeonelVargasJimn
 
PRESENTACION DE CLASE. Factor de potencia
PRESENTACION DE CLASE. Factor de potenciaPRESENTACION DE CLASE. Factor de potencia
PRESENTACION DE CLASE. Factor de potenciazacariasd49
 
CLASE - 01 de construcción 1 ingeniería civil
CLASE - 01 de construcción 1 ingeniería civilCLASE - 01 de construcción 1 ingeniería civil
CLASE - 01 de construcción 1 ingeniería civilDissneredwinPaivahua
 
Tiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo IITiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo IILauraFernandaValdovi
 
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptxGARCIARAMIREZCESAR
 
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdfAnthonyTiclia
 
Parámetros de Perforación y Voladura. para Plataformas
Parámetros de  Perforación y Voladura. para PlataformasParámetros de  Perforación y Voladura. para Plataformas
Parámetros de Perforación y Voladura. para PlataformasSegundo Silva Maguiña
 

Último (20)

Edificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCEdificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRC
 
Cadenas de Markov investigación de operaciones
Cadenas de Markov investigación de operacionesCadenas de Markov investigación de operaciones
Cadenas de Markov investigación de operaciones
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NIST
 
Sesion 02 Patentes REGISTRO EN INDECOPI PERU
Sesion 02 Patentes REGISTRO EN INDECOPI PERUSesion 02 Patentes REGISTRO EN INDECOPI PERU
Sesion 02 Patentes REGISTRO EN INDECOPI PERU
 
CICLO DE DEMING que se encarga en como mejorar una empresa
CICLO DE DEMING que se encarga en como mejorar una empresaCICLO DE DEMING que se encarga en como mejorar una empresa
CICLO DE DEMING que se encarga en como mejorar una empresa
 
Fisiología del Potasio en Plantas p .pdf
Fisiología del Potasio en Plantas p .pdfFisiología del Potasio en Plantas p .pdf
Fisiología del Potasio en Plantas p .pdf
 
Propositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicacionesPropositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicaciones
 
CAP4-TEORIA EVALUACION DE CAUDALES - HIDROGRAMAS.pdf
CAP4-TEORIA EVALUACION DE CAUDALES - HIDROGRAMAS.pdfCAP4-TEORIA EVALUACION DE CAUDALES - HIDROGRAMAS.pdf
CAP4-TEORIA EVALUACION DE CAUDALES - HIDROGRAMAS.pdf
 
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptxAMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
 
produccion de cerdos. 2024 abril 20..pptx
produccion de cerdos. 2024 abril 20..pptxproduccion de cerdos. 2024 abril 20..pptx
produccion de cerdos. 2024 abril 20..pptx
 
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfPresentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
 
Fe_C_Tratamientos termicos_uap _3_.ppt
Fe_C_Tratamientos termicos_uap   _3_.pptFe_C_Tratamientos termicos_uap   _3_.ppt
Fe_C_Tratamientos termicos_uap _3_.ppt
 
Fisiología del azufre en plantas S.S.pdf
Fisiología del azufre en plantas S.S.pdfFisiología del azufre en plantas S.S.pdf
Fisiología del azufre en plantas S.S.pdf
 
PRESENTACION DE CLASE. Factor de potencia
PRESENTACION DE CLASE. Factor de potenciaPRESENTACION DE CLASE. Factor de potencia
PRESENTACION DE CLASE. Factor de potencia
 
CLASE - 01 de construcción 1 ingeniería civil
CLASE - 01 de construcción 1 ingeniería civilCLASE - 01 de construcción 1 ingeniería civil
CLASE - 01 de construcción 1 ingeniería civil
 
Tiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo IITiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo II
 
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
 
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
 
Parámetros de Perforación y Voladura. para Plataformas
Parámetros de  Perforación y Voladura. para PlataformasParámetros de  Perforación y Voladura. para Plataformas
Parámetros de Perforación y Voladura. para Plataformas
 

Web Services JAX-RS RESTful y SOAP

  • 1. Práctica V: Web Services JAX-RS RESTful y SOAP EQUIPO DE TRABAJO:
  • 2. 0-Código de la Práctica Web Services 2016 ➢ La aplicación esta compuesta por dos proyectos: 1. APITwitterTagV2 (Servidor Web) 2. 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 código del repositorio mediante TortoiseSVN (https://tortoisesvn.net/downloads.html) Nuestro compañero Jose, realizó un vídeo 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
  • 3. 1-Punto de partida La aplicación 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 información sobre Tweets (extraídos con anterioridad de la API de Twitter) y Estudios Clínicos (extraídos con anterioridad de la API de ClinicalTrials) mediante el Crawler “ApiTwitter”. NOTA: Para más información sobre el funcionamiento del Crawler o Robot consultar: http://62.204.199.127/JAVA_UNED/alef/wiki/2016_practica_APITwitter
  • 4. 2-Servicios Web Se han desarrollado cinco servicios Web: 1. Recuperar Tweets partiendo de un Hashtag elegido por el Cliente. 2. 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. 3. Recuperar Estudios Clínicos partiendo de un Hashtag elegido por el Cliente. Para no extender este documento, nos centraremos en la explicación de este servicio en su dos metodologías: Restful y Soap. 4. Recuperar un Estudio Clínico partiendo de su NCT. Cada Estudio Clínico dispone de un identificador único (nct). Este es seleccionado por el Cliente (consumidor del servicio) y el Servicio Web recupera el Estudio Clínico correspondiente. 5. 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 también existen nuevos Hashtags que nos llevarán a su vez a nuevos Tweets relacionados con un tema concreto. A estos Hashtags los denominamos→ Neighbour (vecinos)
  • 5. 3-Estudios Clínicos partiendo de un Hashtag→web.xml →RESTful ➢ El archivo web.xml se encuentra en la ruta WebContent/Web-INF ➢ Para añadir los servicios RESTful es necesario indicar: ➢ El provider JAX-RS de referencia, jersey ➢ Las aplicaciones jersey ➢ Los mappings para ejecutar los servicios JAX-RS
  • 6. 4-Recuperar Estudios Clínicos partiendo de un Hashtag→RESTful Esquema de paquetes empleados en Servidor (APITwitterTagV2): 4.1 uned.java2016.apitwitter.dao 4.2 uned.java2016.apitwitter.services.rs (RESTful) 4.2.1 uned.java2016.apitwitter.services.rs.EstudioService.java 4.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)
  • 7. 4.1 uned.java2016.apitwitter.dao ➢ En este paquete se estable el [Objeto de Acceso a Datos] denominado: Estudio Clínico ➢ Dicho objeto tiene tanto los atributos como los métodos necesarios para la gestión de la información extraída de un Estudio Clínico. ➢ Destaca “nctId” en su papel de identificador unívoco. ➢ Las clases de este paquete serán requeridas por el servicio WEB para lograr la funcionalidad.
  • 8. 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
  • 9. 4.2.1 uned.java2016.apitwitter.services.rs.EstudiosService.java Nos centramos en la clase EstudiosService.java: ➢ Programación (RESTful) mediante anotaciones en Java: ➢ @GET ➢ @Path("/getByHashtag/{ht: [a-zA-Z]+}/{count: [0-9]{1,2}}") ➢ @Produces({MediaType.APPLICATION_XML}) ➢ Método getEstudio→Recupera los estudios que contienen el hashtag elegido por el usuario Parámetros: ➢ @param ht → Hashtag ➢ @param count → Numero de estudios a recuperar ➢ @return → Estudios que contienen el hashtag 'ht'
  • 11. 4.2.2 uned.java2016.apitwitter.services.rs.RSAplicattion.java Se añade nuestro servicio a los ya existentes en la clase RSAplicattion.java:
  • 12. 4.3 uned.java2016.apitwitter.services.rs.filters (RESTful) ➢ Filtro de autenticación para todos los servicios RESTful. ➢ Espera una cabecera 'Authorization' con las credenciales según el esquema <user>:<password> ➢ Accede a la BBDD y comprueba si el usuario tiene perfil 'adm'. ➢ Si no, aborta la ejecución de la llamada al WS y devuelve el error 401 UNAUTHORIZED
  • 13. 4.4 uned.java2016.apitwitter.services.rs.jaxb (RESTful) ➢ Se añade la clase llamada Estudios.java ➢ Guarda un grupo de estudios para su uso con jaxb.
  • 14. 5-Recuperar Estudios Clínicos partiendo de un Hashtag→SOAP 5.1 Implementar el servicio JAX-WS con el modelo de Servlet. Existen dos métodos 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 opción.
  • 15. 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.java Clase EstudioServiceImpl.java (Detalle Método getByHashtag) ▪ 5.2.1.2 uned.java2016.apitwitter.services.soap.EstudioService.java (Interface) ➢ 5.2.2 uned.java2016.apitwitter.services.jaxws
  • 16. 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
  • 17. ➢ La clase EstudioServiceImpl.java con la anotación @WebService tiene dos métodos de implementación: 1- Define un SEI (Service Endpoint Interface) de forma implícita por lo que no será necesario proporcionar dicha interfaz. 2- Especificando de forma explícita una interfaz añadiendo el atributo endpointInterface a la anotación @WebService. En ese caso, sí es necesario proporcionar la interfaz que defina los métodos públicos disponibles en la clase que implementa el servicio. ➢ La anotación @WebService no precisa que se especifique la ubicación del WSDL. Si se utiliza el atributo wsdlLocation en la anotación @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 través de este objeto podremos tener acceso a componentes de la API de servlets como a la petición HTTP (HttpServletRequest), la sesión (HttpSession), etc.
  • 18. Clase EstudioServiceImpl.java (Detalle Método getByHashtag) Detalle del método getByHashtag: Mediante el método getByHashtag se accede a la BBDD mediante los métodos del DAO y se retorna una lista de los Estudios Clínicos partiendo de un Hashtag elegido por el usuario. ➢ El método getByHashtag dispone de los parámetros de entrada: ➢ ht → Hashtag (String de búsqueda en la BBDD) ➢ count → Número de Objetos Estudios a recuperar ➢ El método devuelve Estudios que contienen el Hashtag 'ht'.
  • 19. 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:
  • 20. 5.3 Despliegue del servicio web en el Servidor ➢ Define la configuración del despliegue en los ficheros: 4.3.1 web.xml 4.3.2 sun-jaxws.xml ➢ Se utiliza el modelo de despliegue específico de JAX-WS RI, que define la configuración del despliegue en los ficheros web.xml y sun-jaxws.xml. ➢ Se trata de un despliegue sin descriptores, por tanto la implementación de nuestro servicio web no sería "descubierta" automáticamente por el contenedor (por ejemplo Tomcat). ➢ Debemos incluir descriptores de despliegue para "decirle" a la librería JAX-WS cómo queremos que se desplieguen nuestros servicios web. ➢ En nuestro caso, que utilizamos Tomcat, tendríamos que añadir en el directorio WEB-INF los ficheros sun- jaxws.xml y web.xml. Ambos ficheros contendrán información para realizar el "despliegue" de los servicios web.
  • 21. 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 quedaría así:
  • 22. 5.3.2 sun-jaxws.xml El fichero sun-jaxws.xml contiene la definición de la implementación del endpoint del servicio. Cada endpoint representa un port WSDL, y contiene toda la información sobre la clase que implementa el servicio, url-pattern del servlet, información de binding, ubicación del fichero WSDL, y nombres "cualificados" (qualified names) del port y service del WSDL. Si no especificamos la ubicación del fichero WSDL, éste será generado y publicado durante el despliegue. En el siguiente fichero sun-jaxws.xml indicamos que la implementación de nuestro servicio viene dada por la clase uned.java2016.apitwitter.services.EstudioServiceImpl.java (dicha clase debe estar anotada con @WebService).
  • 23. 5.3.3 Herramienta de despliegue wsgen y generación de clases ➢ La herramienta de despliegue comienza el proceso examinando el artefacto desplegado para determinar qué módulos contienen servicios Web, para ello analiza las anotaciones de servicios web o los descriptores de despliegue contenidos en el módulo. A continuación, obtiene la información de enlazado (binding), despliega los componentes y servicios web definidos en el módulo. Seguidamente publica los documentos WSDL que representan a los servicios web desplegados, configura al servidor e inicia la aplicación. ➢ wsgen→herramienta para generar servicios web a partir de una clase java. ➢ Proceso: 1. Lo primero que deberemos hacer es compilar la clase que implementa el servicio al igual que cualquier otra clase Java, con la herramienta javac. 2. Generaremos el servicio con wsgen a partir de la clase compilada. Sobre la línea de comandos lanzamos la herramienta wsgen del siguiente modo: wsgen -cp <classpath> -s <src.dir> -d <dest.dir> <nombre.clase.servicio> 3. La clase que implementa el servicio (<nombre.clase.servicio>) se especificará mediante su nombre completo, es decir, incluyendo el nombre del paquete al que pertenece. 4. En el caso concreto del servicio EstudioService definido anteriormente, podríamos generar las clases necesarias de la siguiente forma: wsgen -s src -d build/classes -cp build/classes uned.java2016.apitwitter.services.soap.EstudioServiceImpl
  • 24. ➢ Para comprobar que el nuestro servicio web esta desplegado, podemos acceder a su definición WSDL a través de la dirección: http://localhost:8080/APITwitterWeb/services/soap/ClinicalStudyWS?wsdl ➢ Con esto se generarán una serie de clases en el servidor que implementan el servicio web. Se crean en el paquete: 4.2.2 uned.java2016.apitwitter.services.soap.estudios.jaxws
  • 25. 5.4 Despliegue del servicio web en el Cliente ➢ A partir de JDK 1.6 se incluye en Java SE la librería JAX-WS y las herramientas necesarias para crear e invocar servicios. Podemos encontrar las clases de la API de JAX-WS dentro del paquete javax.xml.ws. ➢ Para crear un cliente en JDK 1.6 (o con JAX-WS en versiones anteriores de JDK) utilizaremos la herramienta: wsimport. ➢ wsimport: 1. Toma como entrada el documento WSDL del servicio al que queremos acceder y producirá un conjunto de clases Java que nos permitirán acceder al servicio. 2. Esta herramienta se puede invocar desde línea de comando del siguiente modo: wsimport -s <src.dir> -d <dest.dir> -p <pkg> <wsdl.uri> <src.dir>→ directorio donde queremos que guarde los fuentes de las clases generadas <dest.dir>→ directorio donde guardará estas clases compiladas <pkg>→paquete en el que se generará este conjunto de clases (<pkg>) <wsdl.uri>→El WSDL se especificará mediante su ruta en el disco o mediante su URL.
  • 26. 3. Para generar los artefactos del lado del cliente a partir del servicio web previamente creado debemos ejecutar en línea de comandos: wsimport -keep -verbose http://localhost:8080/APITwitterWeb/services/soap/ClinicalStudyWS?wsdl 4. Se generarán una serie de clases que nos permitirán acceder al servicio web e invocar sus operaciones desde nuestro cliente. Una de estas clases recibirá el mismo nombre que el servicio y heredará de la clase Service.
  • 27. 5.5 Programando la “Vista” en Swing Cliente 1. Centrandonos en el controlador de Swing “SwingSOAPController.java”. En nuestro caso, dentro del paquete: package uned.java2016.apitwitter.services.rs.client; 2. Deberemos instanciar la clase generada anteriormente “EstudioServiceImplService” y a partir de ella obtendremos el stub para acceder a un puerto del servicio. Este stub tendrá la misma interfaz que el servicio web, y a partir de él podremos invocar sus operaciones.
  • 28. 3. En nuestro ejemplo de Servicio SOAP “Obtener Estudios Clínicos partiendo de un Hashtag elegido por el usuario accederíamos de la siguiente forma: Detalle de SwingSOAPController.java: