7

如何使用 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 中提取的,但是骆驼抛出异常并且文件被移动到错误文件夹:

错误: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:无法将空正文写入文件:/home/myinputzip/aVIII_crrpfp201304.cap org.apache.camel.component.file.GenericFileOperationFailedException:无法写入空正文到文件:/home/myinputzip/aVIII_crrpfp201304.cap at org.apache.camel.component.file.FileOperations.storeFile(FileOperations.java:194) at 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。

谁能帮我?

4

2 回答 2

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();
于 2013-08-30T20:22:49.880 回答
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举了这个例子

我希望这对你有用!

于 2013-08-30T14:56:32.053 回答