onexception 子句在测试用例中不起作用 - 骆驼



我使用此子句捕获项目中发生的所有异常,以自定义其行为。

<onException>
<exception>java.lang.Exception</exception>
<handled><constant>true</constant></handled>
<process ref="prepareExceptionProcessor"/>
<to uri="activemq:int.sendmail" />
</onException>

考虑到所有路由在发生错误时只抛出java.lang.Exception。

抛出异常的路径是:

<route id="int.uploadFile">
<from uri="[[toFilepath.forUpload.read]]"/>
<process ref="generateFileNameFtpProcessor"/>
<setHeader headerName="CamelFileName"><simple>[[fileName.toFtp]]</simple></setHeader>
<to id="uploadFile" uri="[[upload.toFtp]]"/>
</route>

在测试中,uri"upload.toFtp"设置了一个不存在的连接,因此他们抛出了一个异常。测试只启动上下文并等待消息插入队列"activemq:int.sendmail">

当我在Fuse上安装项目时,<onException>运行良好,但当我执行抛出某种类型异常的测试用例时,<onException>不起作用。

这是在激发异常时显示测试用例的日志。

ERROR org.apache.camel.prrocessor.DefaultErrorHandler-传递失败的(ExchangeId:2796-1-86上的MessageId:2796-1+86)。之后筋疲力尽传递尝试:捕获到1:java.lang。异常:上载文件时出错名称为140107034802854_2_.xml.gz java.lang.Exception:错误正在上传名为140107034802854_2_.xml.gz的文件au.com.inte.processor.ValideExceptionProcessor.produle(ValidateExceptionProcess.java:22)在org.apache.cocamel.util.AncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.procle(AsyncProcessorConverterHelper.java:61)在org.apache.cocamel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)在org.apache.cocamel.producter.DelegateAsyncProcessor.productNext(Delegate异步处理器.java:99)在org.apache.cocamel.producter.DelegateAsyncProcessor.process(Delegate异步处理器.java:90)在org.apache.cocamel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)在org.apache.cocamel.producter.DelegateAsyncProcessor.productNext(Delegate异步处理器.java:99)在org.apache.cocamel.producter.DelegateAsyncProcessor.process(Delegate异步处理器.java:90)在org.apache.cocamel.producter.interceptor.TraceSinterceptor.prrocess(TraceInterceptor.java:91)在org.apache.cocamel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)在org.apache.cocamel.producter.DelegateAsyncProcessor.productNext(Delegate异步处理器.java:99)在org.apache.cocamel.producter.DelegateAsyncProcessor.process(Delegate异步处理器.java:90)在org.apache.cocamel.fabric.FabricTraceProcessor.process(FabricTraceProcessor.java:81)在org.apache.cocamel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)在org.apache.cocamel.processer.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:334)在org.apache.cocamel.processer.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:220)在org.apache.cocamel.producter.RouteContextProcessor.productNext(RouteContextProcessor.java:45)在org.apache.cocamel.producter.DelegateAsyncProcessor.process(Delegate异步处理器.java:90)在org.apache.cocamel.producter.interceptor.DefaultChannel.process(DefaultChannel.java:303)在org.apache.cocamel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)网址:org.apache.cocamel.processer.Pipeline.process(Pipeline.java:117)org.apache.cocamel.processer.Pipeline.process(Pipeline.java:80)org.apache.cocamel.producter.RouteContextProcessor.productNext(RouteContextProcessor.java:45)在org.apache.cocamel.producter.DelegateAsyncProcessor.process(Delegate异步处理器.java:90)在org.apache.cocamel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:150)在org.apache.cocamel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:117)在org.apache.cocamel.producter.RouteInflightRepositoryProcessor.productNext(RouteInfightRepositoryProcessor.java:48)在org.apache.cocamel.producter.DelegateAsyncProcessor.process(Delegate异步处理器.java:90)在org.apache.cocamel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)在org.apache.cocamel.producter.DelegateAsyncProcessor.productNext(Delegate异步处理器.java:99)在org.apache.cocamel.producter.DelegateAsyncProcessor.process(Delegate异步处理器.java:90)在org.apache.cocamel.management.IInstrumentationProcessor.produce(InstrumentationProcessor.java:73)在org.apache.cocamel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:336)在org.apache.cocamel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:189)在org.apache.cocamel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:155)在org.apache.cocamel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:142)在org.apache.cocamel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:92)在java.util.concurrent.Executors$RunnableAdapter.call(Executitors.java:471)在java.util.concurrent.FFutureTask$Sync.innerRunAndReset(FutureTask.java:351)位于java.util.concurrent.FFutureTask.runAndReset(FutureTask.java:178)在java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)在java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)在java.util.concurrent.ThreadPoolExecutiator.runWorker(ThreadPoolExecutiator.java:1145)在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)在java.lang.Thread.run(Thread.java:722)2014-01-08 11:44:20警告org.apache.camel.comcomponent.file.GenericFileOnCompletion-回滚文件策略:org.apache.camel.component.file.strategy.GenericFileRenameProcessStrategy@2336bff7对于文件:GenericFile[/tmp/test/work/feedsToUpload/1401070348802.2_xml.gz]

你能帮我找到问题吗
非常感谢。

看起来您的自定义au.com.inte.prrocessor.ValidateExceptionProcessor正在抛出异常(第22行)。这个类的代码是什么样子的?请尝试删除自定义处理器以测试是否存在此问题。然后,您可以检查消息是否最终出现在您的队列中。此外,您可能/可能不想根据需要更改异常处理程序以捕获Throwable。即:

<onException>
<exception>java.lang.Throwable</exception>
<handled><constant>true</constant></handled>
<to uri="activemq:int.sendmail" />
</onException>

此外,如果您刚刚开始测试的上下文,您可能需要使用模拟端点

<onException>
<exception>java.lang.Throwable</exception>
<handled><constant>true</constant></handled>
<to uri="mock:error" />
</onException>

最新更新