2013-09-23 43 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>