当异常被抛出到组播中时,Camel不会传播异常。
在以下设置下,direct:route
从其beanref引发异常:
rest("/...")
.post()
.consumes("application/json")
.produces("application/json")
.route()
.onException(Exception.class)
.handled(true)
.bean("exceptionHandler")
.marshal("exceptionDataFormat")
.end()
.unmarshal("dataFormat")
...
.enrich("direct:services", new ServiceAggregator())
.to("direct:anotherRoute")
...
.end()
.endRest();
from("direct:services")
.errorHandler(noErrorHandler())
.multicast()
.setAggregationStrategy(new GroupedExchangeAggregationStrategy())
.executorServiceRef("executor")
.parallelAggregate()
.streaming()
.stopOnException()
.to("direct:route")
.end()
.end();
from("direct:route")
.errorHandler(noErrorHandler())
.bean("someRef", "someMethod")
.end();
org.apache.camel.CamelExchangeException: Parallel processing failed for number 0. Exchange[...] at org.apache.camel.processor.MulticastProcessor$1.call(MulticastProcessor.java:328)
at org.apache.camel.processor.MulticastProcessor$1.call(MulticastProcessor.java:299)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
为什么我不能向父路由提出多播异常?
骆驼2.17-快照
在多播上打开ShareUnitOfWork
选项。有关详细信息,请参阅:http://camel.apache.org/multicast,其中有一个关于拆分器的示例,该拆分器也具有此选项:http://camel.apache.org/splitter.html
问题内容: 是否有关于Java中异常传播的准则? 何时在方法签名中添加例外?例如:如果仅当缺少必要的程序资源时才引发异常,并且只能在顶层进行处理,那么是否可以将所有使用erring方法的方法传播给使用此异常的所有方法? 有没有好的做法?有不良做法吗? 很抱歉,如果我含糊不清,但是我只是在寻求有关异常的编程风格的(一般)建议。 问题答案: 过去对我有帮助的准则包括: 当方法无法处理异常时引发异常 ,
问题内容: 什么是异常传播?我尝试使用Google,但找不到满意的结果。最好用Java来解释这一点。 问题答案: 令人惊讶的是,在Java教程页面中有关exception的解释。 异常从一个方法传播到另一个方法,直到调用被捕获为止。因此,如果调用,调用,调用,并且如果抛出异常,则除非这些方法之一捕获到该异常,否则该异常将从d传播到c到b传播到a。
我有一个定义doTry-doCatch块的路由。当在doCatch块中处理异常时,我希望将其传播到错误处理程序,以确保在本地处理后将消息添加到死信队列中。问题是我无法让错误处理程序的传播工作(“defaultErrorHandler called!”未打印到控制台)。我也尝试过onException,但也没有成功。 任何提示都非常感谢。此致,奥利弗
有什么想法吗?
问题内容: 我很快就遇到了这种愚蠢的行为,在这种行为中,强制展开可选对象不会传播。 从文档中: 尝试使用!访问不存在的可选值会触发运行时错误。在使用!之前,请始终确保可选内容包含非nil值。强制释放其价值。 复制: 和 这对我来说似乎不合逻辑或前后不一,我找不到有关此主题的任何文档。 这是设计使然吗? 问题答案: 从文档中: 错误处理 错误处理是响应程序错误状态并从错误状态中恢复的过程。Swift
问题内容: 我是C程序员,最近刚学习一些Java,因为我正在开发一个Android应用程序。目前,我处于一种情况。以下是一个。 现在,我希望在另一个类的其他地方使用方法MyMethod()的调用。如果有人可以为我提供一些代码片段,如何将异常传播到MyMethod()的调用者,以便可以在调用者方法的对话框中显示它们。 对不起,如果我对这个问题的回答不太清楚和奇怪。 问题答案: 只是首先不要捕获异常,