Sei sulla pagina 1di 5

Objetos - Rep

Ejercicios Lab 1
Autor: Julin R. Oyola

Lab 1: HTTP, REST y CXF

Lab 1.1: Postman

1. En el Google Chrome Web Store, buscar la extensin Postman e instalarla


2. Instalar tambin el Postman Interceptor
3. Ejecutar el Postman
4. Ejecutar un request de tipo GET a los siguientes servicios (tip: utilizar las Developer Tools de
Chrome para inspeccionar los request).
Inspeccionar el Request, Response y sus headers.
a. <sitio institucional de su empresa>
b. www.bbc.co.uk
5. Ejecutar request de tipo GET a los endpoint de servicios web de los siguientes servicios (tip:
son los indicados como XHR en la solapa Network de las Developer Tools de Chrome)
Inspeccionar el Request, Response y sus headers.
a. Gmail
b. Facebook
c. Twitter
6. Ejecutar requests de tipo HEAD y PUT a:
a. <sitio institucional de su empresa>
b. www.bbc.co.uk

Lab 1.2: Configurar CXF en el Proyecto cursojee-rest

1. Agregar las siguientes libreras de CXF y JBoss en scope compile:


a. org.apache.cxf
i. cxf-rt-frontend-jaxrs
ii. cxf-rt-rs-extension-providers
iii. cxf-rt-transports-http
iv. cxf-integration-cdi
b. org.jboss.ws.cxf
i. jbossws-cxf-transports-undertow

<!-- CXF -->


<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<scope>compile</scope>
</dependency>
...

2. Agregar las libreras de Jackson en scope compile:


a. com.fasterxml.jackson.core
i. jackson-core
ii. jackson-databind
iii. jackson-jaxrs-base
iv. jackson-jaxrs-json-provider

<!-- Jackson -->


<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>...</artifactId>
<scope>compile</scope>
</dependency>
...

1-5 Document1
Ultima mod.: 11/08/2017
Objetos - Rep
Ejercicios Lab 1
Autor: Julin R. Oyola

3. Agregar el archivo src/main/webapp/META-INF/jboss-deployment-structure.xml para excluir


los subsistemas de resteasy y jaxrs del Wildfly, y excluir el mdulo de org.apache.cxf

<?xml version="1.0"?>
<jboss-deployment-structure
xmlns="urn:jboss:deployment-structure:1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<deployment>

<exclude-subsystems>
<subsystem name="..." />
</exclude-subsystems>

<exclusions>
<module name="..." />
</exclusions>

<dependencies>

<!--
<module name="org.codehaus.jettison" />
<module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-
json-provider" />
<module name="com.fasterxml.jackson.core.jackson-core" />
<module name="com.fasterxml.jackson.core.jackson-
databind" />
<module name="com.fasterxml.jackson.core.jackson-
annotations" />
-->

</dependencies>

</deployment>

</jboss-deployment-structure>

4. Agregar el archive src/main/webapp/WEB-INF/beans.xml

<?xml version="1.0" encoding="UTF-8"?>


<!-- Marker file indicating CDI should be enabled -->
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1" bean-discovery-mode="all">
</beans>

5. Agregar el Servlet de CXF integrado con CDI al web.xml


Configurar el path del servlet para que escuche en http://..../service

<servlet>
<display-name>CXF Servlet</display-name>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.cdi.CXFCdiServlet</servlet-class>
<!--
<servlet-
class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
<init-param>

2-5 Document1
Ultima mod.: 11/08/2017
Objetos - Rep
Ejercicios Lab 1
Autor: Julin R. Oyola

<param-name>javax.ws.rs.Application</param-name>
<param-
value>com.cursojee.rest.impl.RestApplication</param-value>
</init-param>
<init-param>
<param-name>jaxrs.serviceClasses</param-name>
<param-value>
com.cursojee.rest.PingRest,
com.cursojee.rest.IndexRest
</param-value>
</init-param>
-->
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>...</url-pattern>
</servlet-mapping>

6. Agregar la clase RestApplication en el package com.cursojee.rest


Configurar el ApplicationPath para que el server publique en http://.../service

package com.cursojee.rest;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath(...)
public class RestApplication extends Application {

7. En el Wildfly, poner el log en nivel DEBUG para org.apache.cxf.jaxrs


a. Verificar el LEVEL del CONSOLE HANDLER
b. Recordar activar use-parent-handlers
8. Hacer un deploy de la aplicacin en el Wildfly
a. Verificar la activacin del CXF Rest Server
9. Analizar los mdulos de CXF, RESTEasy, Jackson y Jettison en el Wildfly
a. Analizar la exclusin de los subsystems jaxrs y resteasy
b. Analizar la inclusin de las libreras en modo compilacin
10. Ejecutar un mvn dependency:tree e inspeccionar las libreras incluidas

Lab 1.3: Servicios bsicos

1. Implementar un servicio REST: Ping


a. /ping
b. Mtodo: GET
2. Implementar un servicio REST: Echo
a. /echo
b. Mtodo: GET
c. Parmetro por Path
3. Implementar un servicio REST: DTO
a. /echo
b. Mtodo POST
c. Parmetro por Query String
d. Devolver un objeto DTO con el valor recibido
4. Implementar un servicio REST: Index

3-5 Document1
Ultima mod.: 11/08/2017
Objetos - Rep
Ejercicios Lab 1
Autor: Julin R. Oyola

a. /
b. Mtodo: GET
c. Devolver un Map con la ruta de los otros servicios

Lab 1.4: Servicios ABM

1. Para cada servicio, crear un test en Postman


2. Definir el DTO RegistroHoras con los siguientes campos:
a. id
b. usuario
c. fecha
d. horas trabajadas
e. proyecto
3. Implementar un servicio REST: Obtener un RegistroHoras
a. /registro/{id}
b. Mtodo: GET
c. Devolver el DTO
d. Implementacin dummy
4. Implementar un servicio REST: Guardar un nuevo RegistroHoras
a. /registro
b. Mtodo: POST
c. Parmetro DTO por body
i. Consumes: application/json
d. Devolver el DTO
e. Implementacin dummy
5. Implementar un servicio REST: Modificar un RegistroHoras
a. /registro/{id}
b. Mtodo: PUT
c. Parmetro DTO por body
i. Consumes: application/json
d. Devolver el DTO
e. Implementacin dummy
6. Implementar un servicio REST: Borrar un RegistroHoras
a. /registro/{id}
b. Mtodo: DELETE
c. Parmetro ID por path
d. Devolver status code 200
e. Implementacin dummy

Lab 1.5: Paginacin

1. Para cada servicio, crear un test en Postman


2. Implementar un servicio REST: Obtener la lista de RegistroHoras
a. /registro
b. Mtodo: GET
c. Devolver una lista de DTO
d. Filtros por Query String:
i. Rango de fechas
ii. Proyecto
iii. Usuario
e. Implementacin dummy
3. Implementar un servicio REST: Obtener la lista paginada de RegistroHoras
a. Idem al punto anterior
b. Agregar por Path los parmetros del tamao de pgina y nmero de pgina.

Lab 1.6: Servicios avanzados

4-5 Document1
Ultima mod.: 11/08/2017
Objetos - Rep
Ejercicios Lab 1
Autor: Julin R. Oyola

1. Capturar excepciones
a. Crear una excepcin con una anotacin que indique su StatusCode
b. Capturar las excepciones
c. Si tiene anotacin de StatusCode, devolverlo. Si no, devolver 500 si es
RuntimeException y 400 si es Exception
d. Devolver descripcin junto con el status code
e. Escribir el error en el log
2. Manejo de seguridad
a. Agregar el security-domain other al proyecto
b. Verificar que el usuario de invocacin es admin

5-5 Document1
Ultima mod.: 11/08/2017

Potrebbero piacerti anche