1 package de.dlr.shepard.common.exceptions;
2
3 import io.quarkus.logging.Log;
4 import jakarta.ws.rs.WebApplicationException;
5 import jakarta.ws.rs.core.MediaType;
6 import jakarta.ws.rs.core.Response;
7 import jakarta.ws.rs.core.Response.Status;
8 import jakarta.ws.rs.ext.ExceptionMapper;
9 import jakarta.ws.rs.ext.Provider;
10
11 @Provider
12 public class ShepardExceptionMapper implements ExceptionMapper<Exception> {
13
14 @Override
15 public Response toResponse(Exception exception) {
16 int status = Status.INTERNAL_SERVER_ERROR.getStatusCode();
17 if (exception instanceof WebApplicationException webException) {
18 status = webException.getResponse().getStatus();
19 }
20
21 Log.error(exception.getMessage(), exception);
22
23 return Response.status(status)
24 .entity(new ApiError(status, exception.getClass().getSimpleName(), exception.getMessage()))
25 .type(MediaType.APPLICATION_JSON)
26 .build();
27 }
28 }