使用Apache Camel UnZippedMessageProcessor解压缩文件

时间:2013-07-24 16:09:17

标签: java apache apache-camel

尝试使用Apache Camel解压缩文件,我尝试了http://camel.apache.org/zip-file-dataformat.html中给出的示例,但我找不到 UnZippedMessageProcessor 类。这是代码:

import java.util.Iterator;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.dataformat.zipfile.ZipFileDataFormat;

public class TestRoute extends RouteBuilder {

@Override
public void configure() throws Exception {

    ZipFileDataFormat zipFile = new ZipFileDataFormat();
    zipFile.setUsingIterator(true);
    from("file:src/test/resources/org/apache/camel/dataformat/zipfile/")
            .unmarshal(zipFile).split(body(Iterator.class)).streaming()
            .process(new UnZippedMessageProcessor()).end();

}
}

有人试图这样做或者有另一种方法通过Camel路线解压缩文件吗?

提前谢谢!

2 个答案:

答案 0 :(得分:6)

您也可以像这样定义路线,您可以在camel-zipfile中找到 ZipSplitter

 from("file:src/test/resources/org/apache/camel/dataformat/zipfile?consumer.delay=1000&noop=true")
  .split(new ZipSplitter())
  .streaming().convertBodyTo(String.class).to("mock:processZipEntry")
  .end()

答案 1 :(得分:0)

如果文档不是那么稀疏的话,这将容易得多。首先,就像提到的其他人一样,文档假设您将编写自己的Processor实现。一个简单的看起来像这样:

public class ZipEntryProcessor implements Processor {

    @Override
    public void process(Exchange exchange) throws Exception {
        System.out.println(exchange.getIn().getBody().toString());
    }

}

如果调试process方法,您将看到输入消息的正文为ZipInputStreamWrapper类型,它扩展了Java类BufferedInputStream。这是有用的信息,因为它告诉您可能可以使用Camel的内置数据转换,而不必编写自己的处理器。

因此,您可以使用以下方式来压缩文件并将其所有条目提取到文件系统上的目录中:

from("file:src/test/resources/org/apache/camel/dataformat/zipfile/")
            .split(new ZipSplitter())
                .streaming()
                .to("file://C:/Temp/")
                .end();

这实际上很简单。另外,您还必须确保正确理解文件组件URI语法。那最让我震惊了。这是关于该主题的出色blog post