我试图在 XML 的路线中转换使用 Java DSL 制作的路线。 以下是我的原始路线。它的作用很简单。 获取整数数组作为输入,并在运行时抛出一些错误。 在路径的最后,我需要读取自己引发的所有错误,而不是在控制台中使用长堆栈跟踪或其他长消息。
other lines of code...
camelContext.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
onException(Exception.class)
.handled(true)
.process(new ErrorProcessor());
from("direct:start_route")
.split(body())
.processRef("payloadProcessor")
.to("direct:a")
.end()
.to("direct:d");
from("direct:a")
.beanRef("stupidBean", "stupidMethod");
from("direct:d")
.beanRef("errorProcessor", "check");
}
});
other lines of code...
以下是我的xml路线,它不起作用。
...
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="direct:call.playWithPayload" />
<onException>
<exception>java.lang.Exception</exception>
<process ref="errorProcessor" />
</onException>
<split onPrepareRef="payloadProcessor">
<simple>${body}</simple>
<to uri="direct:call.a" />
</split>
<to uri="direct:call.d" />
</route>
<!--SUB ROUTE-->
<route>
<from uri="direct:call.a" />
<bean ref="stupidBean" method="stupidMethod" />
</route>
<route>
<from uri="direct:call.d" />
<bean ref="errorProcessor" method="check" />
</route>
</camelContext>
...
我需要的是在拆分之后调用 direct:call.d 。
多亏了这一点,我可以阅读存储在标题中的List<Exception>
中添加的所有错误。
我认为问题出在 onException 管理中。 当我尝试添加处理以重现我的 Java DSL
时<onException>
...
<handled>
<constant>
true
</constant>
</handled>
...
我收到了这个错误:
Invalid content was found starting with element 'handled'.
One of '{"http://camel.apache.org/schema/spring":description, "http://camel.apache.org/schema/spring":exception}' is expected.
答案 0 :(得分:0)
找到解决方案。
我的问题是我的xml路由格式不正确。
<onException>
<exception>java.lang.Exception</exception>
<handled>
<constant>true</constant>
</handled>
<process ref="errorProcessor" />
</onException>
现在可行。