我试图在全局 onException 中捕获我自己的异常。在捕获 Jaxb 异常后,我抛出了异常。但是 CustomException 不会被 onException 捕获
onException(Exception.class)
.handled(true)
.log("Globally Caught CustomException")
.end();
from("start:direct")
.doTry()
.unmarshal(soapMessage)
.doCatch(JAXBException.class)
.log("Locally Caught JAXBException")
.throwException(new CustomException()
.endDoTry();
最佳答案
根据https://people.apache.org/~dkulp/camel/try-catch-finally.html (请参阅Camel错误处理已禁用部分),当使用doTry .. doCatch .. doFinally
时,Camel错误处理程序不适用。因此,任何 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
不会被调用,因为 Camel 不允许在已经处理错误的情况下进行进一步的错误处理。这是由 org.apache.camel.processor.FataFallbackErrorHandler 完成的,它捕获新的异常,记录警告,将其设置为 Exchange 上的异常,并停止任何进一步的路由(Camel In Action ,第二版)。
关于java - Camel - 捕获全局 onException 中抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56851500/