Complex Choice flow in Mule

Complex Choice flow in Mule

Content-based routing is used to examine messages and route them to the correct channel or destination depending on a message's content. We use content-based routing when we want to route messages to the right destination.

Choice Flow Control
In Mule, the choice flow control is used to achieve content-based routing where routing will be done based on the message content, like inbound properties, flow variables, and payload. A choice router will always choose only one route. If no route matches, then the default route is used. In a choice router, we use the MEL expression to specify the path for the message.

The choice flow control adds conditional programming to a flow; it is similar to an if/else code block in Java.

Here we are using choice flow control in mule 3 in Anypoint studio 6.2

Here we are routing payload based on 3 parameters id,name and address

Below is the screenshot of choice router conditions :

HTTP Listener Configuration :

path : /testchoice

Below is the flow of choice flow control

URL : http://localhost:8085/api/testchoice
method : POST

 input : 

output :

XML project code :

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:tracking="" xmlns:json="" xmlns:http="" xmlns="" xmlns:doc=""
    <http:listener-config name="HTTP_Listener_Configuration" host="" port="8085" doc:name="HTTP Listener Configuration" basePath="/api"/>
    <flow name="test_choiceFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/testchoice" doc:name="HTTP" allowedMethods="POST"/>
        <byte-array-to-string-transformer doc:name="Byte Array to String"/>
        <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>
        <logger message="#[ == 1]" level="INFO" doc:name="Logger"/>
        <logger message="#[ == '1' &amp;&amp; == 'Himanshu']" level="INFO" doc:name="Logger"/>
        <choice doc:name="Choice">
         <when expression="#[ == '1' &amp;&amp; == 'Himanshu' &amp;&amp; payload.address == 'indore']">
                <set-payload doc:name="1 and Himanshu and indore" value="1 and Himanshu and indore"/>
          <when expression="#[ == '1' &amp;&amp; == 'Himanshu']">
                <set-payload value="1 and Himanshu" doc:name="1 and Himanshu"/>
            <when expression="#[ == '1']">
                <set-payload value="1" doc:name="1"/>
            <when expression="#[ == null &amp;&amp; != null]">
                <set-payload doc:name="id is null and name is not null" value="id is null and name is not null"/>
            <when expression="#[payload.isEmpty()]">
                <set-payload value="payload is empty" doc:name="payload is empty"/>
                <set-payload value="in default" doc:name="Default"/>