001    package de.deepamehta.plugins.webservice.provider;
002    
003    import java.util.logging.Level;
004    import java.util.logging.Logger;
005    
006    import javax.ws.rs.WebApplicationException;
007    import javax.ws.rs.core.Response;
008    import javax.ws.rs.ext.ExceptionMapper;
009    import javax.ws.rs.ext.Provider;
010    
011    
012    
013    /**
014     * Maps all Throwables but WebApplicationExceptions to a 500 (Internal Server Error) response.
015     * A WebApplicationException's response is returned directly.
016     * <p>
017     * We don't want Jersey to re-throw anything against the servlet container as this would result
018     * in an interspersed illegible stack trace (see #484).
019     */
020    @Provider
021    public class CatchAllExceptionMapper implements ExceptionMapper<Throwable> {
022    
023        // ---------------------------------------------------------------------------------------------- Instance Variables
024    
025        private Logger logger = Logger.getLogger(getClass().getName());
026    
027        // -------------------------------------------------------------------------------------------------- Public Methods
028    
029        @Override
030        public Response toResponse(Throwable e) {
031            if (e instanceof WebApplicationException) {
032                return ((WebApplicationException) e).getResponse();
033            } else {
034                logger.log(Level.SEVERE, "A DeepaMehta resource method or event listener threw an exception resp. " +
035                    "an error occurred. Mapping exception/error to response: 500 (Internal Server Error).", e);
036                return Response.serverError().build();
037            }
038        }
039    }