When splitting inside another split, the custom aggregationStrategy is not used. --------------------------------------------------------------------------------
Key: CAMEL-3677 URL: https://issues.apache.org/jira/browse/CAMEL-3677 Project: Camel Issue Type: Bug Components: camel-core Affects Versions: 2.5.0 Environment: Mac OS X 10.6.6, Eclipse Helios Reporter: Oliver Jelinski Priority: Minor When splitting inside another split, the custom aggregationStrategy is not used. For example in the route: {code:xml} <route id="DoubleSplitRoute"> <from uri="direct:in" /> <setBody> <constant> <a> <b> <c>Hello</c> <c>World</c> </b> <b> <c>Hello</c> <c>again</c> </b> </a> </constant> </setBody> <split> <xpath>a/b</xpath> <split strategyRef="concatWithSpaceStrategy"> <xpath>b/c/text()</xpath> <setBody><simple>${bodyAs(java.lang.String)}</simple></setBody> <log message="Got a part: ${body}"/> </split> <log message="Got a result: ${body}"/> </split> </route> {code} (where the {{concatWithSpaceStrategy}} does nothing more than to concat the bodies with a space inbetween.) The expected results would be: {code} Got a result: Hello World {code} and {code} Got a result: Hello again {code} But that is not what happens. The actual results are two times the same: {code} Got a result: <a> <b> <c>Hello</c> <c>World</c> </b> <b> <c>Hello</c> <c>again</c> </b> </a> {code} The reason is, that the strategy is not used. In the class {{org.apache.camel.processor.MulticastProcessor}}, in the method {{protected AggregationStrategy getAggregationStrategy(Exchange exchange)}}, the first step is to find an aggregationStrategy in the Exchange. This is set to {{UseOriginalAggregationStrategy}}, and because it is not null, this aggregation strategy will be used, not the one declared for the splitter. --- A workaround would be to remove the AggregationStrategy of the Exchange, before it is aggregated, by using a processor with the following process method: {code:java} public void process(Exchange exchange) throws Exception { if (exchange != null) { exchange.removeProperty(Exchange.AGGREGATION_STRATEGY); } } {code} After integrating this in my route, I got the desired results. -- This message is automatically generated by JIRA. - For more information on JIRA, see: http://www.atlassian.com/software/jira