1 package com.atlassian.plugins.rest.common.error.jersey;
2
3 import javax.ws.rs.WebApplicationException;
4 import javax.ws.rs.core.Context;
5 import javax.ws.rs.core.Request;
6 import javax.ws.rs.core.Response;
7 import javax.ws.rs.ext.ExceptionMapper;
8 import javax.ws.rs.ext.Provider;
9
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
12
13
14
15
16
17
18
19 @Provider
20 public class ThrowableExceptionMapper implements ExceptionMapper<Throwable>
21 {
22 private static final Logger log = LoggerFactory.getLogger(ThrowableExceptionMapper.class);
23
24 @Context
25 Request request;
26
27 public Response toResponse(Throwable t)
28 {
29 if (t instanceof WebApplicationException)
30 {
31
32
33
34
35 final WebApplicationException webEx = (WebApplicationException) t;
36 if (webEx.getResponse().getStatus() == Response.Status.INTERNAL_SERVER_ERROR.getStatusCode())
37 {
38 log.error("Server Error in REST: " + webEx.getResponse().getStatus() + ": " + webEx.getResponse(), t);
39 }
40 else
41 {
42 log.debug("REST response: {}: {}", webEx.getResponse().getStatus(), webEx.getResponse());
43 }
44 return webEx.getResponse();
45 }
46 else
47 {
48 log.error("Uncaught exception thrown by REST service: " + t.getMessage(), t);
49 return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
50 .entity(new UncaughtExceptionEntity(t))
51 .type(UncaughtExceptionEntity.variantFor(request))
52 .build();
53 }
54 }
55 }