我是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>
答案 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!");
}
});