Version 2

    ExceptionMappers

     

    ExceptionMappers are custom, application provided, components that can catch thrown application exceptions and write specific HTTP responses.  The are classes annotated with @Provider and that implement this 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 exception is thrown it will be caught by the JAX-RS runtime.  JAX-RS will then scan registered ExceptionMappers to see which one support marshalling the exception type thrown.  Here is an example of ExceptionMapper

     

    
    @Provider
    public class EJBExceptionMapper implements ExceptionMapper<javax.ejb.EJBException>
    {
    
       Response toResponse(EJBException exception) {
          return Response.status(500);
       }
    
    }
    

     

    You register ExceptionMappers the same way you do MessageBodyReader/Writers.  By scanning, through the resteasy provider context-param (if you're deploying via a WAR file), or programmatically through the ResteasyProviderFactory class.