Apache Camel:从其部分设置父交换的属性(拆分)

时间:2013-09-23 09:51:01

标签: apache-camel

我为交换创建了一个拆分器,它解压缩文件并在没有行的情况下拆分它(使用Unix命令'split')。将包含这些部分的消息列表作为消息返回。

然后在这些属性上设置一些属性,因为它们需要独立处理。此外,在完成这些部分之后,需要处理父交换。现在,我需要在父级上设置一些属性设置。但我能想到的唯一方法就是重写setProperty部分。有没有办法可以在没有冗余的情况下实现这一目标。

我确实以另一种方式尝试,即在父级上设置属性并尝试在子级上访问它们也不起作用。

for (String feed: pc.parseUri("{{feedSources}}").split(",")) {
        from("{{"+feed +".source}}").routeId(feed)
        .setProperty("workDirectory", simple("{{workDirectory}}"))
        .setProperty("feedName", simple(feed))
        .setProperty("tableName", simple("{{"+feed+".tableName}}"))
        .setProperty("options", simple("{{"+feed+".options}}"))
        .split(beanExpression(new FileSplitter(), "split"))
        .setProperty("dateFormat", simple("{{" + feed + ".dateFormat}}"))
        .setProperty("headerFormat", simple("{{" + feed + ".headerFormat}}"))
        .process(FileKeyProcessorFactory.getProcessor(feed))
        .to("{{"+feed+".destination}}")
        .end()
        .process(new RSProcessor());

还有一些属性需要设置。重写代码似乎不太好。还有什么可以选择。

2 个答案:

答案 0 :(得分:4)

使用Splitter上的AggregationStrategy将每个拆分消息的更改合并到父拆分器的外发消息中。

您可以在http://camel.apache.org/splitter以及支持AggregationStrategy的其他EIP上详细了解此信息。

答案 1 :(得分:0)

例如:

<beans xmlns="http://www.springframework.org/schema/beans">
  <bean id="groupExchangeAggregationStrategy" 
    class="org.apache.camel.processor.aggregate.GroupedExchangeAggregationStrategy"
  />
</beans>
<split strategyRef="groupExchangeAggregationStrategy">
  <xpath>//</xpath>
</split>