我正在尝试创建一个流,该流采用与之一起调用的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,但是我不确定在这种情况下是否适合,因为我事先不知道通话/中介结果的数量...