在Apache Camel Spring DSL中使用ZipSplitter

3
我想知道如何在Spring DSL中使用camel-zipfile的ZipSplitter。我已经尝试了不同的方法,基于这篇文章Unzip a file using Apache Camel UnZippedMessageProcessor,但是我无法弄清楚如何在Spring中实现。同时,我也没有找到任何相关的例子。
我的代码大致如下:
<bean id="zipSplitter" class="org.apache.camel.dataformat.zipfile.ZipSplitter" />

...

<split streaming="true" parallelProcessing="true">
    <?????>
    <convertBodyTo type="java.lang.String" />
    <to uri="file:foo" />
</split>

感谢您的帮助!
2个回答

5

您可以使用 &符号 来保存表达式的引用,就像这样:

<bean id="zipSplitter" class="org.apache.camel.dataformat.zipfile.ZipSplitter" />

...

<split streaming="true" parallelProcessing="true">
    <ref>zipSplitter</ref> 
    <convertBodyTo type="java.lang.String" />
    <to uri="file:foo" />
</split>

0

使用Camel 2.13.0,使用parallelProcessing="true"并解压包含10个约为10Kb大小的xml文件的.zip文件时,会抛出一些异常:

Caused by: java.util.zip.ZipException: invalid distance too far back at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:164) ~[na:1.7.0_55] at java.util.zip.ZipInputStream.read(ZipInputStream.java:193) ~[na:1.7.0_55] at java.io.BufferedInputStream.read1(BufferedInputStream.java:273) ~[na:1.7.0_55] at java.io.BufferedInputStream.read(BufferedInputStream.java:334) ~[na:1.7.0_55] at java.io.FilterInputStream.read(FilterInputStream.java:107) ~[na:1.7.0_55] at org.apache.camel.component.file.FileOperations.writeFileByStream(FileOperations.java:375) ~[camel-core-2.13.0.jar:2.13.0]

重试后:

由java.io.IOException引起:流已关闭 在java.util.zip.ZipInputStream.ensureOpen(ZipInputStream.java:66)~ [na:1.7.0_55] 在java.util.zip.ZipInputStream.read(ZipInputStream.java:181)~ [na:1.7.0_55] 在java.io.BufferedInputStream.read1(BufferedInputStream.java:273)~ [na:1.7.0_55] 在java.io.BufferedInputStream.read(BufferedInputStream.java:334)~ [na:1.7.0_55] 在java.io.FilterInputStream.read(FilterInputStream.java:107) ~[na:1.7.0_55] 在org.apache.camel.component.file.FileOperations.writeFileByStream(FileOperations.java:375) ~[camel-core-2.13.0.jar:2.13.0]

我找到了一种解决方法,即删除parallelProcessing =“true”属性:

<route id="ConsumeZipFiles">
    <from uri="file:src/test/resources/input/zip?noop=true&amp;delay=30000" />
    <split streaming="true">
        <ref>zipSplitter</ref> 
        <to uri="file:target/output" />
    </split>
</route>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接