【问题标题】:Using ZipSplitter in Apache Camel Spring DSL在 Apache Camel Spring DSL 中使用 ZipSplitter
【发布时间】:2014-07-16 06:33:42
【问题描述】:

我想知道如何在 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>

感谢您的帮助!

【问题讨论】:

    标签: java spring zip apache-camel


    【解决方案1】:

    你可以像这样使用来保存表达式的引用

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

    【讨论】:

      【解决方案2】:

      使用 Camel 2.13.0,使用 parallelProcessing="true" 并解压缩包含 10 个 xml 文件的 .zip 文件,每个文件大约 10Kb,它会引发几个异常:

      原因:java.util.zip.ZipException:无效距离太远 在 java.util.zip.InflaterInputStream.read(InflaterInputStream.java:164) ~[na:1.7.0_55] 在 java.util.zip.ZipInputStream.read(ZipInputStream.java:193) ~[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]

      然后重试:

      原因: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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-05
        • 1970-01-01
        • 1970-01-01
        • 2020-08-30
        • 1970-01-01
        • 1970-01-01
        • 2017-07-25
        • 2017-02-19
        相关资源
        最近更新 更多