我正在使用 Mule 3.4,并且我有一个 Mule 流,它通过有效负载中的行项目,将每个行项目单独传递到 Web 服务,并为每个行项目返回 JSON 响应。
我想知道的是,Mule 中是否有办法将这些响应聚合到一个大型 JSON 对象中,并将其作为响应返回。
谢谢,
胡安
我正在使用 Mule 3.4,并且我有一个 Mule 流,它通过有效负载中的行项目,将每个行项目单独传递到 Web 服务,并为每个行项目返回 JSON 响应。
我想知道的是,Mule 中是否有办法将这些响应聚合到一个大型 JSON 对象中,并将其作为响应返回。
谢谢,
胡安
虽然 Ryan 的每种方法都可以工作(我认为没有多少好的选择),但如果对 1000 个行项目中的行项目的第二个 Web 服务调用由于任何原因引发异常,您最好弄清楚您希望如何处理错误。 .
请参阅 Ryan Carter 的其他答案来解决这个问题:如何在 Mule foreach 范围内捕获异常但保持流程继续进行?
在我的用例中,我的有效负载是一个字符串列表,其中每个字符串都是代表一个订单的 json。我使用了一个自定义的 java 转换器(不允许在表达式转换器中使用 groovy)并且只是这样制作了我的 json。不是最好的解决方案,但似乎是害处较轻的。
Groovy 类似于(根本没有测试):
#[groovy: '{"orders":[' + payload.join(', ') + ']}']
对于每个项目,如果您将 json 转换为地图,例如使用<json:json-to-object-transformer returnClass="java.util.HashMap" />
这应该为您提供一组地图。然后在你的 foreach/loop 之外,将映射列表转换回 json,它应该给你一个 json 数组,使用: <json:object-to-json-transformer />
例如:
<foreach>
<!--call service - returns {"id" : "1"} then {"id" : "2"} etc.-->
<json:json-to-object-transformer returnClass="java.util.HashMap" />`
</foreach>
<json:object-to-json-transformer />
<!-- should output [{"id" : "1"}, {"id" : "2"}] -->