Установка размера завершения или предиката для неизвестного количества разделенных элементов в маршруте Camel - PullRequest
0 голосов
/ 12 июня 2018

У меня есть верблюжий маршрут, который использует http-сервис, который возвращает json с несколькими элементами, которые мне нужны для корреляции через Id.Я не знаю, сколько элементов с одинаковым Id приходит в ответ, поэтому, Как я могу установить завершение в агрегации, чтобы сопоставить их все?

Это мои маршруты:

 from("direct:getInfo")
      .id("getInfo")
      .setHeader("accept", constant("application/json"))
      .setHeader("authorization", constant("xyz"))
      .setHeader("Cache-Control", constant("no-cache"))
      .setHeader("content-Type", constant("application/json"))
      .setHeader(Exchange.HTTP_METHOD, constant("GET"))
      .removeHeader(Exchange.HTTP_PATH)
      .removeHeader("CamelHttp*")
      .setBody(simple("${null}"))
      .streamCaching()
      .to("http4:someURL") //responses an array of n json elements
      .split().jsonpath("$").streaming()
      .to("direct:splitInfo");


 from("direct:splitInfo")
      .id("splitInfo")
      .aggregate(jsonpath("CustomerId"), new ArrayListAggregationStrategy())
      .completionSize(???) //How must I set the completion in order to correlate all items
      .to("direct:process");

Большое спасибо.

1 Ответ

0 голосов
/ 13 июня 2018

Полная перезапись ответа в соответствии с примером в комментариях

Поскольку вы хотите разделить и повторно объединить полные полезные нагрузки JSON, вам нужен только EIP Splitter сстратегия агрегирования .

Если вы предоставляете разделителю выражение для разделения полезной нагрузки, а также стратегию агрегирования, вам вообще не нужны критерии завершения.Каждая полезная нагрузка JSON обрабатывается как «пакетная».

.from(endpoint)
// body = complete JSON payload
.split([split-expression], new MyAggregationStrategy())
    // each element is sent to this bean 
    .to("bean:elementProcessorBean")
    // you must end the splitter 
.end()  
// here you get the complete re-aggregated JSON payload
// how it is re-aggregated is up to MyAggregationStrategy 

В качестве примера рассмотрите связанную документацию по Splitter.

...