如何使用Apache Camel从zip文件中提取文件(一个或多个)?有可能吗?
我正在尝试这个
from("file:/home/myinputzip?noop=true&delay=5000&moveFailed=error")
.split(new ZipSplitter())
.streaming().convertBodyTo(String.class)
.to("file:/home/myinputzip")
.end();
当我启动应用程序时,文件是从zip中提取的,但是camel会抛出异常并将文件移动到错误文件夹:
错误:org.apache.camel.processor.DefaultErrorHandler - 失败 交付(MessageId:ID-ubuntu-35217-1377806407437-0-5 on ExchangeId:ID-ubuntu-35217-1377806407437-0-7)。筋疲力尽 交货尝试:1抓住: org.apache.camel.component.file.GenericFileOperationFailedException: 无法将null body写入文件: /home/myinputzip/aVIII_crrpfp201304.cap org.apache.camel.component.file.GenericFileOperationFailedException: 无法将null body写入文件: /home/myinputzip/aVIII_crrpfp201304.cap at org.apache.camel.component.file.FileOperations.storeFile(FileOperations.java:194) 在 org.apache.camel.component.file.GenericFileProducer.writeFile(GenericFileProducer.java:257) 在 org.apache.camel.component.file.GenericFileProducer.processExchange(GenericFileProducer.java:159) 在 org.apache.camel.component.file.GenericFileProducer.process(GenericFileProducer.java:80) 在 org.apache.camel.util.AsyncProcessorConverterHelper $ ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) 在 org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) 在 org.apache.camel.processor.SendProcessor $ 2.doInAsyncProducer(SendProcessor.java:122) 在 org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:298) 在 org.apache.camel.processor.SendProcessor.process(SendProcessor.java:117)
任何人都可以帮助我吗?
答案 0 :(得分:4)
我解决了如下
from("file:/home/myinputzip?noop=true&delay=5000&moveFailed=error")
.split(new ZipSplitter())
.streaming().convertBodyTo(String.class)
.choice()
.when(body().isNotNull())
.to("file:/home/myinputzip")
.end()
.end();
答案 1 :(得分:0)
我同意你的路线应该有用,但是,你尝试过这样的事情:
from("file:/home/myinputzip?noop=true&delay=5000&moveFailed=error")
.unmarshal().zip()
.split(body(Iterable.class))
.streaming().convertBodyTo(String.class)
.to("file:/home/myinputzip")
.end();
我从http://camel.465427.n5.nabble.com/zip-file-best-practices-td5713437.html
中提取了这个例子我希望这适合你!