Apache Camel解压缩,处理和聚合未完成

时间:2019-05-03 19:19:31

标签: apache-camel

我正在尝试处理一个zip文件,该文件内部包含多个文件(所有文件都很小,因此在内存中工作不是问题),需要再次转换并压缩在一起。

我设法解压缩,转换文件,但是由于某种原因,拆分器未完成,仅使用completionTimeout使得聚合器创建了最终的zip存档。

这是路线:

<route id="ZipFile">
    <from uri="file:{{file.path.in}}?move=.done&amp;moveFailed=.error&amp;readLock=rename"/>

    <setProperty propertyName="OriginalZipName">
        <simple>${header.CamelFileName}</simple>
    </setProperty>

    <unmarshal>
        <zipFile usingIterator="true"/>
    </unmarshal>

    <split streaming="true">
        <simple>${body}</simple>

        <log message="************ CamelSplitComplete = ${property.CamelSplitComplete}"/>

        <to uri="direct:ProcessUnzippedFile"/>

        <setHeader headerName="CamelFileName">
            <simple>${property.OriginalZipName}</simple>
        </setHeader>

        <!-- Aggregate to zip -->
        <aggregate strategyRef="zipAggregationStrategy" eagerCheckCompletion="true">
            <correlationExpression>
                <constant>true</constant>
            </correlationExpression>
            <completionPredicate>
                <simple>${property.CamelSplitComplete}</simple>
            </completionPredicate>
            <setHeader headerName="CamelFileName">
                <simple>${property.OriginalZipName}</simple>
            </setHeader>
            <to uri="file://{{file.path.out}}"/>
        </aggregate>
    </split>

</route>

任何想法可能是什么问题?

1 个答案:

答案 0 :(得分:2)

Camel Splitter提供了一个内置的聚合器,这使其更容易 将拆分邮件聚合回单个传出邮件

您必须在拆分定义中定义聚合策略

<split strategyRef="zipAggregationStrategy">

还没有在XML中尝试过,但是在Java DSL中,这是我的例子之一。

  .unmarshal(zipFile)
                .split(bodyAs(Iterator.class),new ZipAggregationStrategy(true,true))
                .streaming()
                .stopOnException()
                .to("direct:transform-ticket")
                .end();