====== Diseño e implementación de servicios Rest ======
==== Diseño de servicios REST ====
* [[fdw2.0:fundeweb2.0:gt:rest:comenzando|Comenzando con los servicios REST:
qué es un servicio REST?]]
* [[fdw2.0:fundeweb2.0:gt:rest:buenas_pracitcas|Buenas prácticas con REST]]
* [[fdw2.0:fundeweb2.0:gt:rest:buenas_practicas|Buenas prácticas con REST]]
* [[fdw2.0:fundeweb2.0:gt:rest:guia_de_anotaciones_jax-rs_1.1_para_servicios_web_rest|Guía de anotaciones JAX-RS 1.1 para servicios web REST]]
==== Implementación de servicios REST ====
* [[fdw2.0:fundeweb2.0:gt:rest:creacion_de_servicios_web_rest | Creación de servicios web REST]]
* [[fdw2.0:fundeweb2.0:gt:rest:guia_de_rest_con_json | Mapeo de JSON a POJO Java]]
* [[fdw2.0:fundeweb2.0:gt:rest:guia_de_cliente_rest | Creación de un cliente REST]]
* [[fdw2.0:fundeweb2.0:gt:rest:soporte_cors_para_rest | Soporte CORS para servicios REST]]
* [[fdw2.0:fundeweb2.0:gt:rest:log_mensajes | Logear mensajes IN/OUT en servicios]]
* [[fdw2.0:fundeweb2.0:gt:rest:jersey_trace | Configurar Jersey TRACE (Depuración)]]
* [[fdw2.0:fundeweb2.0:gt:rest:debug_info | Información de Depuración sobre peticiones Rest]]
* [[fdw2.0:fundeweb2.0:gt:rest:mapeo_excepciones_rest|Mapeo de excepciones en JAX-RS]]
* [[fdw2.0:fundeweb2.0:gt:rest:manejo_errores_rest | Manejo de errores en servicios REST]]
* [[https://dzone.com/articles/using-parameter-converters-in-jax-rs| Using Parameter Converters in JAX-RS]]
* [[fdw2.0:fundeweb2.0:gt:rest:hateoas| HATEOAS]]
* [[fdw2.0:fundeweb2.0:gt:rest:internacionalizacion| Soporte para Internacionalización]]
* [[fdw2.0:fundeweb2.0:gt:rest:paginacion| Paginación en Servicios Rest]]
* [[fdw2.0:fundeweb2.0:gt:rest:conversational| Servicios Rest Conversacionales]]
* [[fdw2.0:fundeweb2.0:gt:rest:bean_param| Agrupación de Parámetros con @BeanParam]]
* [[https://mkyong.com/webservices/jax-rs/jax-rs-queryparam-example/|Pasar parámetros con número variable (VARARGS) como @QueryParam]]
==== Securización de servicios REST ====
* [[fdw2.0:fundeweb2.0:gt:rest:creacion_de_servicios_web_rest_jwt | Creación de servicios web REST seguros con JWT]]
* [[fdw2.0:fundeweb2.0:gt:rest:guia_validacion_servicio_rest | Validación de Servicios REST]]
* [[fdw2.0:fundeweb2.0:gt:rest:guia_csrf_filter | Añadir Protección ante ataques CSRF]]
==== Autenticación de servicios REST ====
* [[fdw2.0:fundeweb2.0:gt:rest:autenticacion_de_servicios_web_rest_jwt | Autenticación de servicios REST]]
* [[fdw2.0:fundeweb2.0:gt:rest:autenticacion_de_servicios_web_rest_token | Autenticación con token]]
==== Autorización de servicios REST ====
* [[fdw2.0:fundeweb2.0:gt:rest:autorization | Autorización de servicios REST]]
==== Utilidades ====
* [[fdw2.0:fundeweb2.0:gt:maven-filtrar-codigo-java|Parametrizar Servicios Web según el entorno]]
* [[fdw2.0:fundeweb2.0:gt:documentar-rest-enunciate|Documentar APIs REST con Enunciate]]
* [[https://fundeweb.um.es/prototipo/public/FundeWeb/2.x/apidoc/jsr311-api/index.html|JAXRS 1.1 API Documentation]]
* [[https://eclipse-ee4j.github.io/jersey.github.io/documentation/1.19.1/index.html|Jersey 1.19 User Guide]]
* [[https://eclipse-ee4j.github.io/jersey.github.io/apidocs/1.19.1/jersey/index.html|Jersey 1.19 API]]
* [[https://stackoverflow.com/questions/20832015/how-do-i-iterate-over-a-json-response-using-jackson-api-of-a-list-inside-a-list|Parseo de JSON sin crear DTO con Jackson]]
* [[https://www.oscarblancarteblog.com/api-rest-java-jax-rs/|Tutorial de Servicios REST con Java JAX-RS]]
==== Integración con JBoss Seam ====
Se pueden utilizar las anotaciones **//@Logger//**, **//@In//** y **//@EJB//** sin que la clase del servicio (contiene la anotación //@Path//) tenga declarada la anotaión **//@Name//**.
===== FAQs =====
=== Autenticación servicios rest falla: Error 401--Unauthorized ===
Al desplegar un servicio rest y tratar de ejecutarlo accediendo al endpoint, a pesar de incluir la cabecera de autenticación (Basic XXXXX) el servidor sigue devolviendo el texto
Error 401--Unauthorized
Error 401--Unauthorized
From RFC 2068 Hypertext Transfer Protocol -- HTTP/1.1:
10.4.2 401 Unauthorized
The request requires user authentication. The response MUST include a WWW-Authenticate header field (section 14.46) containing a
...
//FundeWeb 2.0 //
**Solución**
Añadir el parámetro false a la configuración de weblogic.
El fichero de configuración del servidor se encuentra en C:\FundeWeb\2.0\servidores\wls1213_dev\dominios\fundeweb\config\config.xml
Fund3W3b2
{AES}6aBVSBzstISKuTIknaiZYqvpOEH0geUuF6YbbBvE4ID0E1zhg/E5XRzbG0a1w9Di
false
Tras reiniciar el servidor debería funcionar.
Fuentes:
- https://stackoverflow.com/questions/4002497/testing-weblogic-webservices-using-soap-ui
- https://docs.oracle.com/cd/E12840_01/wls/docs103/security/thin_client.html#understanding_basic_atn
--- //[[carlos.albaladejo@ticarum.es|CARLOS ALBALADEJO PASCUAL]] 25/07/2019 09:08//
\\
----
\\
=== Problema ObjectMapper de Jackson ===
Despues de una actualización de seguridad en Jackson (a partir de la versión 1.9.14) para evitar ataques en la deserialización de clases polimorficas (Herencia Java), se puede producir el siguiente error:
org.codehaus.jackson.map.JsonMappingException: Illegal type [...] to deserialize: prevented for security reasons
[...]
Caused by: org.codehaus.jackson.map.JsonMappingException: Illegal type [...] to deserialize: prevented for security reasons at org.codehaus.jackson.map.deser.BeanDeserializerFactory.checkLegalTypes(BeanDeserializerFactory.java:1521)
//FundeWeb 2.0 //
**Solución**
Para solucionarolo tienes que crear en fichero //jackson-deserialization-whitelist-packages.properties// en la carpeta //src/main/resources// del módulo WEB, donde incluimos en cada linea, el paquete de código donde estan las clases que queremos permitir la deserialización. Ejemplo:
es.um.atica.miaplicacion.rest.dtos
es.um.atica.miaplicacion.rest.pojos
\\
----
\\
=== Obtener ObjectMapper (Jackson) Predeterminado de FundeWeb ===
Podemos obtener una instancia de la clase _ObjectMapper_ de Jackson predeterminado de FundeWeb. De esta forma tendremos disponible las configuraciones por defecto.
ObjectMapper mapper = es.um.atica.jackson.utils.JsonUtils.getFundeWebObjectMapper();
--- //[[juanmiguel.bernal@ticarum.es|JUAN MIGUEL BERNAL GONZALEZ]] 03/04/2020 13:19//
===== Solicitud/Registro de FAQ =====
Pon aquí tus propuestas de FAQs, indicando qué problema tienes, y buscaremos la solución lo antes posible. Si además lo has resuelto, puedes indicar cómo lo has hecho.
Formato de petición de FAQ:
**Título**
//Descripción del problema//
//Tecnología afectada (Fundeweb 1/2)//
//Cómo reproducir el error//
**Solución**
//Descripción de la solución//
Tus datos de contacto --- //[[correo@umOticarum.es|Tu Nombre]] dd/mm/yyyy //
=== FAQs Resueltas ===
----
--- //[[juanmiguel.bernal@ticarum.es|JUAN MIGUEL BERNAL GONZALEZ]] 13/09/2018 13:58//