Thanks to the help of Claus, I have discovered that I can use my own
aggregation strategy to collect all files into an Exchange containing a
collection of Exchanges. Here is my route building:
public class RouteBuilder extends org.apache.camel.builder.RouteBuilder {
public void configure() {
from(
"file://target/classes/timetables?noop=true&consumer.recursive=true")
.aggregator(new
CollectAllAggregationStrategy()).constant(true)
.process(new Processor() {
public void process(Exchange e) {
System.out.println("Received exchange: "
+ e.getIn().getBody());
}
});
}
}
...and here is my aggregation strategy:
(CollectAllAggregationStrategy.java)
public class CollectAllAggregationStrategy implements AggregationStrategy {
@SuppressWarnings("unchecked")
public Exchange aggregate(Exchange arg0, Exchange arg1) {
// If our previous exchange holds a collection of Exchanges
then we
// simply add to that collection. Otherwise we create a new
Exchange
// containing a collection of exchanges and use this for future
// aggregations (and of course add to it presently).
Collection collection;
Object body = arg0.getIn().getBody();
if (body instanceof Collection) {
collection = (Collection) body;
} else {
collection = new Vector();
collection.add(arg0);
Exchange newExchange = new
DefaultExchange(arg0.getContext());
Message in = new DefaultMessage();
in.setBody(collection);
newExchange.setIn(in);
arg0 = newExchange;
}
collection.add(arg1);
return arg0;
}
}
All exchanges appear to be bundled together given the use of the constant
expression.
I hope that others find this use of aggregation useful.
Kind regards,
Christopher
--
View this message in context:
http://www.nabble.com/How-to-use-Aggregator-and-AggregationCollection--tp19739918s22882p19856197.html
Sent from the Camel - Users mailing list archive at Nabble.com.