Apache Camel - Dividir y agregar - Old Exchange siempre es nulo

Veo que esta pregunta se ha formulado varias veces, pero ninguna de las publicaciones ayudó o tuvo una solución concluyente. Estoy dividiendo un mensaje y luego agregándolo usando Aggregator2. El código estaba lanzando una excepción porque oldExchange siempre era nulo. Así que para probar diseñé un pequeño código.

Leí una orden, archivo xml que se ve así

<Orders xmlns="http://some/schema/Order">
    <Order>
            <orderNum>1</orderNum>
    </Order>
    <Order>
            <orderNum>2</orderNum>
    </Order>
    <Order>
            <orderNum>3</orderNum>
    </Order>
    <Order>
            <orderNum>5</orderNum>
    </Order>
    <Order>
            <orderNum>6</orderNum>
    </Order>

Mi contexto camello se parece a esto

<camel:route>
<camel:from uri="file:src/data/catask/test?noop=true"/>
<camel:log message="${body}"></camel:log>
<camel:split>
<camel:xpath>//te:Orders/*</camel:xpath>
<camel:to uri="direct:logQueries"/>
<camel:to uri="direct:aggegateQueries"/>  
</camel:split>

</camel:route>

<camel:route>
<camel:from uri="direct:logQueries"/>
<camel:log message="After the call : \n ${body}"></camel:log>  
</camel:route>

 <camel:route>
<camel:from uri="direct:aggegateQueries"/>
<camel:aggregate strategyRef="aggrTask" completionInterval="8000" >
<camel:correlationExpression>
<camel:xpath>//te:Order</camel:xpath>
</camel:correlationExpression>
<camel:to uri="file:src/data/catask/output?fileName=output.xml"/>  

</camel:aggregate>
</camel:route>  

Mi clase de estrategia de agregación se ve así

   public Exchange aggregate(Exchange oldExchange, Exchange newExchange) { 
            if (oldExchange == null) { 
            System.out.println("Returning new exchange"); 
                return newExchange; 
            } 

            String oldBody = oldExchange.getIn().getBody(String.class); 
            String newBody = newExchange.getIn().getBody(String.class); 
            oldExchange.getIn().setBody(oldBody + "+" + newBody); 
            return oldExchange; 
        } 

El problema es que cuando el resultado agregado se guarda en el archivo output.xml, contiene solo el último registro que leyó de Orders.xml.

es decir

<Order xmlns="http://some/schema/Order">
            <orderNum>6</orderNum>
    </Order>

Lo examiné más a fondo y descubrí que esto estaba ocurriendo porque después de la primera llamada oldExchange debería tener algún valor, pero resulta que siempre es nulo. Creo que porque está leyendo todo de un solo archivo y dividiéndolo, solo hay intercambio.

> ¿Alguna sugerencia?

ACTUALIZACIÓN 1: Per Claus puedo usar Splitter solo para resolver este problema. Hice eso y pude unirme exitosamente a todos los mensajes. Sin embargo, todavía estoy buscando una forma de usar Aggregator2. Aquí cómo lo hice usando Splitter solamente.

camel:route>
<camel:from uri="file:src/data/catask/test?noop=true"/>
<camel:log message="${body}"></camel:log>
<camel:split strategyRef="aggrTask"> 
<camel:xpath>//te:Orders/*</camel:xpath>
<camel:to uri="direct:logQueries"/>
 < 
</camel:split>

</camel:route>

<camel:route>
<camel:from uri="direct:logQueries"/>
<camel:log message="After the call : \n ${body}"></camel:log>  
</camel:route>

Respuestas a la pregunta(1)

Su respuesta a la pregunta