我必须为数组B的每个元素调用服务。但是数组A在数组A内。因此,我尝试在camel_Context.xml中使用split内部split,如下所示。一旦所有内部拆分数组值执行完毕,我也需要对其进行汇总。
<split>
<jsonpath>$.Request.Fruits</jsonpath>
<split>
<jsonpath>$.request.Fruits[index].item</jsonpath>
<to someURI>
</split>
</split>
我在内部拆分中使用的索引应该表示外部拆分的当前迭代。 CamelSplitIndex将为您提供内部拆分的迭代次数。我不确定如何在外部拆分中使用任何显式计数器。还有其他方法可以实现我的目标吗?
最佳答案
您可以设置自定义标题
<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>
您可以使用bean作为AggregationStrategy来使用您的逻辑来汇总结果(有关更多详细信息,请参见Splitter pattern page)。在这种策略中,您可以根据需要读取两个标头。
请注意,每个
<split>
都会自动遍历您的数组,就像java增强的for
一样,因此可以想象路由大致如下:// <split> is very much like
for (Fruit f : request.getFruits()) {
// outer loop
for (Item i : f.getItems() {
// inner loop, <to someURI> is located here
}
}