Exception Filter in Mule





Exception Filter in Mule



The Exception Filter enables you to filter messages according to the type of an exception.

Prerequisites: You need a Catch Exception Strategy configured in your flow.

Minimum Configuration: The class that indicates the type of the exception.

An Exception Filter matches the type of exception you configure in the Expected Type field in the Global Element properties in Studio, or in the expectedType property in the Configuration XML.

The Exception Filter expects an exception; this means that you need to add it within a Catch Exception Strategy processor. The exception is passed to the next processor in the exception handler only if it matches the Exception Filter’s configured expectedType.

Use the Exception Filter to check whether your Catch Exception Strategy needs to handle an exception or not, based on the type of the exception. When the Exception Filter receives an exception that does not match its configured expectedType, it returns a null value, and the processing of that message stops.

Exception filter is used to filter an exception scenario.for example if payload is null then Null Pointer Exception will be raised.So to filter out these type of situation exception filter is used.


flow of exception filter :




In Error handling block we have used Catch exception Strategy and a filter reference is placed inside it.
When you go to filter reference go to + sign and choose exception filter.



When you choose exception filter from above list it will ask for Expected Type. Give the name of exception class like java.lang.RuntimeException or any suitable exception class.

In our example we are counting length of payload, so if it is null then Null Pointer exception will occur and control will not move forward because exception filter will not allow to move it forward.

URL : http://localhost:8085/api/expfilter

Input :


if payload is null



Output :

then status code will be 200 and output will be blank as control stops due to exception.



XML project code :


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

<mule xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw" xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata" 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/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.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" basePath="/api" doc:name="HTTP Listener Configuration"/>
    <exception-type-filter expectedType="java.lang.RuntimeException" name="Exception" doc:name="Exception"/>
 
    <flow name="test_exceptionfilterFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/expfilter" doc:name="HTTP"/>
        <dw:transform-message doc:name="Transform Message" metadata:id="60dce916-b336-412e-9783-3cadb0b81780">
            <dw:input-payload mimeType="application/java"/>
            <dw:set-payload><![CDATA[%dw 1.0
%output application/java
---
payload]]></dw:set-payload>
        </dw:transform-message>
        <logger message="#[payload]" level="INFO" doc:name="Logger"/>
        <choice doc:name="Choice">
            <when expression="#[payload==null]">
                <set-payload value="#[payload.toString().length()]" doc:name="Set Payload"/>
            </when>
            <otherwise>
                <set-payload value="#[payload]" doc:name="Set Payload"/>
            </otherwise>
        </choice>
        <catch-exception-strategy doc:name="Catch Exception Strategy">
            <filter ref="Exception" doc:name="Filter Reference"/>
        </catch-exception-strategy>
    </flow>
</mule>