0

我在主路线和子路线上有一个要求。在主路由中将获取对象列表,我需要为列表中的每个单独元素调用子路由。然后在子路由中,将通过将该元素附加为参数之一来调用 Web 服务。

代码:

from("direct:SupplierRoute")
                .choice()
                .when(header(IS_SUPPLIER_AVAILABLE).isEqualTo(true))
                .split(body())
                .parallelProcessing()
                .streaming()
                .to("direct:SUPGetHotelAggregatorRatesRQ")
                .bean(parallelProcessingRequestProcessor)
                .end()
                .end()
                .end();
 from("direct:SUPGetHotelAggregatorRatesRQ")
                .process(startOperation(DISTRIBUTION, GET_HOTEL_AGGREGATOR_RATES_API_GENERATE_VM_REQUEST))
                .to("velocity:velocity/GetHotelAggregatorRatesRQToGetHotelSupplierRatesRQ.vm")
                .process(endOperation(DISTRIBUTION, GET_HOTEL_AGGREGATOR_RATES_API_GENERATE_VM_REQUEST))
                .end();

我将值设置为交换体,如下所示,

 public static final List<HotelRefs.HotelRef> supplierHotelRefs = new ArrayList();
 exchange.getIn().setBody(supplierHotelRefs);

但是上面的代码示例不起作用,如果有人告诉我们骆驼中是否有任何方法可以在路由级别迭代用户定义的集合。

谢谢, 拉格万

4

1 回答 1

0

在 Splitter 之后放置一条日志语句并运行代码。

.split(body())
.log("How many log lines do you receive?")

如果您只得到一个日志行,则拆分器无法按预期工作。然后,您可以尝试使用另一个 Camel 版本。

如果您获得的日志行数与 ArrayList 包含的元素一样多,则迭代工作正常,但您遇到了另一个问题。然后你应该找出真正的问题并提出一个新问题。

如果您根本没有得到日志行,则说明您的条件when不满足。

于 2018-08-29T06:57:40.247 回答