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 }