2016-11-16 3 views
1

Ich muss einen Service für jedes Element eines Array B. aber Array A ist innerhalb Array A. So versuche ich Split innerhalb Split wie unten in verwenden camel_Context.xml. Sobald der Wert für alle inneren Split-Arrays ausgeführt wurde, muss ich sie ebenfalls aggregieren.Wie CamelSplitIndex von äußeren Split in inneren Split in Apache Camel zu verwenden

Der Index, den ich im inneren Split verwendet habe, sollte die aktuelle Iteration des äußeren Split sagen. CamelSplitIndex gibt Ihnen die Iterationsnummer des inneren Split. Ich bin nicht sicher, wie man einen expliziten Zähler in der äußeren Aufteilung verwendet. Gibt es einen anderen Weg, um mein Ziel zu erreichen?

Antwort

2

können Sie einen benutzerdefinierten Header gesetzt

<split> 
    <jsonpath>$.Request.Fruits</jsonpath> 
    <setHeader headerName="OuterIndex"> 
     <simple>${header.CamelSplitIndex}</simple> 
    </setHeader> 
    <split strategyRef="aggregatorBean"> 
     <jsonpath>$.request.Fruits[index].item</jsonpath> 
     <setHeader headerName="InnerIndex"> 
      <simple>${header.CamelSplitIndex}</simple> 
     </setHeader> 
     <to someURI> 
     <log message="Hello from inner ${header.InnerIndex} of outer ${header.OuterIndex}" /> 
    </split> 
</split> 

Sie eine Bohne als AggregationStrategy zu Gesamtergebnisse können Sie Ihre Logik (Splitter pattern page für weitere Details). In einer solchen Strategie können Sie bei Bedarf beide Header lesen.

daran, dass jedes <split> automatisch über das Array iterieren wird, ähnlich wie Java for verbessert, so vorstellen, um die Strecke zu tun etwa wie folgt:

// <split> is very much like 
for (Fruit f : request.getFruits()) { 
    // outer loop 
    for (Item i : f.getItems() { 
     // inner loop, <to someURI> is located here 
    } 
} 
+0

Danke zu aggregieren . aber die Eingabe in den inneren Split kommt als Klasse java.util.LinkedHashMap. Gibt es eine Möglichkeit, LikedHashMap in einer Route (wie jsonpath) zu analysieren – Jay

+0

Ich würde entweder in ein POJO http://camel.apache.org/json.html transformieren oder einen Prozessor https://camel.apache.org/processor verwenden .html, hängt davon ab, was die Route eigentlich macht. –

1

Eigentlich, wenn Sie spalten Sie einzelne Einträge Ihrer Splitmatrix erhalten als der Körper im Inneren des gespaltenen Teils und so sollten Sie in der Lage sein, es wie unten zu verwenden und wie @Alessandro erwähnt können Sie eine Aggregationsstrategie verwenden, um die Split-Einträge how-to-implement-the-splitter-and-aggregator-patterns-with-apache-camel

<split> 
    <jsonpath>$.Request.Fruits</jsonpath> 
    <split strategyRef="aggregatorBean"> 
     <jsonpath>$.item</jsonpath> <!-- your body here itself is a Fruit--> 
     <to someURI> 
    </split> 
</split> 
+0

Vielen Dank sagar .. es hat mir geholfen, besser zu verstehen .. nur eine Sache ist, da es ein JSON-Daten ist, ist die Ausgabe der äußeren Splitter im Format LinkEdHashMap. Ich muss eine Bean verwenden, um es wieder in JSON zu konvertieren. – Jay