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="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:json="http://www.mulesoft.org/schema/mule/json" 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.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://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">
    <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" 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="#[payload.id == 1]" level="INFO" doc:name="Logger"/>
        <logger message="#[payload.id == '1' &amp;&amp; payload.name == 'Himanshu']" level="INFO" doc:name="Logger"/>
        <choice doc:name="Choice">
         <when expression="#[payload.id == '1' &amp;&amp; payload.name == 'Himanshu' &amp;&amp; payload.address == 'indore']">
                <set-payload doc:name="1 and Himanshu and indore" value="1 and Himanshu and indore"/>
            </when>
          <when expression="#[payload.id == '1' &amp;&amp; payload.name == 'Himanshu']">
                <set-payload value="1 and Himanshu" doc:name="1 and Himanshu"/>
            </when>
            <when expression="#[payload.id == '1']">
                <set-payload value="1" doc:name="1"/>
            </when>
         
            <when expression="#[payload.id == null &amp;&amp; payload.name != null]">
                <set-payload doc:name="id is null and name is not null" value="id is null and name is not null"/>
            </when>
            <when expression="#[payload.isEmpty()]">
                <set-payload value="payload is empty" doc:name="payload is empty"/>
            </when>
       
            <otherwise>
                <set-payload value="in default" doc:name="Default"/>
            </otherwise>
        </choice>
    </flow>
</mule>