2014-01-08 3 views
1

이 절을 사용하여 내 프로젝트에서 발생하는 모든 예외를 catch하여 동작을 사용자 정의합니다.onexception 절이 테스트 케이스에서 작동하지 않습니다 - Camel

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

오류 발생시 모든 경로에서 java.lang.Exception 만 발생한다는 점을 고려하십시오. URI에 "upload.toFtp"가 나던 존재하는 연결을 설정하는 시험에서

<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> 

때문에 예외가 발생 :

예외를 발생 경로이있다. 테스트는 컨텍스트를 시작하고 "activemq : int.sendmail"큐에 메시지가 삽입 될 때까지 대기합니다.

퓨즈에 프로젝트를 설치하면 <onException>이 제대로 작동하지만 예외 유형을 throw하는 테스트 사례를 실행할 때 <onException>이 작동하지 않습니다.

예외가 발생했을 때의 테스트 사례를 보여주는 로그입니다. (2796-1-86 : ExchangeId에 2796-1-86의 MessageID) -

오류 org.apache.camel.processor.DefaultErrorHandler는 대한 배달 을하지 못했습니다. au.com.inte에 파일 이름을 업로드하는 중 오류가 발생했습니다. org.apache.camel.util.AsyncProcessorHelper.process에서 org.apache.camel.util.AsyncProcessorConverterHelper $ ProcessorToAsyncProcessorBridge.process (AsyncProcessorConverterHelper.java:61) 에서 .processor.ValidateExceptionProcessor.process (ValidateExceptionProcessor.java:22) (AsyncProcessorHelper.java:73) at org.apache.camel.processor.DelegateAsyncProcessor.processNext (DelegateAsyncProcessor.java:99) at org.apache.camel.processor에서 0 org.apache.camel.processor.DelegateAsyncProcessor.process org.apache.camel.util.AsyncProcessorHelper.process (AsyncProcessorHelper.java:73)에서 (DelegateAsyncProcessor.java:90) org.apache.camel.processor.interceptor.TraceInterceptor.process에서 .DelegateAsyncProcessor.processNext org.apache.camel.processor.DelegateAsyncProcessor.process (DelegateAsyncProcessor.java:90)에서 (DelegateAsyncProcessor.java:99) (TraceInterceptor .java : 91) at org.apache.camel.util.AsyncProcessorHelper.process (AsyncProcessorHelper.java:73) at org.apache.camel.processor.DelegateAsyncProcessor.processNext (De org.apache.camel.fabric.FabricTraceProcessor.process (FabricTraceProcessor.java:81에서 org.apache.camel.processor.DelegateAsyncProcessor.process (DelegateAsyncProcessor.java:90) ) 에서의 legateAsyncProcessor.java:99) org.apache.camel.processor에서 org.apache.camel.util.AsyncProcessorHelper.process org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler (RedeliveryErrorHandler.java:334)에서 (AsyncProcessorHelper.java:73) .RedeliveryErrorHandler.process (RedeliveryErrorHandler.java:220) at org.apache.camel.processor.RouteContextProcessor.processNext (RouteContextProcessor.자바 45) org.apache.camel.processor.DelegateAsyncProcessor.process (DelegateAsyncProcessor.java:90) 에서 org.apache.camel.processor.interceptor.DefaultChannel.process (DefaultChannel.java:303 AT)에서 org.apache.camel.util.AsyncProcessorHelper.process (AsyncProcessorHelper.java:73) 에서 org.apache.camel.processor.Pipeline.process (Pipeline.java:117)에서 org.apache.camel.processor.Pipeline .process (Pipeline.java:80) at org.apache.camel.processor.RouteContextProcessor.processNext (RouteContextProcessor.java:45) at org.apache.camel.processor.DelegateAsyncProcessor.process (DelegateAsyncProcessor.java:90) 에서 org.apache.camel.processor에서 org.apache.camel.processor.UnitOfWorkProcessor.processAsync org.apache.camel.processor.UnitOfWorkProcessor.process (UnitOfWorkProcessor.java:117)에서 (UnitOfWorkProcessor.java:150) org.apache.camel.util.AsyncProcessorHelper.process에서 .RouteInflightRepositoryProcessor.processNext org.apache.camel.processor.DelegateAsyncProcessor.process (DelegateAsyncProcessor.java:90)에서 (RouteInflightRepositoryProcessor.java:48) (AsyncProcessorHelper.java : 73) at org.apache.camel.processor.DelegateAsyncProcessor.processNext (DelegateAsyncProcessor.java:99) at org.apache.camel. org.apache.camel.component.file.GenericFileConsumer.processExchange에서 processor.DelegateAsyncProcessor.process org.apache.camel.management.InstrumentationProcessor.process (InstrumentationProcessor.java:73)에서 (DelegateAsyncProcessor.java:90) ( org.apache.camel.component.file.GenericFileConsumer.poll에서 org.apache.camel.component.file.GenericFileConsumer.processBatch (GenericFileConsumer.java:189) (GenericFileConsumer.java에서 GenericFileConsumer.java:336) : 155) at org.apache.camel.impl.ScheduledPollConsumer.doRun (ScheduledPollConsumer.java:142) at org.apache.camel.impl.ScheduledPollConsumer.run (ScheduledPollC onsumer.java:92) java.util.concurrent.FutureTask $ Sync.innerRunAndReset (FutureTask.java:351) 에서 java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:471) 에서 에서 java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask에서 java.util.concurrent.FutureTask.runAndReset java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access에서 (FutureTask.java:178) $ 301 (ScheduledThreadPoolExecutor.java:178) .run (ScheduledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) at java.util.concurre (Thread.java:722) 2014-01-08 11:44:20 WARN org.apache.camel.component. file.GenericFileOnCompletion - 롤백 파일 방법 : GenericFile [/tmp/test/work/feedsToUpload/140107034802854_2_.xml.gz]

: 파일에 대한 org.apache [email protected]2336bff7

문제를 찾을 수 있도록 도와 주시겠습니까?
고마워요.

+0

을 사용해야 할 수 있습니다 –

답변

1

사용자 정의 au.com.inte.processor.ValidateExceptionProcessor가 예외를 발생시키고 있습니다 (22 행). 이 클래스의 코드는 어떻게 생겼을 까? 이것이 문제인지 테스트하려면 사용자 정의 프로세서를 제거하십시오. 그런 다음 메시지가 대기열에서 끝나는 지 확인할 수 있습니다. 또한 필요에 따라 예외 핸들러를 변경하여 Throwable을 catch 할 수도 있습니다. 즉 : 당신이 당신의 시험에 대한 컨텍스트를 시작하는 경우도

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

, 당신은 당신이 테스트 케이스의 코드와 설정을 공유 할 필요가 mock endpoint

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