2014-03-05 80 views
1

我有一個包含約200個對象的json對象列表。我想將該列表拆分爲更小的列表,其中每個列表每個列表最多包含20個對象。我想將每個子列表發佈到基於HTTP的端點。Mule - 將一個大的JSON列表拆分爲多個較小的JSON列表

<flow name="send-to-next-step" doc:name="send-to-vm-flow"> 
    <vm:inbound-endpoint exchange-pattern="one-way" 
     path="send-to-next-step-vm" doc:name="VM" /> 
    <!-- received the JSON List payload with 200 objects--> 
    <!-- TODO do processing here to split the list into sub-lists and call sub-flow for each sub-list 
    <flow-ref name="send-to-aggregator-sf" doc:name="Flow Reference" /> 
</flow> 

一種可能的方式是,我寫一個Java組件,其在所述列表並遍歷每20個對象迭代之後,呼叫子流。有沒有更好的方法來完成這個?

回答

3

你可以使用Groovy的collate方法配料,然後foreachcollection-splitter,根據您的需要:

<json:json-to-object-transformer returnClass="java.util.List"/> 
<set-payload value="#[groovy:payload.collate(20)]"/> 
<foreach> 
    <json:object-to-json-transformer/> 
    <http:outbound-endpoint exchange-pattern="request-response" host="0.0.0.0" port="8082" path="xx"/> 
</foreach> 
<set-payload value="#[groovy:payload.flatten()]"/> 

這20個對象的每批發送到HTTP端點,然後壓平回原始列表。