Apache Camel - Podział i agregacja - Stara Exchange jest zawsze pusta

Widzę, że to pytanie zostało zadane kilka razy, ale żaden z postów nie pomógł ani nie miał rozstrzygającego rozwiązania. Dzielę wiadomość, a następnie agreguję ją za pomocą Aggregatora2. Kod rzucał wyjątek, ponieważ oldExchange był zawsze zerowy. Aby przetestować, zaprojektowałem mały kod.

Czytam zamówienia, plik XML, który wygląda tak

<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>

Kontekst mojego wielbłąda Wygląda na to

<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>  

Moja klasa strategii agregacji wygląda tak

   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; 
        } 

Problem polega na tym, że gdy zagregowany wynik jest zapisywany w pliku output.xml, zawiera tylko ostatni rekord, który przeczytał z pliku Orders.xml.

to znaczy

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

Przejrzałem go dalej i stwierdziłem, że tak się dzieje, ponieważ po pierwszym wywołaniu oldExchange powinno mieć jakąś wartość, ale okazuje się, że zawsze ma wartość null. Myślę, że ponieważ czyta wszystko z jednego pliku i dzieli go, istnieje tylko wymiana.

> Jakieś sugestie?

AKTUALIZACJA 1: Na Clausa mogę użyć Splittera tylko w celu rozwiązania tego problemu. Zrobiłem to i udało mi się połączyć wszystkie wiadomości. Nadal jednak szukam sposobu na użycie Aggregatora2. Tutaj zrobiłem to tylko za pomocą Splittera.

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>

questionAnswers(1)

yourAnswerToTheQuestion