Согласно https://people.apache.org/~dkulp/camel/try-catch-finally.html (см. Раздел Обработка ошибок верблюда отключена ), при использовании doTry .. doCatch .. doFinally
Обработчик ошибок верблюда не применяется.Таким образом, любой OnException
не срабатывает.
Если вы хотите поймать исключение с помощью OnException
, вы должны бросить его напрямую, а не внутри DoTry .. DoCatch
.Теперь вы можете подумать о создании двух onException
, один из которых обрабатывает Exception.class
, а другой - JAXBException.class
.
onException(Exception.class)
.handled(true)
.log("Globally Caught CustomException")
.end();
onException(JAXBException.class)
.handled(true)
.throwException(new CustomException())
.end();
Но опять-таки первый onException
не будет вызван, потому что Верблюд не разрешает дальнейшую обработку ошибок, когда уже обрабатывает ошибку .Это делается с помощью org.apache.camel.processor.FataFallbackErrorHandler
, который перехватывает новое исключение, регистрирует предупреждение, устанавливает его как исключение на Exchange и останавливает дальнейшую маршрутизацию (Camel In Action, второе издание).