我有以下json输出:
{
"results": [
{
"ID": "1",
"ImageID": "2",
"Name": "Test1",
"Owner": "sysadmin",
"Author": "sysadmin",
"Creator": "sysadmin"
},
{
"ID": "2",
"ImageID": "23",
"Name": "Test2",
"Owner": "sysadmin",
"Author": "sysadmin",
"Creator": "sysadmin"
}
]
}
对于上述响应中的每个ID,我需要调用传递ID的其余服务作为参数,其余服务将向我发送回响应。我必须将所有输出合并到一个output子中的单个json响应中。 我已经尝试过使用每种浓缩器,但无法构建它。下面是我正在使用的代码。
<foreach doc:name="For Each Loop">
<logger level="INFO" message="#[payload]" doc:name="Logger" category="INFO"/>
<json:json-to-object-transformer doc:name="JSON to Object"/>
<enricher doc:name="Message Enricher">
<http:request config-ref="SAM" path="/abc/#[payload.ID]" method="GET" doc:name="HTTP"/>
<enrich target="#[flowVars.ID]" source="#[payload[0].ID]"/>
</enricher>
<logger level="INFO" message="#[flowVars.ID]" doc:name="Logger" />
<expression-component doc:name="Expression"><![CDATA[payload.ID = flowVars.ID; ]]></expression-component>
</foreach>
请帮助我解决此问题!
谢谢
答案 0 :(得分:0)
您需要在for-each循环之前初始化一个空数组,并将其添加到for-each中的该数组:
<set-variable variableName="idList" value="#[[]]" doc:name="Variable - Init idList"/>
<foreach doc:name="For Each Loop">
<logger level="INFO" message="#[payload]" doc:name="Logger" category="INFO"/>
<json:json-to-object-transformer doc:name="JSON to Object"/>
<enricher doc:name="Message Enricher">
<http:request config-ref="SAM" path="/abc/#[payload.ID]" method="GET" doc:name="HTTP"/>
<enrich target="#[flowVars.ID]" source="#[payload[0].ID]"/>
</enricher>
<logger level="INFO" message="#[flowVars.ID]" doc:name="Logger" />
<expression-component doc:name="Expression"><![CDATA[flowVars.idList.add(flowVars.ID);]]></expression-component>
</foreach>
我在this video中介绍了此主题。
答案 1 :(得分:0)
谢谢珍妮!
我通过执行以下操作使其工作:
<set-variable variableName="outputList" value="#[new java.util.ArrayList()]" doc:name="SetEmptyArray"/>
<foreach collection="json:packshots" doc:name="ForEachDocument">
<set-variable variableName="docName" value="#[json:Name]" doc:name="docName"/>
<http:request config-ref="AH_DAM_API_Configuration" path="${ah.dam.api.get.renditions.path}#[json:Name]" method="GET" doc:name="InvokeAHDamService"/>
<set-payload value="#[xpath3('//*:service/*:document',payload,'NODE')]" doc:name="fetchRenditionInfo"/>
<expression-transformer expression="#[flowVars.outputList.add(payload)]" doc:name="AppendResponseToArray"/>
</foreach>
答案 2 :(得分:0)
我从saveedOutput中使用了数组变量。