我正在尝试处理一个zip文件,该文件内部包含多个文件(所有文件都很小,因此在内存中工作不是问题),需要再次转换并压缩在一起。
我设法解压缩,转换文件,但是由于某种原因,拆分器未完成,仅使用completionTimeout
使得聚合器创建了最终的zip存档。
这是路线:
<route id="ZipFile">
<from uri="file:{{file.path.in}}?move=.done&moveFailed=.error&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>
任何想法可能是什么问题?
答案 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();