У меня есть следующий ExceptionMapper, который должен перехватывать все исключения ClientErrorException, выданные Resteasy
@Provider
public class ClientErrorExceptionMapper implements ExceptionMapper<ClientErrorException> {
@Override
public Response toResponse(ClientErrorException exception) {
log.error("Error calling adapter. Response Status '{}' ", exception.getResponse().getStatus());
ErrorData error = ErrorData.builder()
.errorCode("error code")
.errorDescription("error description")
.build();
return Response
.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(error)
.build();
}
}
Имеет ресурс, который действует как прокси и перенаправляет вызовы в другое приложение с помощью Resteasy.
вызов schemeAdapterService.createPreCheckin()
всегда возвращает код состояния 404.
Я пробовал следующие примеры:
@Path("/preCheckin")
@POST
public PreCheckinResponse preChecking(@Valid SomeData someData) {
PreCheckinResponse preCheckinResponse = schemeAdapterService.createPreCheckin(someData);
System.out.println("This is never printed");
return preCheckinResponse;
}
1.Здесь NotFoundException выдается при вызове службы.Однако он не входит в ExceptionMapper, и ответ на вызов 404 возвращается как есть.
@Path("/preCheckin")
@POST
public PreCheckinResponse preChecking(@Valid SomeData someData) {
PreCheckinResponse preCheckinResponse = null;
try {
preCheckinResponse = schemeAdapterService.createPreCheckin(someData);
} catch (ClientErrorException e) {
throw e;
}
System.out.println("This is never printed");
return preCheckinResponse;
}
2.Здесь он входит в предложение catch и перебрасывает исключение, но также не входит в ExceptionMapper.
@Path("/preCheckin")
@POST
public PreCheckinResponse preChecking(@Valid SomeData someData) {
PreCheckinResponse preCheckinResponse = null;
try {
preCheckinResponse = schemeAdapterService.createPreCheckin(someData);
} catch (ClientErrorException e) {
throw new NotFoundException(e.getResponse());
}
System.out.println("This is never printed");
return preCheckinResponse;
}
3.Тот же результат, что и в 2.
@Path("/preCheckin")
@POST
public PreCheckinResponse preChecking(@Valid SomeData someData) {
PreCheckinResponse preCheckinResponse = null;
try {
preCheckinResponse = schemeAdapterService.createPreCheckin(someData);
} catch (ClientErrorException e) {
throw new NotFoundException();
}
System.out.println("This is never printed");
return preCheckinResponse;
}
4.Если вы введете new NotFoundException()
, исключение будет проходить через ExceptionMapper правильно!
Я не понимаю этого поведения.Я попытался зарегистрировать ClientErrorExceptionMapper
в ResteasyClient
и / или использовать @Provided
.Все с тем же результатом.
Я хотел бы использовать пример в 1) и использовать ExceptionMapper для любых неудачных вызовов схемыAdapterService.