Java 驼峰使用原始消息不起作用
生成输入主体的第一条路径Java 驼峰使用原始消息不起作用,java,apache-camel,Java,Apache Camel,生成输入主体的第一条路径 from("timer://bar?fixedRate=true&period=10000s") .process(new Processor() { @Override public void process(Exchange exchange) throws Exception { exchange.getIn().setB
from("timer://bar?fixedRate=true&period=10000s")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setBody("some message");
}
}).to("direct:dummydata");
引发异常并通过onException
捕获它的第二条路径
onException(RuntimeException.class)
.useOriginalMessage()
.handled(true)
.log("after catching: ${body}");
from("direct:dummydata")
.log("before exception: ${body}.")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
throw new RuntimeException("some exception");
}
});
期望值:
异常之前:一些消息。
捕获后:一些消息
现实:
2016-04-18 18:08:02.342 INFO 5659 --- [0 - timer://bar] route2 :
before exception: some message.
2016-04-18 18:08:02.345 INFO 5659 --- [0 - timer://bar] route2 :
after catching:
2016-04-18 18:08:02.349 ERROR 5659 --- [0 - timer://bar]
o.a.camel.processor.DefaultErrorHandler : Failed delivery for
(MessageId: ID-sdcit001mac-49629-1460974079807-0-1 on ExchangeId:
ID-sdcit001mac-49629-1460974079807-0-2). Exhausted after delivery attempt:
1 caught: java.lang.RuntimeException: some exception. Processed by failure processor:
FatalFallbackErrorHandler[Channel[Log(route2)[after catching: ${body}]]]
为什么
useOriginalMessage()
在这里不起作用?问题似乎与“direct:”的使用有关。如果您将其更改为“direct:vm”,您应该会看到所需的结果
可能根本原因与“direct”有关:被视为几乎是来自第一条路线的直接呼叫,因此意味着一个空的起始正文(来自计时器)。因为,我看到您有3条路线
.useOriginalMessage()
,这意味着使用与本例中路径起始处出现的消息完全相同的消息,即NULL。当您评论或删除.useOriginalMessage()
时,它会向您显示您的身体一些信息。
按如下所示更新异常,然后它将显示您的消息
onException(RuntimeException.class)
//.useOriginalMessage()
.handled(true)
.log("after catching: ${body}");