Исключение Apache camel onException добавление сведений об ошибке в исходное сообщение

#java #apache-camel #mq

Вопрос:

Я добавил эту обработку исключений к маршруту верблюдов.

  .onException(BeanCreationException.class, ValidationException.class)
     .handled(true)
     .process(new OnExceptionProcessor())
     .to("errorQueue0").id("errorQueue")
     .end()
 
 public class OnExceptionProcessor implements Processor {
    @Override
    public void process(Exchange exchange) throws Exception {
        Exception cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
        exchange.getIn().setHeader("FailedBecause", cause.getMessage());
    }
}
 

Когда я читаю это сообщение из очереди ошибок, я не могу найти этот заголовок.
любая идея о том, как добавить сведения об ошибке вместе с исходным сообщением в очередь ошибок

Комментарии:

1. Может быть, завернуть его в какой-нибудь предмет в теле?

Ответ №1:

Это может быть проблемой контекста, поскольку вы находитесь в процессоре, который вызывается обработчиком ошибок.

В качестве альтернативы вы можете вернуть строковое значение, заданное в заголовке, из вашего метода процессора. Кстати, это также улучшает тестируемость вашего процессора.

Затем вы можете использовать это возвращаемое значение для прямой установки заголовка в маршруте обработчика ошибок.

 .setHeader("FailedBecause", method(new OnExceptionProcessor()))