2013-09-23 45 views
3

我为交换器创建了一个拆分器,它解压缩文件并根据行数(使用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()); 

还有几个属性需要设置。重写代码似乎不太好。还有什么可能的选择。

回答

4

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

您可以在以下网址阅读更多内容:http://camel.apache.org/splitter以及其他支持AggregationStrategy的EIP。

+0

感谢克劳斯。它有帮助。 –

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>