Catch Exception Strategy in Mule

Catch Exception Strategy in Mule

You can define a catch exception strategy to customize the way Mule handles messages with errors. A catch exception strategy catches all exceptions thrown within its parent flow and processes them, thereby overriding Mule’s implicit default exception strategy.

Mule’s catch exception strategy behavior is similar to a Java catch block, except that you cannot throw a new exception or catch another exception within a catch exception strategy.

When to Use :

Use a catch exception strategy to design a unique strategy for handling a message that contains an error. Further, you can use a catch exception strategy to:

Avoid propagating exceptions to inbound connectors

Avoid propagating exceptions to parent flows via Flow Reference Components

Ensure that a transaction processed by the flow is not rolled back when an error occurs (that is, the transaction is never “rolled back” to reattempt processing; Mule commits the transaction.)

flow of catch exception strategy

If exception occurs than catch exception strategy catches the exception set the status code by property file and display user defined message by set payload.

property transformer view :

URL : http://localhost:8085/api/catch
Method : POST

Input : 

Here i have sent wrong json input so exception will occur and handled by catch exception strategy.

Output :

XML project code :

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:json="" xmlns:http="" xmlns="" xmlns:doc=""
    <http:listener-config name="HTTP_Listener_Configuration" host="" port="8085" basePath="/api" doc:name="HTTP Listener Configuration"/>
    <flow name="test_catchexceptionFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/catch" doc:name="HTTP"/>
        <json:json-to-xml-transformer doc:name="JSON to XML"/>
        <set-payload value="#[payload]" doc:name="Set Payload"/>
        <catch-exception-strategy doc:name="Catch Exception Strategy">
            <set-property propertyName="http.status" value="400" doc:name="Property"/>
            <set-payload value="Input is not correct" doc:name="Set Payload"/>