Обработчик исключений не работает в приложении весенней загрузки с обменом сообщениями - PullRequest
0 голосов
/ 27 мая 2020

Я видел много сообщений и вопросов и ответов на StackOverflow для пользовательской обработки ошибок для приложений REST / MVC.

Моя ситуация немного отличается. Мое приложение использует Java обмен сообщениями (с ActiveMQ и SpringIntegration), и приведенный ниже метод запускается как ответ на JMessage:

public BenefitVersion getVersionAt(LocalDate referenceDate) {
    return versions.stream()
            .filter(benefitVersion -> !benefitVersion.getStartDate().isAfter(referenceDate))
            .reduce(maxBy(getBenefitVersionStartDateComparator()
                    .thenComparingLong(BenefitVersion::getId)))
            .orElseThrow(() -> new IllegalBenefitVersionException(guid,
                    format("Benefit %s does not have active version on %s", guid, referenceDate)));
}

Я определил настраиваемое исключение, как показано ниже:

public class IllegalBenefitVersionException extends RuntimeException {
    private UUID benefitId;

public IllegalBenefitVersionException(final UUID benefitId, final String message) {
    super(message);
    this.benefitId = benefitId;
    }
}

И специальный обработчик для этого исключения:

@ControllerAdvice
public class IllegalBenefitVersionExceptionHandler {

private static final Logger LOGGER = LoggerFactory.getLogger(IllegalBenefitVersionExceptionHandler.class);
private final DlqExceptionDetailService exceptionDetailService;

@Autowired
public IllegalBenefitVersionExceptionHandler(DlqExceptionDetailService exceptionDetailService) {
    this.exceptionDetailService = exceptionDetailService;
}

@ExceptionHandler(IllegalBenefitVersionException.class)
public void handleException(Throwable t) {
    IllegalBenefitVersionException exception = (IllegalBenefitVersionException) t;
    exceptionDetailService.newWithBenefitIdAndSave(exception.getBenefitId(), t.getMessage());
    LOGGER.error("From ExceptionHandler: {}", t.getMessage(), t);
}

}

Но он никогда не вызывается. Причина в том, что я использую @ControllerAdvice, а контроллера нет?

Или, возможно, мне нужно где-то добавить специальное сканирование компонентов?

Если да, как мне подключить пользовательский обработчик исключений к приложению, основанному на обмене сообщениями, а не REST?

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