我正在使用Mule 3.4,并且我有一个Mule流,它遍历有效负载中的行项目,将每个行项目单独传递给Web服务,并为每个行项目返回JSON响应。
我想知道的是,如果Mule中有一种方法可以将这些响应聚合到一个大型JSON对象中,并将其作为响应返回。
谢谢,
涓
答案 0 :(得分:2)
虽然每个方法的Ryan都可以使用(在我看来并不是很多好的选项),但如果第二个Web服务调用1000个订单项中的订单项,则最好弄清楚如何处理错误出于某种原因的例外...
请咨询Ryan Carter的其他答案:How to catch exceptions in the Mule foreach scope but keep the process going?
在我的用例中,我的有效负载是一个字符串列表,其中每个字符串都是表示订单的json。我选择了一个自定义的java变换器(不允许在表达式转换器中使用groovy)并且只是这样制作了我的json。不是最好的解决方案,但似乎是邪恶的较小。
Groovy会像(根本没有测试过):
#[groovy: '{"orders":[' + payload.join(', ') + ']}']
答案 1 :(得分:1)
对于每个项目,如果您使用<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"}] -->