Apache Camel。如何使用自定义处理器管理运行时引发的错误

时间:2017-05-29 12:51:26

标签: java xml spring apache-camel

我试图在 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.

1 个答案:

答案 0 :(得分:0)

找到解决方案。

我的问题是我的xml路由格式不正确。

 <onException>
     <exception>java.lang.Exception</exception>
     <handled>
         <constant>true</constant>
     </handled>
     <process ref="errorProcessor" />
 </onException>

现在可行。