Resteasy выдает Exception, который не перехватывается ExceptionMapper - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть следующий 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...