Я пытаюсь создать поток, который принимает параметры URI, которые были вызваны, и использует их для вызова другого потока (количество вызовов другого потока зависит от количества параметров URI).
<flow name="get:/test-config">
<set-variable value="#[message.inboundProperties['http.query.params']]" variableName="params" doc:name="Variable"/>
<!-- Iterate over the keys to retrieve each params list -->
<foreach collection="#[flowVars['params'].keySet()]" doc:name="For Each">
<!-- Iterate over the params list for each key -->
<foreach collection="#[params.getAll(payload)]" doc:name="For Each">
<logger level="WARN" message="Parameter - key: #[rootMessage], value: #[payload]" doc:name="Logger"/>
<set-variable variableName=„Id“ value="#[payload]" doc:name="Variable"/>
<logger message="Id: #[payload]" level="INFO" doc:name="Logger"/>
<http:request config-ref="HTTP_REQUEST" path=„/test1/foo“ method="GET" doc:name="HTTP">
<http:request-builder>
<http:query-param paramName=„Id" value="#[flowVars.Id]"/>
</http:request-builder>
</http:request>
<dw:transform-message doc:name="Transform Message">
<dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
{
"Id" : flowVars.Id,
"color" : payload.*color
} ]]>
</dw:set-payload>
</dw:transform-message>
<logger message="#[payload]" level="INFO" doc:name="Logger"/>
</foreach>
</foreach>
</flow>
Поток, который вызывается через HTTP-запрос, доставляет данные в формате JSON:
"Id": "1",
"color": [
"blue",
"green"
]
"Id": "2",
"color": [
"yellow",
"blue"
]
"Id": "3"
...
"Id" : "4"
...
Я хотел бы отфильтровать и объединить эти выходные данные, чтобы общий результат выглядел следующим образом:
"Ids": [
"1",
"2"
]
"commonColor": [
"blue"
]
И в этот момент я немного застрял, так как количество объединяемых наборов данных варьируется, и я также не совсем знаю, как получить доступ и сравнить поля полезной нагрузки, чтобы найти элементы ссоответствие цветов, так как полезная нагрузка меняется с каждой итерацией.Одна идея, с которой я столкнулся, состояла в том, чтобы сохранить / добавить текущую полезную нагрузку в переменную, чтобы сохранить ее для дальнейшей обработки, но все примеры просто работали с 2 или максимум тремя полезными нагрузками, тогда как я столкнулся с произвольным количеством возможных полезных нагрузок (и положение / количество цветов также меняется ...).
Буду очень признателен за любые идеи / помощь по решению этой проблемы!
PS: Я также сталкивался с Scatter / Gather, но я не совсем уверен, подходит ли он в этом случае, так как я заранее не знаю количество вызовов / промежуточных результатов ...