我希望将已处理邮件的结果包装到某个回复对象中以回答网络服务。这是我的测试路线:
this.from("cxf:someEndpoint")
.process(new SomeProcessorThatMightThrowAnException())
.process(new SomeOtherProcessorThatMightThrowAnException())
.log("normal end of route");
没关系,如果有异常,结果应该包含在某个对象中,然后返回给我的ws的调用者。
在camel 2.13.x中,我通过在路径末尾添加另一个处理器并在“异常”中执行相同的操作。 现在我试图在camel 2.14(2.14因为&#39; modeBeforeConsumer&#39;)中简化这个(技术问题并在“功能路线”之外处理它),并将其添加到我的路由器中:< / p>
onCompletion()
.modeBeforeConsumer()
.process(new ConvertToWsReplyProcessor());
这个ConvertToWsReplyProcessor
应该处理一个Exception,但我发现没有办法看到,如果有异常,因为exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class)
总是为空。
问题:
1)有没有办法找出onCompletion()
中是否存在例外情况?
2)我发现防止骆驼倾倒堆栈跟踪的唯一方法是使用onException(Ex...).handled(true)
,还有其他人吗?
3)这些onXY如何处理?他们得到交换的副本吗?并且onCompletion被称为last?
答案 0 :(得分:1)
OnCompletionProcessor只需在处理交换之前删除一些交换属性,这可以解释为什么你不能在这里解决这个异常。
由于camel使用onException来处理异常,我担心你必须这样做。