使用Apache Camel解压缩文件?

时间:2013-08-29 20:04:55

标签: file apache-camel unzip

如何使用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)

任何人都可以帮助我吗?

2 个答案:

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

中提取了这个例子

我希望这适合你!