diff --git a/scm-webapp/src/main/java/sonia/scm/api/FallbackExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/FallbackExceptionMapper.java index feb5341e2d..4815b22bdc 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/FallbackExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/FallbackExceptionMapper.java @@ -4,10 +4,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; import sonia.scm.api.v2.resources.ErrorDto; -import sonia.scm.api.v2.resources.ExceptionWithContextToErrorDtoMapper; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; import javax.ws.rs.core.Response; import javax.ws.rs.ext.ExceptionMapper; import javax.ws.rs.ext.Provider; @@ -20,16 +18,9 @@ public class FallbackExceptionMapper implements ExceptionMapper { private static final String ERROR_CODE = "CmR8GCJb31"; - private final ExceptionWithContextToErrorDtoMapper mapper; - - @Inject - public FallbackExceptionMapper(ExceptionWithContextToErrorDtoMapper mapper) { - this.mapper = mapper; - } - @Override public Response toResponse(Exception exception) { - logger.debug("map {} to status code 500", exception); + logger.warn("mapping unexpected {} to status code 500", exception.getClass().getName(), exception); ErrorDto errorDto = new ErrorDto(); errorDto.setMessage("internal server error"); errorDto.setContext(Collections.emptyList()); diff --git a/scm-webapp/src/main/java/sonia/scm/api/JsonParseExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/JsonParseExceptionMapper.java new file mode 100644 index 0000000000..dacecb350e --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/JsonParseExceptionMapper.java @@ -0,0 +1,35 @@ +package sonia.scm.api; + +import com.fasterxml.jackson.core.JsonParseException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.MDC; +import sonia.scm.api.v2.resources.ErrorDto; +import sonia.scm.web.VndMediaType; + +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; +import java.util.Collections; + +@Provider +public class JsonParseExceptionMapper implements ExceptionMapper { + + private static final Logger logger = LoggerFactory.getLogger(JsonParseExceptionMapper.class); + + private static final String ERROR_CODE = "2VRCrvpL71"; + + @Override + public Response toResponse(JsonParseException exception) { + logger.trace("got illegal json: {}", exception.getMessage()); + ErrorDto errorDto = new ErrorDto(); + errorDto.setMessage("illegal json content: " + exception.getMessage()); + errorDto.setContext(Collections.emptyList()); + errorDto.setErrorCode(ERROR_CODE); + errorDto.setTransactionId(MDC.get("transaction_id")); + return Response.status(Response.Status.BAD_REQUEST) + .entity(errorDto) + .type(VndMediaType.ERROR_TYPE) + .build(); + } +}