Hi Yes it depends what smooks does, but you can change the message body from a file / input stream and read it into memory as a string and then give that to smooks. Then smooks dont have anything to worry about closing file handles / resources
So try add before the processor .convertBodyTo(String.class) On Mon, Mar 7, 2022 at 10:40 AM Reto Peter <reto.pe...@advanceit.ch> wrote: > > Hi Claus > > Thanks for the fast answer! > Well, this is the smooks processor, not my custom processor. > Does that mean, the Camel file component does give the file access to the > next component and not just the file content? > Sorry, I am a Camel beginner. > > Regards Reto > > -----Original Message----- > From: Claus Ibsen <claus.ib...@gmail.com> > Sent: Monday, March 7, 2022 4:41 PM > To: users@camel.apache.org > Subject: Re: Camel fails to rename/delete the source file > > Hi > > That is because you do something in the custom processor that locks the file. > You need to make sure you close the file / input stream etc that you may be > doing. > > On Mon, Mar 7, 2022 at 9:14 AM Reto Peter <reto.pe...@advanceit.ch> wrote: > > > > I am trying to convert an EDIFACT file into an XML file. > > > > The conversion is done with smooks. The conversion works fine. The target > > file is successfully converted and also written to the disk. > > > > The problem arises after when Camel try to move the file to the .camel > > subdir. > > > > The source file is copied to the subdir, but the original file cannot be > > deleted. > > > > > > > > Environment: Windows 10, Java 11, Camel 3.15, Smooks 2.0.0RC1, running > > in eclipse > > > > If I omit the line with “.process(processor)”, the file can be > > moved/deleted. But with executing the smooks step it always gives me > > error messages, (attached at the end of this post) > > > > > > > > Following code shows the main program: > > > > public static void main(String[] args) throws Exception { > > > > CamelContext context = new DefaultCamelContext(); > > > > context.addRoutes(new RouteBuilder() { > > > > > > > > @Override > > > > public void configure() throws Exception { > > > > > > > > Smooks smooks = new Smooks(); > > > > smooks.setReaderConfig(new > > EdifactReaderConfigurator("/d01b/EDIFACT-Messages.dfdl.xsd")); > > > > smooks.setExports(new > > Exports(StringResult.class)); > > > > SmooksProcessor processor = new > > SmooksProcessor(smooks, context); > > > > > > > > > > from("file://C:/data/MediaMarkt/ORDERS/in?delay=1000") > > > > .process(processor) > > > > > > .to("file://C:/data/MediaMarkt/ORDERS/out/?fileName=${file:name}.xml") > > ; > > > > } > > > > > > > > }); > > > > context.start(); > > > > Thread.sleep(20000); > > > > context.close(); > > > > > > > > } > > > > > > > > Error message: > > > > [ main] Scanner WARN Not > > scanning classpath for ClassLoader > > 'jdk.internal.loader.ClassLoaders$AppClassLoader'. ClassLoader must > > implement 'java.net.URLClassLoader'. > > > > [ main] Scanner WARN Not > > scanning classpath for ClassLoader > > 'jdk.internal.loader.ClassLoaders$AppClassLoader'. ClassLoader must > > implement 'java.net.URLClassLoader'. > > > > [ main] SmooksProcessor WARN > > Attachments module could not be found: attachments will not be propagated > > > > [ main] SmooksProcessor INFO > > SmooksProcessor [configUri=null] Started > > > > [ main] SmooksProcessor WARN > > Attachments module could not be found: attachments will not be propagated > > > > [ main] SmooksProcessor INFO > > SmooksProcessor [configUri=null] Started > > > > [ main] SmooksProcessor WARN > > Attachments module could not be found: attachments will not be propagated > > > > [ main] SmooksProcessor INFO > > SmooksProcessor [configUri=null] Started > > > > [ main] SmooksProcessor WARN > > Attachments module could not be found: attachments will not be propagated > > > > [ main] SmooksProcessor INFO > > SmooksProcessor [configUri=null] Started > > > > [ main] SmooksProcessor WARN > > Attachments module could not be found: attachments will not be propagated > > > > [ main] SmooksProcessor INFO > > SmooksProcessor [configUri=null] Started > > > > [ main] AbstractCamelContext INFO > > Routes startup (total:1 started:1) > > > > [ main] AbstractCamelContext INFO > > Started route1 (file://C:/data/MediaMarkt/ORDERS/in) > > > > [ main] AbstractCamelContext INFO > > Apache Camel 3.15.0 (camel-1) started in 193ms (build:36ms init:136ms > > start:21ms) > > > > CamelContext status: Started > > > > [//C:/data/MediaMarkt/ORDERS/in] DataProcessorFactory INFO > > Compiling and caching DFDL schema... > > > > [//C:/data/MediaMarkt/ORDERS/in] GenericFileOnCompletion WARN Error > > during commit. Exchange[0C5E19CEB8FC187-0000000000000000]. Caused by: > > [org.apache.camel.component.file.GenericFileOperationFailedException - > > Error renaming file from C:\data\MediaMarkt\ORDERS\in\ORDERS > > 000397700717-000397700717.2802b732-98b2-11ec-99b2-8e02ac1b4884.edi to > > C:\data\MediaMarkt\ORDERS\in\.camel\ORDERS > > 000397700717-000397700717.2802b732-98b2-11ec-99b2-8e02ac1b4884.edi] > > > > org.apache.camel.component.file.GenericFileOperationFailedException: > > Error renaming file from C:\data\MediaMarkt\ORDERS\in\ORDERS > > 000397700717-000397700717.2802b732-98b2-11ec-99b2-8e02ac1b4884.edi to > > C:\data\MediaMarkt\ORDERS\in\.camel\ORDERS > > 000397700717-000397700717.2802b732-98b2-11ec-99b2-8e02ac1b4884.edi > > > > at > > org.apache.camel.component.file.FileOperations.renameFile(FileOperatio > > ns.java:93) ~[camel-file-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.component.file.strategy.GenericFileProcessStrategySup > > port.renameFile(GenericFileProcessStrategySupport.java:145) > > ~[camel-file-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.component.file.strategy.GenericFileRenameProcessStrat > > egy.commit(GenericFileRenameProcessStrategy.java:121) > > ~[camel-file-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.component.file.GenericFileOnCompletion.processStrateg > > yCommit(GenericFileOnCompletion.java:134) > > [camel-file-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.component.file.GenericFileOnCompletion.onCompletion(G > > enericFileOnCompletion.java:86) [camel-file-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.component.file.GenericFileOnCompletion.onComplete(Gen > > ericFileOnCompletion.java:60) [camel-file-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.support.UnitOfWorkHelper.doneSynchronization(UnitOfWo > > rkHelper.java:104) [camel-support-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.support.UnitOfWorkHelper.doneSynchronizations(UnitOfW > > orkHelper.java:93) [camel-support-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.impl.engine.DefaultUnitOfWork.done(DefaultUnitOfWork. > > java:238) [camel-base-engine-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.support.UnitOfWorkHelper.doneUow(UnitOfWorkHelper.jav > > a:61) [camel-support-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.impl.engine.CamelInternalProcessor$UnitOfWorkProcesso > > rAdvice.after(CamelInternalProcessor.java:778) > > [camel-base-engine-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.impl.engine.CamelInternalProcessor$UnitOfWorkProcesso > > rAdvice.after(CamelInternalProcessor.java:713) > > [camel-base-engine-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.impl.engine.CamelInternalProcessor$AsyncAfterTask.don > > e(CamelInternalProcessor.java:264) > > [camel-base-engine-3.15.0.jar:3.15.0] > > > > at org.apache.camel.AsyncCallback.run(AsyncCallback.java:44) > > [camel-api-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(D > > efaultReactiveExecutor.java:187) [camel-base-engine-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(Defa > > ultReactiveExecutor.java:64) [camel-base-engine-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.processor.Pipeline.process(Pipeline.java:184) > > [camel-core-processor-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInter > > nalProcessor.java:399) [camel-base-engine-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.component.file.GenericFileConsumer.processExchange(Ge > > nericFileConsumer.java:492) [camel-file-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.component.file.GenericFileConsumer.processBatch(Gener > > icFileConsumer.java:245) [camel-file-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileCo > > nsumer.java:206) [camel-file-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.support.ScheduledPollConsumer.doRun(ScheduledPollCons > > umer.java:202) [camel-support-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.support.ScheduledPollConsumer.run(ScheduledPollConsum > > er.java:116) [camel-support-3.15.0.jar:3.15.0] > > > > at > > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515 > > ) [?:?] > > > > at > > java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) [?:?] > > > > at > > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.r > > un(ScheduledThreadPoolExecutor.java:305) [?:?] > > > > at > > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.j > > ava:1130) [?:?] > > > > at > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor. > > java:630) [?:?] > > > > at java.lang.Thread.run(Thread.java:832) [?:?] > > > > Caused by: java.io.IOException: Renaming file from > > 'C:\data\MediaMarkt\ORDERS\in\ORDERS > > 000397700717-000397700717.2802b732-98b2-11ec-99b2-8e02ac1b4884.edi' to > > 'C:\data\MediaMarkt\ORDERS\in\.camel\ORDERS > > 000397700717-000397700717.2802b732-98b2-11ec-99b2-8e02ac1b4884.edi' > > failed: Cannot delete file 'C:\data\MediaMarkt\ORDERS\in\ORDERS > > 000397700717-000397700717.2802b732-98b2-11ec-99b2-8e02ac1b4884.edi' > > after copy succeeded > > > > at > > org.apache.camel.util.FileUtil.renameFileUsingCopy(FileUtil.java:464) > > ~[camel-util-3.15.0.jar:3.15.0] > > > > at org.apache.camel.util.FileUtil.renameFile(FileUtil.java:436) > > ~[camel-util-3.15.0.jar:3.15.0] > > > > at > > org.apache.camel.component.file.FileOperations.renameFile(FileOperatio > > ns.java:90) ~[camel-file-3.15.0.jar:3.15.0] > > > > ... 28 more > > > > > > > > -- > Claus Ibsen > ----------------- > http://davsclaus.com @davsclaus > Camel in Action 2: https://www.manning.com/ibsen2 -- Claus Ibsen ----------------- http://davsclaus.com @davsclaus Camel in Action 2: https://www.manning.com/ibsen2