Skip to content
Snippets Groups Projects
Commit a4d00203 authored by Thorsten Vitt's avatar Thorsten Vitt
Browse files

Simple generic exception mapper

parent 99ba20f7
No related branches found
No related tags found
No related merge requests found
package info.textgrid.services.aggregator;
import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.AuthFault;
import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.IoFault;
import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.MetadataParseFault;
import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.ObjectNotFoundFault;
import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.ProtocolNotImplementedFault;
import java.text.MessageFormat;
import java.util.Map;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableMap;
public class GenericExceptionMapper implements ExceptionMapper<Exception> {
public static final Map<Class<? extends Exception>, Response.Status> STATUS_MAP = ImmutableMap
.<Class<? extends Exception>, Response.Status> builder()
.put(MetadataParseFault.class, Status.BAD_REQUEST)
.put(ObjectNotFoundFault.class, Status.NOT_FOUND)
.put(AuthFault.class, Status.UNAUTHORIZED)
.put(IoFault.class, Status.INTERNAL_SERVER_ERROR)
.put(ProtocolNotImplementedFault.class, Status.BAD_REQUEST).build();
private static final String HTML_TEMPLATE =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<!DOCTYPE html>\n" +
"<html xmlns=\"http://www.w3.org/1999/xhtml\">\n" +
" <head>\n" +
" <title>404 Not Found</title>\n" +
" <style type=\"text/css\">'\n"
+
" h1 { border-bottom: 1px solid red; }\n" +
" .details { color: gray; }\n" +
" '</style>\n"
+
" </head>\n" +
" <body>\n" +
" <h1>Not Found</h1>\n" +
" <p class=\"message\">{2}</p>\n" +
" <div class=\"details\">\n" +
" <pre>\n" +
"{3}\n" +
" </pre>\n" +
" </div>\n" +
" </body>\n" +
"</html>";
@Override
public Response toResponse(final Exception exception) {
Status status = STATUS_MAP.get(exception.getClass());
if (status == null)
status = Status.INTERNAL_SERVER_ERROR;
ResponseBuilder builder = Response.status(status);
builder.type(MediaType.APPLICATION_XHTML_XML_TYPE);
builder.entity(MessageFormat.format(HTML_TEMPLATE,
status.getStatusCode(), status.getReasonPhrase(),
exception.getLocalizedMessage(),
Throwables.getStackTraceAsString(exception)));
return builder.build();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment