Category Archives: Mulesoft Tutorial

Mule 3 Mulesoft Basics Mulesoft Tutorial

Externalizing Common Mule Flows

Published by:

Externalizing Common Mule Flows

In this tutorial we will be externalizing some common mule flows so they can be used by multiple Mule Applications
For Example – If I have a common exception handling which is same for all my other applications and I want to externalize this common exception handling code so that –
1. No one in the team can modify the common flows leading to code discrepancy.
2. Teams don’t have to copy same code again and again in my next API which they are going to build.
3. Also, This will also help my API code look more neat and clean.

Externalizing common mule flows can be achieved by exporting the flows to be externalized into a JAR file and then importing the JAR in other applications. Tells look on the details of how we can do this with just few steps.

1. Understanding the Flow

In the flow below we want to externalize sub flow – “externalizeMuleAPISub_Flow” which is been called by Flow reference in Get and Post  Flows  and exception handling – “externalizeMuleAPI-apiKitGlobalExceptionMapping”.

2. Creating new Mule project

We need to create a new mule project and dump the mule common flows that we want to externalize into it. And remove copied code from our previous project.

Here we have deleted and added the 2 flows from our old project into our new project.


3. Exporting the new project as JAR file.

Here are the steps to be followed to export the project as JAR.

Right Click on the Project in Package Explorer >> Click Export

In the Popup Window Select Java>Jar File and Click Next.

Select The project to be exported “externalflows” and add the path where the JAR is to be saved and Click Finish.


Now, we have create the project with common flows as Jar and export it to the specified location.

4. Importing the JAR file

Now after exporting JAR, we need to import it to our main project.

To Import the Jar -> go to Project Properties and Click “Add External Jars” and select the JAR File.

5. Adding the Common Flows

Now we need to add the mule XML file name that we have imported as JAR into our main project.

6. Running the Code

You might see few error been reported by Mule even after adding the mule XML filename. But do not worry on building the application all the error will go off.

Mule 4 Mulesoft Basics Mulesoft Tutorial

Variables in Mule 4

Published by:

Variable in Mule 4

In this Variable in Mule 4 tutorial we will look how we can create and use mule variable in Mule 4, and how it is different from Mule 3 and Mule 4.

In Mule 3 we had Flow variables, Session variables and record variable to store the data inside mule flow. But now in Mule 4 this has been changed; session variable and record variable has been removed and there is only Flow Variable.

As in Mule 3, Flow Variable in Mule 4 value is lost even when the flow crosses the transport barrier.
Session variable has been completely removed in Mule 4.

In Mule 4, flow variables have been enhanced to work efficiently during batch processing, just like the record variables. Flow variables created in batch steps are now automatically tied to the processing record and stays with it throughout the processing phase. No longer record variables are needed.
Continue reading

Mule 4 Mulesoft Basics Mulesoft Tutorial

Mule 4: JSON Schema Validation

Published by:

JSON Schema is a specification for JSON based format for defining the structure of JSON data. It validates input data at runtime and verifies that they match a referenced schema or not. We can match against defined schemas that exist in local file or in an external URI.

If the payload is incorrect with given JSON schema, then compiler throws below Exception:

org.mule.module.json.validation.JsonSchemaValidationException: Json content is not compliant with schema

Use Case:

Validating the input JSON payload against with JSON Schema.

JSON Payload:

  "firstName": "Murali",
  "lastName": "Krishna",
  "age" : 26

JSON – Schema :

  "$schema": "",
  "type": "object",
  "properties": {
    "firstName": {
      "type": "string"
    "lastName": {
      "type": "string"
    "age": {
      "type": "integer"
  "required": [

Mule Flow:

Step -1 :

Configure the HTTP Listener with by giving hostname, port number and path along with this specify allowed methods (Optional) at an Advanced tab of HTTP connector.


Drag and Drop the JSON Validate Schema from Mule Palette to validate the input payload. And provide the schema path. In my case it is like below:


From above line,

schemas –> It is directory

Sample-Schema.json —> It is JSON-Schema structure for validation.

Syntax of JSON Validator as below:

<json:validate-schema doc:name="Validate schema" doc:id="5a8b10e1-59e8-4f68-9aaa-303c9cb5c9d6" schema="schemas/Sample-Schema.json">


Drag & Drop the Logger component to log the resultant payload after validation.

Final Config.xml:

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

<mule xmlns:json="" xmlns:validation=""
  xmlns:http="" xmlns="" xmlns:doc="" xmlns:xsi="" xsi:schemaLocation="">
  <http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="8a601d72-5913-4ed7-99d3-707601301ec9" >
    <http:listener-connection host="" port="8080" />
  <flow name="abcFlow" doc:id="30917fd1-0429-4ec7-9d7d-aa8d4d19413e" >
    <http:listener doc:name="Listener" doc:id="2b89fed0-69ce-47eb-93bf-3bd0628fe188" config-ref="HTTP_Listener_config" path="abc" allowedMethods="POST">
      <ee:repeatable-file-store-stream />
    <json:validate-schema doc:name="Validate schema" doc:id="5a8b10e1-59e8-4f68-9aaa-303c9cb5c9d6" schema="schemas/Sample-Schema.json">
    <logger level="INFO" doc:name="Logger" doc:id="26b62866-2f25-4374-9d95-9fe14c052366" message="Payload is Validated ----&gt; #[message.payload]" />

Success Scenario:

Failed Scenario:

Thank you!

Please feel free to share your thoughts in the comments section.

Mule 4 Mulesoft Basics Mulesoft Tutorial

Mule – 4 DataWeave Functions – Part – 1

Published by:

In DataWeave 2.0 functions are categorized into different modules.

  1. Core (dw::Core)
  2. Arrays (dw::core::Arrays)
  3. Binaries (dw::core::Binaries)
  4. Encryption (dw::Crypto)
  5. Diff (dw::util::Diff)
  6. Objects (dw::core::Objects)
  7. Runtime (dw::Runtime)
  8. Strings (dw::core::Strings)
  9. System (dw::System)
  10. URL (dw::core::URL)

Functions defined in Core (dw::Core) module are imported automatically into your DataWeave scripts. To use other modules, we need to import them by adding the import directive to the head of DataWeave script, for example:

import dw::core::Strings

import dasherize, underscore from dw::core::Strings

import * from dw::core::Strings

Sample Payload:
"firstName" : "Murali",
"lastName" : "Krishna",
"age" : "26",
“age” : ”26”

1. Core (dw::Core)

Below are the DataWeave 2 core functions:

++ , –, abs, avg, ceil, contains, daysBetween, distinctBy, endsWith, filter, IsBlank, joinBy, min, max etc….

result : [0, 1, 2] ++ [“a”, “b”, “c”] will gives us “result” : “[0, 1, 2, “a”, “b”, “c”]”

result : [0, 1, 1, 2] — [1,2] will gives us “result” : “[0]”

result : abs(-20) will gives us “result” : 20

average : avg([1, 1000]) will gives us “average” : 500.5

value : ceil(1.5) will gives us “value” : 2

result : payload contains “Krish” will gives us “result” : true

days: daysBetween(“2016-10-01T23:57:59-03:00”, “2017-10-01T23:57:59-03:00”) will gives us “days”: 365

age : payload distinctBy $ will gives us  :


“firstName” : “Murali”,

“lastName” : “Krishna”,

“age” : ”26”


a: “Murali” endsWith “li” will gives us “a” : true

a: [1, 2, 3, 4, 5] filter($ > 2) will gives us “a” : [3,4,5]

empty: isBlank(“”) will gives us “empty” : true

aa: [“a”,”b”,”c”] joinBy “-” will gives us “a” : “a-b-c”

a: min([1, 1000]) will gives us “a” : 1

a: max([1, 1000]) will gives us “a” : 1000

2.Arrays (dw::core::Arrays)

Arrays related functions in DataWeave are :

countBy, divideBy, every, some, sumBy

[1, 2, 3] countBy (($ mod 2) == 0) will gives us 1

[1,2,3,4,5] dw::core::Arrays::divideBy 2 will gives us :















[1,2,3,4] dw::core::Arrays::every ($ == 1) will gives us “false”

[1,2,3,4] dw::core::Arrays::some ($ == 1) will gives us “true”

[ { a: 1 }, { a: 2 }, { a: 3 } ] sumBy $.a will gives us “6”

3.Binaries (dw::core::Binaries)

Binary functions in DataWeave-2 are:

fromBase64, fromHex, toBase64, toHex

toBase64(fromBase64(12463730)) will gives us “12463730”

{ “binary”: fromHex(‘4D756C65’)} will gives us “binary” : “Mule”

{ “hex” : toHex(‘Mule’) } will gives us “hex” : “4D756C65”

4.Encryption (dw::Crypto)

Encryption functions in Dataweave – 2 are:

HMACBinary, HMACWith, MD5, SHA1, hashWith

{ “HMAC”: Crypto::HMACBinary((“aa” as Binary), (“aa” as Binary)) } will gives us :

“HMAC”: “\u0007£š±]\u00adÛ\u0006‰\u0006Ôsv:ý\u000b\u0016çÜð”

Crypto::MD5(“asd” as Binary) will gives us “7815696ecbf1c96e6894b779456d330e”

Crypto::SHA1(“dsasd” as Binary) will gives us “2fa183839c954e6366c206367c9be5864e4f4a65”

5.Diff (dw::util::Diff)

It calculates difference between two values and returns list of differences.

DataWeave Script:

%dw 2.0

import * from dw::util::Diff

output application/json

var a = { age: “Test” }

var b = { age: “Test2” }

a diff b



“matches”: false,

“diffs”: [


“expected”: “\”Test\””,

“actual”: “\”Test2\””,

“path”: “(root).age”





Rest of the things will proceed in Mule – 4 DataWeave Functions Part – 2 article

Mule 4 Mulesoft Basics Mulesoft Tutorial

DataWeave 1.0 to DataWeave 2.0 Migration – Part -1

Published by:

DataWeave is a new feature of Mule-3 that allows us to convert data to any kind of format, such as XML, CSV, JSON and POJO’s etc. In Mule 3, we use both MEL and Dataweave for writing the mule messages. Among these, MEL is default expression language in Mule 3 But this approach had some data inconsistencies and scattered approaches. To avoid the stress of converting data objects to Java objects in Mule 3 every time by the usage of expressions Mule 4 was launched. In Mule 4 DataWeave is the default expression language over Mule 3’s default MEL.

In Mule-4 DataWeave version has changed from 1.0 to 2.0.

Apart from syntax changes, there are many new features in DataWeave 2.0

Continue reading

Mule 3 Mule Interview Question Mulesoft Tutorial

Interview Questions Mulesoft / Mule ESB Tutorial

Published by:

MuleSoft or Mule ESB interview Questions

Here are the 18 most important and common mulesoft or mule esb interview questions and answers which are bound to be asked in any Mule ESB interview. Whether it’s Mulesoft or Mule ESB interview with Accenture, Cognizant, Infosys, Deloitte or any company below Mule ESB interview questions are always always been asked. You can easily clear any Mulesoft or Mule ESB interview questions if you learn answers to these Mule ESB questions.

1. What are Web Services?

Web service is a function or program in any language that can be accessed over HTTP. Message format can be XML or JSON or any other program as long as the other programs can understand and communicate. Web services can be synchronous or asynchronous. Any web service has server-client relationship. Any web service can have multiple clients. Eg: When a travel portal is selling tickets of an airliner, Portal is client and the Airline is the server as it is selling its service. Continue reading

Mule 3 Mule Interview Question Mulesoft Tutorial

Interview Questions 2 – Mulesoft / Mule ESB Tutorial

Published by:

MuleSoft or Mule ESB interview Questions

Here are the most important and common mulesoft or mule esb interview questions and answers which are bound to be asked in any Mule ESB interview. Also see Mule Interview Questions I.

1. What are inbound and Outbound properties ?

Inbound properties are immutable, are automatically generated by the message source and cannot be set or manipulated by the user.  They contain metadata specific to the message source. A message retains its inbound properties only for the duration of the flow; when a message passes out of a flow, its inbound properties do not follow it.
Continue reading

Mule 3 Mule Interview Question Mulesoft Tutorial

RAML Interview Questions – Mule Tutorial

Published by:

RAML Interview Questions.

In this mule tutorial, here are the most important and common RAML interview questions and answers which are bound to be asked in any Mule ESB interview.

1. What is RAML and why we use it?

RAML – RESTful API Modeling Language
RAML is similar to WSDL, it contains endpoint URL, request/response schema, HTTP methods and query and URI parameter.
RAML helps client (a consumer of the service) know, what the service is and what/how all operations can be invoked.
RAML helps the developer in creating the initial structure of this API. RAML can also be used for documentation purpose.

2. Who can you import RAML in your poject?

Read here: Mule Tutorial – Creating Mule Project with RAML
Continue reading

Mule 3 Mulesoft Basics Mulesoft Tutorial

Validation Framework – Handling Business Errors MuleSoft

Published by:

MuleSoft Validation Framework – Handling Business Errors

In this tutorial of mulesoft validation we will create an exception handling framework that will generate business/logical error and do custom validations to request/response message while mapping mulesoft code and learn how to handle those error.
For example: The message that mulesoft application received should have some validations while mapping to the backend application request, in case of validation failure the application should throw an error with error message.

The validations are:
1. if a is (a < b or a < 10) then generate error with error message “A should not be less than 10 or b”.
2. all the values a or b or c or d sum should be less than 500 else generate error with message “a+b+c+d should be less than 500.”

The above example, can be resolved in couple of ways and we will see one of the most simplest and easy way by creating validation framework.
We will resolve by using dataweave and a custom exception class.
Continue reading

Mule 3 Mulesoft Basics Mulesoft Tutorial

Scatter-Gather In Depth – MuleSoft Tutorial

Published by:

MuleSoft Scatter-Gather Scope

In this tutorial we will look at various configuration properties of Scatter-Gather with examples in detail and also see how to handle exception in Scatter-Gather.

Why use Scatter-Gather in Mulesoft:
To achieve parallel processing of multiple flows in mule we can use Scatter-Gather. The routing message processor Scatter-Gather sends a request message to multiple routes concurrently which are configured inside Scatter-Gather and collects the responses from all routes, and aggregates them into a single message. There will be multiple threads created for executing multiple routes simultaneously.
Scatter-Gather can also execute multiple routes sequentially.

Please read Validation Framework to understand how error is generated in the example.
Continue reading

Mule 3 Mulesoft Basics Mulesoft Tutorial

Caching or Cache Scope – Mulesoft / Mule ESB Tutorial

Published by:

Caching In Mule ESB or Cache Scope

In this Mule ESB tutorial we will look into what is caching and why to use it, how can we implement caching in mulesoft project and  configuration properties in Mule Cache Scope/Activity. Also a step by step configuration of mule cache scope/activity and how to cache information retrieved from database. Please refer to Mule Tutorial: Connecting with Database mule tutorial to know how to connect to database in Mule ESB.

What is caching and why to use it?

Caching is a concept with is used to store frequently used data in the memory, file system or database which saves processing time and load if it would have to be access from original source location every time.

For example: We have to create an API to retrieve user information, that has connect to an external database which is on different server and fetch the records. (Assumption: external DB is not changing frequently)
Continue reading

Mule 3 Mulesoft Basics Mulesoft Tutorial

Understanding Various Mule Flows – Mulesoft Tutorial

Published by:

Mulesoft / Mule EBS – Mule Flows Tutorial
Mule Flows

In this mule ESB tutorial we will understand various mule flows in detail with downloadable examples.

Various types of flows in mule

There are 4 types of flows in mule. While creating these flows the flow name should be unique in whole mule project despite beaning in different mule application XML file.


  1. Subflow always processes messages synchronously (relative to the flow that triggered its execution).
  2. Subflow executes in the same thread of the calling process. Calling process triggers the sub-flow and waits for it to complete and resumes once the sub-flow has completed.
  3. Subflow inherits processing strategy and exception handling strategy from the parent/calling flow.

Use – It can be used to split common logic and be reused by other flows.
Continue reading

Mule 3 Mulesoft Basics Mulesoft Tutorial

Creating Mule Project with RAML – Mulesoft / Mule ESB Tutorial

Published by:

Creating Mule Project with RAML

In this Mule tutorial we will learn how to create Mule project with RAML and a detailed walk-through on how the Mule flow works in case of a success or error scenario:

Mule ESB – What is RAML and why it’s used

RAML stands for RESTful API Modeling Language and is similar to WSDL. A RAML provides a structure to an API and also help the client who is invoking the API to know before hand what the API does.

A RAML contains:

  1. Endpoint URL with its Query parameters and URI parameters,
  2. HTTP methods to which API is listening to (GET, POST, PUT, DELETE),
  3. Request and response schema and sample message,
  4. HTTP response code that an API will return (eg: 200, 400, 404, 500). Continue reading
Mule 3 Mulesoft Basics Mulesoft Tutorial

Connecting with Database MySql – Mulesoft / Mule ESB Tutorial

Published by:

Connecting with Database MySQL

In this Mulesoft / Mule ESB tutorial of Connecting with Database Using MySql, we will use mulesoft Database Connector and connect it with MySQL DB:

MuleSoft Database Connector using MySQL

The Database connector allows you to connect with database with almost any Java Database Connectivity (JDBC) relational database using a single interface for every case. The Database connector allows you to run SQL operations on database including Select, Insert, Update, Delete, and even Stored Procedures. As of Anypoint Studio May 2014 with 3.5.0 Runtime, the JDBC connector is deprecated, and the Database connector takes on JDBC connection capabilities.
Continue reading