Chapter 24. Exception Handling

24.1. Exception Mappers

ExceptionMappers are custom, application-provided components that can catch application exceptions and write specific HTTP responses. They are associated with @Provider, and implement the following interface:
         package javax.ws.rs.ext;

         import javax.ws.rs.core.Response;

         /**
         * Contract for a provider that maps Java exceptions to
         * {@link javax.ws.rs.core.Response}. An implementation of this interface must
         * be annotated with {@link Provider}.
         *
         * @see Provider
         * @see javax.ws.rs.core.Response
         */
         public interface ExceptionMapper<E>
         {

         /**
         * Map an exception to a {@link javax.ws.rs.core.Response}.
         *
         * @param exception the exception to map to a response
         * @return a response mapped from the supplied exception
         */
         Response toResponse(E exception);
         }
When an application throws an exception, the exception is caught by the JAX-RS runtime. JAX-RS then scans registered ExceptionMappers to locate one which supports marshalling the exception type thrown. An example ExceptionMapper follows:

         @Provider
         public class EJBExceptionMapper implements ExceptionMapper<javax.ejb.EJBException>
         {

         Response toResponse(EJBException exception) {
         return Response.status(500).build();
         }

         }
ExceptionMappers are registered in the same way as MessageBodyReaders and MessageBodyWriters: by scanning through the RESTEasy provider context-param (if you are deploying in a WAR file), or programmatically through the ResteasyProviderFactory class.