Definición de correlacionadores de excepciones para errores y excepciones de recursos

Las aplicaciones JAX-RS (Java™ API for RESTful Web Services) pueden generar excepciones y errores. El comportamiento predeterminado es utilizar la funcionalidad de manejo de excepciones de un contenedor de aplicaciones como las páginas de error JSP (JavaServer Pages). Sin embargo, puede personalizar el manejo de errores y devolver respuestas específicas de seguridad cuando se produce una excepción o un error.

Acerca de esta tarea

Los métodos de recursos JAX-RS, como cualquier método Java, pueden generar excepciones comprobadas y no comprobadas. De forma predeterminada, una excepción o un error en tiempo de ejecución no seleccionado se produce de nuevo en el contenedor. Una excepción seleccionada se incluye en un ServletException para los recursos que se ejecutan en el contenedor web. Por tanto, un desarrollador puede utilizar recursos de manejo de errores como, por ejemplo, páginas de error JSP para manejar excepciones generadas desde una aplicación JAX-RS.

JAX-RS introdujo la excepción javax.ws.rs.WebApplicationException. Un desarrollador puede especificar un nombre de clase de error específico o un objeto javax.ws.rs.core.Response al crear un WebApplicationException. Cuando se genera el WebApplicationException, se utiliza la información que se incluye en la excepción mediante un nombre de clase de estado o un objeto Response para serializar una respuesta.

Si no puede generar la excepción, WebApplicationException, en el código y no puede utilizar los recursos de manejo de errores en el contenedor web, pero desea utilizar una respuesta de error personalizada, puede crear una clase javax.ws.rs.ext.ExceptionMapper JAX-RS personalizada para correlacionar excepciones con respuestas a errores HTTP.

El procedimiento siguiente muestra cómo escribir una clase personalizada ExceptionMapper.

Procedimiento

  1. Cree una clase que implemente la clase javax.ws.rs.ext.ExceptionMapper y anote la clase con la anotación javax.ws.rs.ext.Provider. Este paso supone que el recurso JAX-RS puede generar la excepción, MyCustomException, en sus métodos. En el ejemplo siguiente se muestra una clase ExceptionMapper simple:
    import javax.ws.rs.core.Response;
    import javax.ws.rs.ext.ExceptionMapper;
    import javax.ws.rs.ext.Provider;
    
    @Provider
    public class CustomExceptionMapper implements ExceptionMapper<MyCustomException> {
    
        public Response toResponse(MyCustomException exception) {
            return null;
        }
    
    }
  2. En el método toResponse(MyCustomException), devuelva un objeto Response que contenga la respuesta de error personalizada. En el ejemplo siguiente se muestra un método ExceptionMapper.toResponse(MyCustomException) personalizado:
    @Provider
    public class CustomExceptionMapper implements ExceptionMapper<MyCustomException> {
    
        public Response toResponse(MyCustomException exception) {
            return Response.status(500).entity("La aplicación no puede
                procesar su solicitud en este momento.").type("text/plain").build();
        }
    
    }
    Puede tener código adicional donde registrar un error, inspeccionar la excepción generada o utilizar lógica más compleja.
  3. Empaquete la clase ExceptionMapper personalizada compilada con el proyecto de aplicación web. Si se basa en las posibilidades de exploración de anotaciones para encontrar todas las clases JAX-RS en la aplicación web, no se requieren pasos adicionales. Sin embargo, si devuelve todos los proveedores y clases de recursos JAX-RS relevantes en un método subclase de la aplicación JAX-RS, también debe añadir la clase ExceptionMapper personalizada en el conjunto devuelto. En el ejemplo siguiente se muestra una subclase javax.ws.rs.core.Application preexistente:
    import java.util.HashSet;
    import java.util.Set;
    
    import javax.ws.rs.core.Application;
    
    public class MyApplication extends Application {
    
        @Override
        public Set<Class<?>> getClasses() {
            Set<Class<?>> classes = new HashSet<Class<?>>();
            classes.add(CustomExceptionMapper.class);
            /* añada aquí sus clases JAX-RS adicionales */
            return classes;
        }
    }

    Cuando se producen excepciones en los métodos de recursos JAX-RS, puede personalizar la respuesta de errores HTTP para que un usuario no pueda ver un seguimiento de la pila o datos potencialmente confidenciales. Utilice un ExceptionMapper o la funcionalidad de manejo de excepciones en el contenedor web para ofrecer respuestas más útiles si la aplicación no se comporta correctamente.

Resultados

Ha escrito un ExceptionMapper personalizado para manejar excepciones en la aplicación web JAX-RS.


Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_defresource_exception_mapper
File name: twbs_jaxrs_defresource_exception_mapper.html