package org.killbill.billing.jaxrs.mappers;
import javax.inject.Singleton;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
@Provider
public class RuntimeExceptionMapper extends ExceptionMapperBase implements ExceptionMapper<RuntimeException> {
private final UriInfo uriInfo;
private static final Logger log = LoggerFactory.getLogger(RuntimeExceptionMapper.class);
public RuntimeExceptionMapper(@Context final UriInfo uriInfo) {
this.uriInfo = uriInfo;
}
@Override
public Response toResponse(final RuntimeException exception) {
if (exception instanceof NullPointerException) {
log.warn("Unexpected NullPointerException", exception);
return buildBadRequestResponse(exception, uriInfo);
} else if (exception instanceof WebApplicationException) {
return ((WebApplicationException) exception).getResponse();
} else {
return buildInternalErrorResponse(exception, uriInfo);
}
}
}