我必须为数组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
    }
}

09-30 10:50