Hi

The OnException is handling exceptions as part of *routing* messages
in Camel routes.

There is a window in each consumer where exceptions can occur as well, that is
- before
- after
the Camel routing engine routes the message. If an exception occurs
before or after, then
its per consumer specific how they deal with exceptions.

Usually they will log the exception or something like that, as the
file/ftp consumer does.



On Mon, Jan 2, 2012 at 11:37 AM, tnk <jus...@gmail.com> wrote:
> Hello,
>
> I have route (camel 2.7.1):
>
> <route>
>  <from uri="sftp://user@host/folder?password=password&delete=true"; />
>  <onException>
>     <exception>java.lang.Exception</exception>
>     <log message="ERROR receiving file" loggingLevel="ERROR" />
>     <rollback/>
>  </onException>
>  <to uri="activemq:RECEIVED.FILES.QUEUE" />
> </route>
>
> If I don't have permissions to delete the remote file, the same file gets
> processed and is put to activemq queue over and over again (onException
> block doesn't make any sense, it should rollback message from queue). Using
> "idempotent=true" may be a workarround, but in my case I need process files
> with the same name after some time.
>
> Exception is logged in DEBUG level:
>
> 2012-01-02 12:15:48,281 | DEBUG |  | GenericFileOnCompletion          |
> ache.camel.processor.CamelLogger | 52 - org.apache.camel.camel-core -
> 2.7.1.fuse-00-43 | Caused by: [o
> rg.apache.camel.component.file.GenericFileOperationFailedException - Cannot
> delete file: /folder/file.xml]
> org.apache.camel.component.file.GenericFileOperationFailedException: Cannot
> delete file: /folder/file.xml
>        at
> org.apache.camel.component.file.remote.SftpOperations.deleteFile(SftpOperations.java:258)[115:org.apache.camel.camel-ftp:2.7.1.fuse-00-43]
>        at
> org.apache.camel.component.file.strategy.GenericFileDeleteProcessStrategy.commit(GenericFileDeleteProcessStrategy.java:63)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.component.file.GenericFileOnCompletion.processStrategyCommit(GenericFileOnCompletion.java:142)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.component.file.GenericFileOnCompletion.onCompletion(GenericFileOnCompletion.java:84)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.component.file.GenericFileOnCompletion.onComplete(GenericFileOnCompletion.java:53)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.util.UnitOfWorkHelper.doneSynchronizations(UnitOfWorkHelper.java:60)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.impl.DefaultUnitOfWork.done(DefaultUnitOfWork.java:198)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.processor.UnitOfWorkProcessor.doneUow(UnitOfWorkProcessor.java:156)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.processor.UnitOfWorkProcessor.access$000(UnitOfWorkProcessor.java:36)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.processor.UnitOfWorkProcessor$1.done(UnitOfWorkProcessor.java:109)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.processor.DefaultChannel$1.done(DefaultChannel.java:275)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:345)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:209)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:269)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:102)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:80)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:73)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:330)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:157)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:121)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:139)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:88)[52:org.apache.camel.camel-core:2.7.1.fuse-00-43]
>        at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)[:1.6.0_27-ea]
>        at
> java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)[:1.6.0_27-ea]
>        at
> java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)[:1.6.0_27-ea]
>        at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)[:1.6.0_27-ea]
>        at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180)[:1.6.0_27-ea]
>        at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204)[:1.6.0_27-ea]
>        at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)[:1.6.0_27-ea]
>        at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)[:1.6.0_27-ea]
>        at java.lang.Thread.run(Thread.java:662)[:1.6.0_27-ea]
> Caused by: 3: Permission denied
>        at
> com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2297)[117:org.apache.servicemix.bundles.jsch:0.1.44.1]
>        at
> com.jcraft.jsch.ChannelSftp.rm(ChannelSftp.java:1523)[117:org.apache.servicemix.bundles.jsch:0.1.44.1]
>        at
> org.apache.camel.component.file.remote.SftpOperations.deleteFile(SftpOperations.java:255)[115:org.apache.camel.camel-ftp:2.7.1.fuse-00-43]
>        ... 32 more
>
>
>
> How to catch such exceptions? Why <onException> block doesn't work?
>
> Thanks.
>
> --
> View this message in context: 
> http://camel.465427.n5.nabble.com/Camel-sftp-endpoint-and-exception-handling-tp5114385p5114385.html
> Sent from the Camel - Users mailing list archive at Nabble.com.



-- 
Claus Ibsen
-----------------
FuseSource
Email: cib...@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to