UndeclaredThrowableException выдается в Spring Retry, хотя проверенное исключение объявлено в объявлении метода

РЕДАКТИРОВАТЬ: я прочитал связанную тему (Получение UndeclaredThrowableException вместо моего собственного исключения) осторожно, но это не отвечает на мой вопрос - этот билет предлагает объявить проверенное исключение в перехваченном методе, что я уже сделал.

Я пытаюсь использовать механизм Spring Retry и хочу создать собственное проверенное исключение в методе разрешения, но оно не работает с UndeclaredThrowableException. Вот что я делаю:

  1. Я объявил свое пользовательское исключение RuntimeException (которое указывало бы, что мне нужно повторить попытку):

public class RestCallRetryException extends RuntimeException

  1. Затем я выбрасываю это исключение времени выполнения при реализации следующего метода:

@Retryable(value = RestCallRetryException.class, maxAttempts = 2) InquiryResponse postInquiry(InquiryRequest inquiryRequest) throws RestCallException;

  1. Я объявил метод повторной попытки для его обработки:

@Recover InquiryResponse recover(RestCallRetryException e) throws RestCallException;

  1. Как вы можете видеть, у меня также есть RestCallException, которое является проверенным исключением, выбрасываемым при восстановлении:

public class RestCallException extends Exception

Я выбрасываю RestCallException в реализации recovery(RestCallRetryException e) и получаю UndeclaredThrowableException. Я не понимаю, почему это происходит. Я бы понял, что это так, если бы я не объявил, что метод, отмеченный @Retryable (postInquiry), выдает RestCallException, но все это объявлено, как вы можете видеть в моих фрагментах кода. Что мне здесь не хватает?


person Daniel Piotrowski    schedule 29.03.2021    source источник
comment
Проверьте этот ответ, так как он может помочь в вашем случае stackoverflow.com/a/5490372/2710264   -  person wawek    schedule 29.03.2021
comment
@Lino - пожалуйста, подумайте еще раз о закрытии тикета. Я изложил свое объяснение, почему я думаю, что это не дубликат.   -  person Daniel Piotrowski    schedule 29.03.2021
comment
@DanielPiotrowski Пожалуйста, предоставьте также трассировку стека, насколько я понимаю ваш вопрос, метод обработка повторной попытки - это метод из весны, и который не объявляет ваш RestCallException ( потому что он не может объявить это)   -  person Lino    schedule 29.03.2021
comment
Пожалуйста, предоставьте полный MCVE, в идеале небольшой проект GitHub, вкл. Maven build, тогда я снова открою вопрос и также изучу его.   -  person kriegaex    schedule 02.04.2021