For Each Loop
For each is used to perform similar set of activities on same payload of a collection. For each will expect collection as input payload and it will iterate over the collection
Point to remember
- If it’s a Java collection then it will split the payload by default
- Changes done to a payload within iteration will not change anything in the input payload
- For each work in sequential only. So if there is any error processing any record then it will not process the further records and break the look immediately
- To overcome this problem we can have try and catch block with on error cont. to keep on processing further records in case of any error
- Order will be maintained while processing
Create mule application which will accept the JSON collection as payload
{
"Employees": [
{
"userId": "rirani",
"jobTitleName": "Developer",
"firstName": "Romin",
"lastName": "Irani",
"preferredFullName": "Romin Irani",
"employeeCode": "E1",
"region": "CA",
"phoneNumber": "408-1234567",
"emailAddress": "[email protected]"
},
{
"userId": "nirani",
"jobTitleName": "Developer",
"firstName": "Neil",
"lastName": "Irani",
"preferredFullName": "Neil Irani",
"employeeCode": "E2",
"region": "CA",
"phoneNumber": "408-1111111",
"emailAddress": "[email protected]"
},
{
"userId": "thanks",
"jobTitleName": "Program Directory",
"firstName": "Tom",
"lastName": "Hanks",
"preferredFullName": "Tom Hanks",
"employeeCode": "E3",
"region": "CA",
"phoneNumber": "408-2222222",
"emailAddress": "[email protected]"
}
]
}
Add a logger which will print the received payload

Now add For Each activity

Where following parameters are passed
- Collection – input payload which should be of type collection
- Counter variable – counter which will hold the value of current loop
- Batch Size – we can break the payload in our desired size in case we want to process more than 1 record in each loop
- Root Message – will hold the actual input payload
In our case – payload.Employees will hold the collection
Add logger to print each payload

Run the application to see the results
First logger – will print the actual input payload
INFO 2020-04-13 12:29:20,306 [[MuleRuntime].cpuLight.15: [for-each-sample].for-each-sampleFlow.CPU_LITE @4b51d624] [event: 4c7bad41-7d54-11ea-8bca-9aaf65ed66d8] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: received payload {
"Employees": [
{
"userId": "rirani",
"jobTitleName": "Developer",
"firstName": "Romin",
"lastName": "Irani",
"preferredFullName": "Romin Irani",
"employeeCode": "E1",
"region": "CA",
"phoneNumber": "408-1234567",
"emailAddress": "[email protected]"
},
{
"userId": "nirani",
"jobTitleName": "Developer",
"firstName": "Neil",
"lastName": "Irani",
"preferredFullName": "Neil Irani",
"employeeCode": "E2",
"region": "CA",
"phoneNumber": "408-1111111",
"emailAddress": "[email protected]"
},
{
"userId": "thanks",
"jobTitleName": "Program Directory",
"firstName": "Tom",
"lastName": "Hanks",
"preferredFullName": "Tom Hanks",
"employeeCode": "E3",
"region": "CA",
"phoneNumber": "408-2222222",
"emailAddress": "[email protected]"
}
]
}
For Each Logger
First iteration
INFO 2020-04-13 12:29:20,316 [[MuleRuntime].cpuLight.15: [for-each-sample].for-each-sampleFlow.CPU_LITE @4b51d624] [event: 4c7bad41-7d54-11ea-8bca-9aaf65ed66d8] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: within for each {
"userId": "rirani",
"jobTitleName": "Developer",
"firstName": "Romin",
"lastName": "Irani",
"preferredFullName": "Romin Irani",
"employeeCode": "E1",
"region": "CA",
"phoneNumber": "408-1234567",
"emailAddress": "[email protected]"
}
Second iteration
INFO 2020-04-13 12:29:20,318 [[MuleRuntime].cpuLight.15: [for-each-sample].for-each-sampleFlow.CPU_LITE @4b51d624] [event: 4c7bad41-7d54-11ea-8bca-9aaf65ed66d8] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: within for each {
"userId": "nirani",
"jobTitleName": "Developer",
"firstName": "Neil",
"lastName": "Irani",
"preferredFullName": "Neil Irani",
"employeeCode": "E2",
"region": "CA",
"phoneNumber": "408-1111111",
"emailAddress": "[email protected]"
}
Third iteration
INFO 2020-04-13 12:29:20,319 [[MuleRuntime].cpuLight.15: [for-each-sample].for-each-sampleFlow.CPU_LITE @4b51d624] [event: 4c7bad41-7d54-11ea-8bca-9aaf65ed66d8] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: within for each {
"userId": "thanks",
"jobTitleName": "Program Directory",
"firstName": "Tom",
"lastName": "Hanks",
"preferredFullName": "Tom Hanks",
"employeeCode": "E3",
"region": "CA",
"phoneNumber": "408-2222222",
"emailAddress": "[email protected]"
}
Sample application – for-each-sample
Sample SOAP UI application – For-Each-Sample-soapui-project
so can we see the output for foreach on postman by using setpayload?