#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()))