从Camel 2.1升级到2.17并进行了一些代码修改后,我们遇到了Camel异常处理的一些问题。我们从应用程序A向应用程序B发送消息。快乐的流程工作正常,但不愉快的流程没有。
我们发送消息导致异常,但在onexception
块中未正确处理。
实际上,我们看到以下tracelog:ProcessTaskEx - message received
,但我看不到:ProcessTaskEx - exception
我们从Camel获得的例外是:
camel exchange failed without an exception: <SOAP-ENV:Fault xmlns:SOAP-ENV>
我们的路线看起来像这样,任何想法可能是什么问题?非常感谢您的时间社区! :)
<?xml version="1.0" encoding="ASCII"?>
<routes xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="switchyard://ProcessTaskEx"/>
<log message="ProcessTaskEx - message received: ${body}" loggingLevel="DEBUG" logName="WebServiceQueues" />
<to uri="switchyard://RequestCapacity"/>
<onException>
<exception>java.lang.Exception</exception>
<exception>webservicequeues.utilities.WebServiceQueueException</exception>
<log message="ProcessTaskEx - exception" loggingLevel="DEBUG" logName="WebServiceQueues" />
<redeliveryPolicy maximumRedeliveries="2" redeliveryDelay="60000" maximumRedeliveryDelay="900000" retriesExhaustedLogLevel="INFO" retryAttemptedLogLevel="INFO"/>
<handled>
<constant>true</constant>
</handled>
<log message="Failed after Retry.Sending ProcessTask Request to Error Queue" loggingLevel="ERROR" logName="WebServiceQueues" />
<to uri="switchyard://ErrorProcessTaskExQueue"/>
</onException>
</route>
</routes>
答案 0 :(得分:0)
就像我记得的那样,默认情况下不会处理错误。要启用此功能,必须设置属性:handleFault="true"
。可以为整个Camel上下文或单个路径设置它。
XML格式的路由示例:
<route handleFault="true">
...
</route