I think we fixed an issue in Camel 2.12.0 which could be related to this.
Can you give it a try? Camel 2.12.0 was released one day ago...

Best,
Christian
-----------------

Software Integration Specialist

Apache Camel committer: https://camel.apache.org/team
V.P. Apache Camel: https://www.apache.org/foundation/
Apache Member: https://www.apache.org/foundation/members.html

https://www.linkedin.com/pub/christian-mueller/11/551/642


On Thu, Sep 5, 2013 at 7:34 PM, bocamel <johnz...@gmail.com> wrote:

> I ran into a similar problem.  My use case is slightly different and I am
> using Camel 2.11.1 and JDK 1.7.  But the result is that Camel cannot delete
> the file from the input folder and keeps processing it indefinitely.
>
> I have two routes.  The first route reads in XML files from a directory
> then
> puts them on SEDA. The second route retrieves the files from SEDA and sends
> them to a web services (CXF).
>
>       <camel:route id="CustomerXmlFileIn" >
>          <camel:from uri="file:/xmlInput" />
>          <camel:to uri="seda:processCustomerInput" />
>       </camel:route>
>
> and
>
>       <camel:route id="ProcessCustomerMessage"
> errorHandlerRef="DeadLetterErrorHandler">
>          <camel:from uri="seda:processCustomerInput" />
>          <camel:to uri="cxf:bean:webSvcEndpoint" />
>                  <camel:onException>
>
> <camel:exception>java.lang.Exception</camel:exception>
>
> <camel:handled><camel:constant>true</camel:constant></camel:handled>
>                                 <camel:log message="*** Error occurred
> processing file
> ${headers.CamelFileName}. ***" />
>                                 <camel:log
> message="${property.CamelExceptionCaught}" />
>                  </camel:onException>
>       </camel:route>
>
> Everything works fine until a non-XML file (bad.xml) is thrown into the
> xmlInput folder.  The CXF endpoint throws the following exception.  When
> this happens, route1 cannot delete the bad.xml file from the xmlInput.
> Camel keeps picking it up and the same error repeats indefinitely.
>
> org.apache.camel.InvalidPayloadException: No body available of type:
> org.apache.camel.component.cxf.CxfPayload but has value:
> GenericFile[M:\bad.xml] of type:
> org.apache.camel.component.file.GenericFile
> on: null. Caused by: Error during type conversion from type:
> org.apache.camel.component.file.GenericFile to the required type:
> org.apache.camel.component.cxf.CxfPayload with value
> GenericFile[M:\bad.xml]
> due org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 2; Content
> is not allowed in prolog.. Exchange[null]. Caused by:
> [org.apache.camel.TypeConversionException - Error during type conversion
> from type: org.apache.camel.component.file.GenericFile to the required
> type:
> org.apache.camel.component.cxf.CxfPayload with value
> GenericFile[M:\bad.xml]
> due org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 2; Content
> is not allowed in prolog.]
>
> It is followed by the file deletion error:
>
> 2013-09-05 13:01:53,469 [ssCustomerInput] WARN  GenericFileOnCompletion
> - Caused by:
> [org.apache.camel.component.file.GenericFileOperationFailedException -
> Error
> renaming file from M:\bad.xml to M:\.camel\bad.xml]
> org.apache.camel.component.file.GenericFileOperationFailedException: Error
> renaming file from M:\bad.xml to M:\.camel\bad.xml
>         at
>
> org.apache.camel.component.file.FileOperations.renameFile(FileOperations.java:72)
>         at
>
> org.apache.camel.component.file.strategy.GenericFileProcessStrategySupport.renameFile(GenericFileProcessStrategySupport.java:113)
>         at
>
> org.apache.camel.component.file.strategy.GenericFileRenameProcessStrategy.commit(GenericFileRenameProcessStrategy.java:88)
>         at
>
> org.apache.camel.component.file.GenericFileOnCompletion.processStrategyCommit(GenericFileOnCompletion.java:144)
>         at
>
> org.apache.camel.component.file.GenericFileOnCompletion.onCompletion(GenericFileOnCompletion.java:82)
>         at
>
> org.apache.camel.component.file.GenericFileOnCompletion.onComplete(GenericFileOnCompletion.java:53)
>         at
>
> org.apache.camel.util.UnitOfWorkHelper.doneSynchronizations(UnitOfWorkHelper.java:55)
>         at
> org.apache.camel.impl.DefaultUnitOfWork.done(DefaultUnitOfWork.java:226)
>         at
>
> org.apache.camel.processor.UnitOfWorkProcessor.doneUow(UnitOfWorkProcessor.java:199)
>         at
>
> org.apache.camel.processor.UnitOfWorkProcessor.access$000(UnitOfWorkProcessor.java:37)
>         at
>
> org.apache.camel.processor.UnitOfWorkProcessor$1.done(UnitOfWorkProcessor.java:157)
>         at
>
> org.apache.camel.processor.RouteContextProcessor$1.done(RouteContextProcessor.java:56)
>         at org.apache.camel.processor.Pipeline.process(Pipeline.java:106)
>         at
>
> org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:46)
>         at
>
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
>         at
>
> org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:150)
>         at
>
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:117)
>         at
>
> org.apache.camel.processor.RouteInflightRepositoryProcessor.processNext(RouteInflightRepositoryProcessor.java:48)
>         at
>
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
>         at
>
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
>         at
>
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
>         at
>
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
>         at
>
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
>         at
>
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
>         at
>
> org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:294)
>         at
> org.apache.camel.component.seda.SedaConsumer.doRun(SedaConsumer.java:203)
>         at
> org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:150)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown
> Source)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
> Source)
>         at java.lang.Thread.run(Unknown Source)
> Caused by: java.io.IOException: Renaming file from: M:\bad.xml to:
> M:\.camel\bad.xml failed due cannot delete from file: M:\bad.xml after copy
> succeeded
>         at org.apache.camel.util.FileUtil.renameFile(FileUtil.java:397)
>         at
>
> org.apache.camel.component.file.FileOperations.renameFile(FileOperations.java:70)
>         ... 29 more
>
> I can avoid this problem by first converting the body to String in route1
> before sending it to SEDA.  But if this is something can be fixed once for
> all in Camel/CXF, it will make Camel more robust.
>
> Thanks!
>
>
>
> --
> View this message in context:
> http://camel.465427.n5.nabble.com/File-renaming-problems-under-Windows-tp5719484p5738801.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>

Reply via email to