Apache Camel On Exception无效

时间:2014-06-06 09:35:05

标签: apache-camel

我是Apache Camel的新手。我能够将jms消息从一个队列发送到另一个队列。我想知道如何处理异常。我学会了onException,但它不适合我。

我将jms队列改为jms1,这是错误的。如果我运行此代码,我将受到打击例外。

我的期望是每当我得到异常时我的bean类应该调用,但它没有发生。请帮助我。

例外:

org.apache.camel.RuntimeCamelException: org.apache.camel.FailedToCreateRouteException:无法在以下位置创建路线route1:>>>至[jms1:queue:FinalQSource]<<<在路线:路线[[从[jms:队列:testQSource]] - > [OnException [[class j ...因为无法解析endpoint: jms1://queue:FinalQSource due to: No component found with scheme: jms1

代码

             <camelContext id="jmsContext" xmlns="http://camel.apache.org/schema/spring">   
    <onException>

    <exception>org.apache.camel.RuntimeCamelException</exception>
    <exception>org.apache.camel.ResolveEndpointFailedException</exception>
        <!-- <handled><constant>true</constant></handled> -->           
         <bean ref="exceptionListener" method="orderFailed" />
    </onException>
    <route>
        <from uri="jms:queue:testQSource" />
        <to uri="jms1:queue:FinalQSource" /><!--
    </route>
          </camelContext>

1 个答案:

答案 0 :(得分:1)

这不起作用,因为驼峰试图解析你的路线时会抛出异常。 onException块仅捕获在执行路由期间抛出的异常。

要测试异常处理,请使用正确的驼峰测试指南 - http://camel.apache.org/testing.html

我建议您模拟一个端点以返回异常,例如此处 - https://github.com/christian-posta/camel-sandbox/blob/master/one-off/src/test/java/posta/TestMockExceptions.java

MockEndpoint mockException = MockEndpoint.resolve(context, "mock:exception");
    mockException.whenAnyExchangeReceived(new Processor() {
        @Override
        public void process(Exchange exchange) throws Exception {
            System.out.println("i got here...");
            throw new RuntimeException("fail!");
        }
});