This example app will show the difference between Foreach and splitter in Mule version 3.x. Collection splitter splits the incoming collection object and then you have to put a aggregator to collect the resultant objects. For each scope is a scope which does not change the payload and you get the same collection object once for each loop completes.
<?xml version="1.0" encoding="UTF-8"?> <mule xmlns:vm="http://www.mulesoft.org/schema/mule/vm" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd"> <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/> <flow name="foreachtestFlow"> <http:listener config-ref="HTTP_Listener_Configuration" path="/test" allowedMethods="GET" doc:name="HTTP"/> <component class="foreachexample.CollectionPayloadComponent" doc:name="Java"/> <!-- <foreach doc:name="For Each"> <choice doc:name="Choice"> <when expression="#[payload == 'foreach']"> <set-session-variable value="foreachVar" variableName="test" doc:name="Session Variable"></set-session-variable> </when> <otherwise> <set-session-variable value="BBQVar" variableName="test" doc:name="Session Variable"></set-session-variable> </otherwise> </choice> <flow-ref name="flow3" doc:name="Flow Reference"/> </foreach> --> <collection-splitter /> <logger message="payload is : #[payload]" level="ERROR"/> <choice> <when expression="#[payload == 'foreach']"> <set-session-variable value="foreachVar" variableName="test"></set-session-variable> </when> <otherwise> <set-session-variable value="BBQVar" variableName="test"></set-session-variable> </otherwise> </choice> <flow-ref name="flow3" /> <set-payload value="dsadasd"/> </flow> <flow name="flow2"> <vm:inbound-endpoint path="foreach" doc:name="VM"/> <logger message=" session var value is #[sessionVars.test] and payload is #[payload]" level="ERROR" doc:name="Logger"/> </flow> <flow name="flow3"> <vm:outbound-endpoint path="foreach" doc:name="VM"/> </flow> </mule>Post your comments and suggestions.