<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>MULESOFT on DecipherMiddleware</title><link>https://blog.deciphermiddleware.in/categories/mulesoft/</link><description>Recent content in MULESOFT on DecipherMiddleware</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Wed, 08 Oct 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.deciphermiddleware.in/categories/mulesoft/index.xml" rel="self" type="application/rss+xml"/><item><title>Logging within DataWeave Script</title><link>https://blog.deciphermiddleware.in/posts/dataweave-logging/</link><pubDate>Wed, 08 Oct 2025 00:00:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/dataweave-logging/</guid><description>&lt;p&gt;With the release of Mule runtime &lt;strong&gt;4.10&lt;/strong&gt; edge version, a new version of DataWeave, i.e. 2.10, is also &lt;a href="https://docs.mulesoft.com/release-notes/dataweave/dataweave-2.10.0-release-notes"&gt;released&lt;/a&gt;. One of the new features introduced in this release is &lt;strong&gt;&lt;a href="https://docs.mulesoft.com/dataweave/latest/dataweave-logging-configuration"&gt;DataWeave Logging Configuration&lt;/a&gt;&lt;/strong&gt;. The feature facilitates the developer to have granular control over logging. This leads to faster development and debugging.&lt;/p&gt;
&lt;p&gt;There might be a question: loggers are there; Why can’t we just put a log connector and log the variable or payload? What benefits do we get by logging within DataWeave? Where can I use this feature?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🔭&lt;/strong&gt; Let’s explore DataWeave examples of varying complexities.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-old-way-of-debugging"&gt;👴🏼 Old way of debugging &lt;a href="#-old-way-of-debugging" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Let&amp;rsquo;s consider simple Mule flow which outputs a &lt;strong&gt;hello world!&lt;/strong&gt;, using a transform message.&lt;/p&gt;
&lt;div class="mermaid"&gt;---
config:
theme: 'neutral'
---
flowchart LR
A["HTTP(s)"] --&gt; B["Transform"]&lt;/div&gt;
&lt;h3 id="dataweave"&gt;DataWeave &lt;a href="#dataweave" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;Difficulty level | ⭐️⚝⚝⚝⚝&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Print &amp;ldquo;hello world!&amp;rdquo;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
output text/plain
---
&amp;#34;hello world!&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="output"&gt;Output &lt;a href="#output" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;hello world!&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To analyze the value of payload in logs; the best way would be to add a logger after the transform message.&lt;/p&gt;
&lt;div class="mermaid"&gt;---
config:
theme: 'neutral'
---
flowchart LR
A["HTTP(s)"] --&gt; B["Transform"] --&gt; C["Logger"]&lt;/div&gt;
&lt;h3 id="console-output"&gt;Console Output &lt;a href="#console-output" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;INFO 2025-10-07 23:50:57,309 &lt;span class="o"&gt;[[&lt;/span&gt;MuleRuntime&lt;span class="o"&gt;]&lt;/span&gt;.uber.01: &lt;span class="o"&gt;[&lt;/span&gt;dataweave-logs&lt;span class="o"&gt;]&lt;/span&gt;.dataweave-logsFlow.CPU_INTENSIVE @6198f22a&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;processor: dataweave-logsFlow/processors/1&lt;span class="p"&gt;;&lt;/span&gt; event: 5e704830-a3aa-11f0-bf2a-beeb1f9526e2&lt;span class="o"&gt;]&lt;/span&gt; org.mule.runtime.core.internal.processor.LoggerMessageProcessor: hello world!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pretty simple and easy 🫠&amp;hellip; ❌ Not anymore, let&amp;rsquo;s increase the difficulty of the DataWeave script.&lt;/p&gt;
&lt;h3 id="dataweave-1"&gt;DataWeave &lt;a href="#dataweave-1" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;Difficulty level | ⭐️⭐️⚝⚝⚝&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Factorial of a number&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
output application/json
---
(1 to payload.inp) reduce $ * $$
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="input"&gt;Input &lt;a href="#input" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;inp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="output-1"&gt;Output &lt;a href="#output-1" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mi"&gt;120&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Considering the same flow, logger output will be as follows:&lt;/p&gt;
&lt;h4 id="console-output-1"&gt;Console Output &lt;a href="#console-output-1" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;INFO 2025-10-08 10:38:31,654 &lt;span class="o"&gt;[[&lt;/span&gt;MuleRuntime&lt;span class="o"&gt;]&lt;/span&gt;.uber.07: &lt;span class="o"&gt;[&lt;/span&gt;dataweave-logs&lt;span class="o"&gt;]&lt;/span&gt;.dataweave-logsFlow.CPU_INTENSIVE @1d9d48be&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;processor: dataweave-logsFlow/processors/1&lt;span class="p"&gt;;&lt;/span&gt; event: d569a3a0-a404-11f0-bf2a-beeb1f9526e2&lt;span class="o"&gt;]&lt;/span&gt; org.mule.runtime.core.internal.processor.LoggerMessageProcessor: &lt;span class="m"&gt;120&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Yuhhuuu!!! We did it, we got the factorial of the number printed in the logs, and the same has been sent to the calling API.&lt;/p&gt;
&lt;p&gt;Now, if we need to know the value on each iteration of the reduce function, how are the values updated at every iteration? 🤔🤔🤔&lt;/p&gt;
&lt;p&gt;If it were any other programming language, such as Java, Python, Go, etc. The print command would suffice for the needs. But in DataWeave, how do we do so?&lt;/p&gt;
&lt;p&gt;We are still in the old way of debugging 😞. Let&amp;rsquo;s modify the code to get the desired outcome.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
output application/json
---
(1 to payload.inp) reduce(it,acc=[1]) -&amp;gt; acc + acc[it-1]*it
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="output-2"&gt;Output &lt;a href="#output-2" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="mi"&gt;120&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="console-output-2"&gt;Console Output &lt;a href="#console-output-2" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;INFO 2025-10-08 11:12:32,863 &lt;span class="o"&gt;[[&lt;/span&gt;MuleRuntime&lt;span class="o"&gt;]&lt;/span&gt;.uber.06: &lt;span class="o"&gt;[&lt;/span&gt;dataweave-logs&lt;span class="o"&gt;]&lt;/span&gt;.dataweave-logsFlow.CPU_INTENSIVE @1bbba791&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;processor: dataweave-logsFlow/processors/1&lt;span class="p"&gt;;&lt;/span&gt; event: 961820f0-a409-11f0-bf2a-beeb1f9526e2&lt;span class="o"&gt;]&lt;/span&gt; org.mule.runtime.core.internal.processor.LoggerMessageProcessor: &lt;span class="o"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 1,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 1,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 2,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 6,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 24,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;120&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;payload[-1]&lt;/code&gt; will be desired output sent to the client.&lt;/p&gt;
&lt;p&gt;By doing this, we have significantly altered the dwl script and made it heavier, catering to the use case.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Simple task and complicated solution 😢😢😢&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="-new-way-of-debugging"&gt;😎 New way of debugging &lt;a href="#-new-way-of-debugging" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Starting with DataWeave 2.10, logging can be configured to control the verbosity of log messages using standard log levels: Debug, Info, Warn, and Error.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s start with an example and remove the logger connector to make the flow simpler.&lt;/p&gt;
&lt;div class="mermaid"&gt;---
config:
theme: 'neutral'
---
flowchart LR
A["HTTP(s)"] --&gt; B["Transform"]&lt;/div&gt;
&lt;h3 id="dataweave-2"&gt;DataWeave &lt;a href="#dataweave-2" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;Difficulty level | ⭐️⚝⚝⚝⚝&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Print &amp;ldquo;hello world!&amp;rdquo;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
output text/plain
---
logInfo(&amp;#34;hello world!&amp;#34;)
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="console-output-3"&gt;Console Output &lt;a href="#console-output-3" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;INFO 2025-10-08 19:27:55,625 &lt;span class="o"&gt;[[&lt;/span&gt;MuleRuntime&lt;span class="o"&gt;]&lt;/span&gt;.uber.06: &lt;span class="o"&gt;[&lt;/span&gt;dataweave-logs&lt;span class="o"&gt;]&lt;/span&gt;.dataweave-logsFlow.CPU_INTENSIVE @ae03158&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;processor: &lt;span class="p"&gt;;&lt;/span&gt; event: ca3bdad0-a44e-11f0-bf2a-beeb1f9526e2&lt;span class="o"&gt;]&lt;/span&gt; org.mule.weave.v2.model.service.DefaultLoggingService$: &lt;span class="s2"&gt;&amp;#34;hello world!&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Yeah!!! We did it&amp;hellip;&lt;/p&gt;
&lt;img src="https://blog.deciphermiddleware.in/images/blogger/33b97e90f7.gif" width="250px"/&gt;
&lt;p&gt;Let&amp;rsquo;s look a little closer 🔎&lt;/p&gt;
&lt;h3 id="difference-in-packages-used-for-logging"&gt;Difference in packages used for logging &lt;a href="#difference-in-packages-used-for-logging" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Logger Connector:&lt;/strong&gt; org.mule.runtime.core.internal.processor.LoggerMessageProcessor&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DataWeave:&lt;/strong&gt; org.mule.weave.v2.model.service.DefaultLoggingService$&lt;/p&gt;
&lt;p&gt;In above example, info level is used, for different log levels, different DataWeave logging functions are available.&lt;/p&gt;
&lt;h3 id="dataweave-logging-functions"&gt;DataWeave Logging Functions &lt;a href="#dataweave-logging-functions" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;logWith&amp;lt;T&amp;gt;(level: LogLevel, prefix: String, value: T): T
logDebug&amp;lt;T&amp;gt;(prefix: String = &amp;#34;&amp;#34;, value: T): T
logInfo&amp;lt;T&amp;gt;(prefix: String = &amp;#34;&amp;#34;, value: T): T
logWarn&amp;lt;T&amp;gt;(prefix: String = &amp;#34;&amp;#34;, value: T): T
logError&amp;lt;T&amp;gt;(prefix: String = &amp;#34;&amp;#34;, value: T): T
log&amp;lt;T&amp;gt;(prefix: String = &amp;#34;&amp;#34;, value: T): T
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;More info on each function at &lt;a href="https://docs.mulesoft.com/dataweave/latest/dataweave-logging-configuration#dataweave-logging-functions"&gt;official docs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now let&amp;rsquo;s increase DataWeave complexity&amp;hellip;&lt;/p&gt;
&lt;img src="https://blog.deciphermiddleware.in/images/blogger/955bcc363e.gif"/&gt;
&lt;h3 id="dataweave-3"&gt;DataWeave &lt;a href="#dataweave-3" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;Difficulty level | ⭐️⭐️⚝⚝⚝&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Factorial of a number&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
output application/json
---
(1 to payload.inp) reduce logInfo($ * $$)
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="input-1"&gt;Input &lt;a href="#input-1" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;inp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="output-3"&gt;Output &lt;a href="#output-3" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mi"&gt;120&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="console-output-4"&gt;Console Output &lt;a href="#console-output-4" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;INFO 2025-10-08 20:16:32,412 &lt;span class="o"&gt;[[&lt;/span&gt;MuleRuntime&lt;span class="o"&gt;]&lt;/span&gt;.uber.06: &lt;span class="o"&gt;[&lt;/span&gt;dataweave-logs&lt;span class="o"&gt;]&lt;/span&gt;.dataweave-logsFlow.CPU_INTENSIVE @46ac5059&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;processor: &lt;span class="p"&gt;;&lt;/span&gt; event: 94c8ac00-a455-11f0-bf2a-beeb1f9526e2&lt;span class="o"&gt;]&lt;/span&gt; org.mule.weave.v2.model.service.DefaultLoggingService$: &lt;span class="m"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;INFO 2025-10-08 20:16:32,413 &lt;span class="o"&gt;[[&lt;/span&gt;MuleRuntime&lt;span class="o"&gt;]&lt;/span&gt;.uber.06: &lt;span class="o"&gt;[&lt;/span&gt;dataweave-logs&lt;span class="o"&gt;]&lt;/span&gt;.dataweave-logsFlow.CPU_INTENSIVE @46ac5059&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;processor: &lt;span class="p"&gt;;&lt;/span&gt; event: 94c8ac00-a455-11f0-bf2a-beeb1f9526e2&lt;span class="o"&gt;]&lt;/span&gt; org.mule.weave.v2.model.service.DefaultLoggingService$: &lt;span class="m"&gt;6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;INFO 2025-10-08 20:16:32,413 &lt;span class="o"&gt;[[&lt;/span&gt;MuleRuntime&lt;span class="o"&gt;]&lt;/span&gt;.uber.06: &lt;span class="o"&gt;[&lt;/span&gt;dataweave-logs&lt;span class="o"&gt;]&lt;/span&gt;.dataweave-logsFlow.CPU_INTENSIVE @46ac5059&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;processor: &lt;span class="p"&gt;;&lt;/span&gt; event: 94c8ac00-a455-11f0-bf2a-beeb1f9526e2&lt;span class="o"&gt;]&lt;/span&gt; org.mule.weave.v2.model.service.DefaultLoggingService$: &lt;span class="m"&gt;24&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;INFO 2025-10-08 20:16:32,413 &lt;span class="o"&gt;[[&lt;/span&gt;MuleRuntime&lt;span class="o"&gt;]&lt;/span&gt;.uber.06: &lt;span class="o"&gt;[&lt;/span&gt;dataweave-logs&lt;span class="o"&gt;]&lt;/span&gt;.dataweave-logsFlow.CPU_INTENSIVE @46ac5059&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;processor: &lt;span class="p"&gt;;&lt;/span&gt; event: 94c8ac00-a455-11f0-bf2a-beeb1f9526e2&lt;span class="o"&gt;]&lt;/span&gt; org.mule.weave.v2.model.service.DefaultLoggingService$: &lt;span class="m"&gt;120&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With the above log, we can infer that 4 times computation was performed, and the values were printed by the DataWeave logger. It helps in debugging script a lot.&lt;/p&gt;
&lt;p&gt;The story doesn&amp;rsquo;t end here&amp;hellip; Let&amp;rsquo;s make the script a little more complex&amp;hellip; But Scope for this blog ends here&amp;hellip; 😔😔😔&lt;/p&gt;
&lt;h2 id="part-2"&gt;Part 2 &lt;a href="#part-2" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Part 2 coming soon&amp;hellip;.&lt;/p&gt;
&lt;img src="https://blog.deciphermiddleware.in/images/blogger/bad297b70d.gif"/&gt;
&lt;hr&gt;
&lt;p&gt;Please share your valuable feedback 😊😊😊&amp;hellip;&lt;/p&gt;</description></item><item><title>Racer API | AnyPoint Speedway</title><link>https://blog.deciphermiddleware.in/posts/racer-api-anypoint-speedway/</link><pubDate>Sun, 24 Mar 2024 18:27:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/racer-api-anypoint-speedway/</guid><description>&lt;p&gt;&lt;a href="https://www.anypointspeedway.com/"&gt;Anypoint Speedway &lt;/a&gt;(&lt;em&gt;The MuleSoft API Race Where Acceleration Meets Integration&lt;/em&gt;) is launched with Season 3. So, &lt;strong&gt;Muleys&lt;/strong&gt; all around the world get ready to &lt;strong&gt;RACE&lt;/strong&gt;. Once we scroll through the &lt;a href="https://www.anypointspeedway.com/instructions"&gt;instructions&lt;/a&gt;, we see a need for Racer API, which will be used to compete in the race. Currently, Racer API can be built in any of the platforms, all it needs is a public endpoint with implementation as per &lt;a href="https://anypoint.mulesoft.com/exchange/portals/anypoint-speedway/ae6d7954-6fc2-4f3e-8777-80ff8aabd859/racer-api/minor/2.0/pages/home/"&gt;specification&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/63e810df81.jpg"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/63e810df81.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But, we are the MuleSoft developers, so let&amp;rsquo;s build the API in MuleSoft. If you are a beginner or professional Muley, this article will help you implement the Racer API and participate in the race. Let&amp;rsquo;s fasten up the seatbelt and start developing the &lt;strong&gt;Racer API&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/33190abc91.gif"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/33190abc91.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Anypoint Speedway has made our lives easier by providing the readily available &lt;a href="https://anypoint.mulesoft.com/exchange/portals/anypoint-speedway/ae6d7954-6fc2-4f3e-8777-80ff8aabd859/racer-api/minor/2.0/pages/home/"&gt;specification &lt;/a&gt;file.&lt;/p&gt;
&lt;h2 id="pre-requisite"&gt;Pre-requisite &lt;a href="#pre-requisite" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="racerid"&gt;racerId &lt;a href="#racerid" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To enter the race, the RACER is required to register for the race and get a racerId.&lt;/p&gt;
&lt;p&gt;1. Go to &lt;a href="https://anypoint.mulesoft.com/exchange/portals/anypoint-speedway/ae6d7954-6fc2-4f3e-8777-80ff8aabd859/anypoint-race-api/minor/3.2/pages/home/"&gt;Anypoint Race API,&lt;/a&gt; and Click on Request Access. Log in with AnyPoint Platform credentials.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/ef0e5db25a.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/ef0e5db25a.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. Fill in the details as shown below. If an application is not seen, create a new application by providing the name. Click on Request access. For initial access use the &lt;strong&gt;Basic SLA tier&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/82af5a9555.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/82af5a9555.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. This will generate/show the client-id and client-secret which will be used to authenticate the requests to Anypoint Race API.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/80c7611e60.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/80c7611e60.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4. Go to&lt;a href="https://anypoint.mulesoft.com/exchange/portals/anypoint-speedway/ae6d7954-6fc2-4f3e-8777-80ff8aabd859/anypoint-race-api/minor/3.2/console/method/%2342/"&gt; POST /register&lt;/a&gt; resource. Follow the instructions to generate a racerId. You may use the portal to send a request or any rest client(e.g. Postman) to send a request and get a racerId for your racer.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;displayName&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Sylvester the Cat&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;sylvester@wb.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;racerId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;racer-id-value&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;clientId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;clientId&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Highlighted &lt;strong&gt;racerId&lt;/strong&gt; will be used in building the &lt;strong&gt;RACER API&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="racer-api"&gt;RACER API &lt;a href="#racer-api" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;1. Download the RAML specification file from the Anypoint Speedway &lt;a href="https://anypoint.mulesoft.com/exchange/portals/anypoint-speedway/ae6d7954-6fc2-4f3e-8777-80ff8aabd859/racer-api/minor/2.0/pages/home/"&gt;portal&lt;/a&gt;. Click on Download and then as RAML. RAML file will be downloaded to the system.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/7c606ee3c8.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/7c606ee3c8.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. Open AnyPoint Studio. Click on file, then New and then Click on Mule Project.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/cfc65c880a.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/cfc65c880a.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. Enter the project/racer name, specify the downloaded file&amp;rsquo;s location, and click on finish.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/b4aa4f8cce.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/b4aa4f8cce.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A project will be created with scaffold flows as per the specification file.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/d31e13d2a8.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/d31e13d2a8.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Let&amp;rsquo;s build the flows for&lt;strong&gt;Tier I&lt;/strong&gt;. For &lt;strong&gt;Tier I&lt;/strong&gt; , the token is required to be used in further requests. For this, an object store can be used.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;4. Add the &lt;strong&gt;ObjectStore&lt;/strong&gt; module in Mule Palette. Click on Global Elements, then click on Create.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/1a020e54d9.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/1a020e54d9.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/1bd3884817.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/1bd3884817.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5. Select ObjectStore Config under Connector configurations. Click on OK.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/ff57ba3115.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/ff57ba3115.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6. Check the Connection checkbox and click on OK. A connection configuration will be created.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/35bf9a2747.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/35bf9a2747.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;7. Click on Create again to add another global configuration for ObjectStore. Select ObjectStore under Component Configuration and click OK.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/bf81d7351d.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/bf81d7351d.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;8. Specify the connection reference for ObjectStore created in the previous step. Click OK.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/cf97b7edc1.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/cf97b7edc1.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;9. Click on Message flow to go back to flows. Go to &amp;ldquo;&lt;strong&gt;post:\races:application\json:racer-api-config&lt;/strong&gt; &amp;quot; flow configuration.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/733b7f587f.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/733b7f587f.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;10. Drag and drop the &lt;strong&gt;Store&lt;/strong&gt; connector from the Mule Palette. Specify the details as mentioned in the below screenshot.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/b56b5c02f1.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/b56b5c02f1.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11. Drag a set variable and set the &lt;strong&gt;name&lt;/strong&gt; as &lt;strong&gt;raceId&lt;/strong&gt; and &lt;strong&gt;value&lt;/strong&gt; as &lt;strong&gt;uuid().&lt;/strong&gt; Configuration should look like as below.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/841483629a.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/841483629a.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;12. Drag a transform message and set the values as shown below. Replace the &amp;ldquo;&lt;strong&gt;race-id-value&lt;/strong&gt; &amp;quot; with the value, received from the &lt;strong&gt;Anypoint Race API POST /register.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/3e92586c6c.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/3e92586c6c.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;13. The overall flow will look like below.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/4c399c4a03.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/4c399c4a03.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;To pass&lt;strong&gt;Tier I&lt;/strong&gt; , at least &lt;strong&gt;1 lap&lt;/strong&gt; needs to be completed. Let&amp;rsquo;s update the &amp;ldquo;post:\races\(id)\laps:text\plain:racer-api-config&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;14. Drag the &lt;strong&gt;Retrieve&lt;/strong&gt; connector under ObjectStore from Mule Palette, and place it after the transform message. Specify the values as shown below. Token value will be retrieved from the Object store.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/4da6c3839e.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/4da6c3839e.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;15. Drag the transform connector. And update the transform connector with values as below.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/e633aba2ca.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/e633aba2ca.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The flow will look as below.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/9330107269.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/9330107269.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;16. Save and export the API. Right-click &lt;strong&gt;racer&lt;/strong&gt; project -&amp;gt; Export. Under Mule, select Anypoint Studio Project to Mule deployable archive. Click Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/f4dc1aaf64.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/f4dc1aaf64.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;17. Specify the export jar location and click on Finish.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/c09867d13b.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/c09867d13b.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;_Now the **RACER API **is ready to race for &lt;strong&gt;Tier I&lt;/strong&gt;. Let&amp;rsquo;s deploy to the AnyPoint platform and start the race. _&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/c528afff99.gif"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/c528afff99.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;18. Go to the AnyPoint platform, then to Runtime Manager, select the environment where you want to deploy. Click on &lt;strong&gt;Deploy application&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;19. Specify the application name, and upload the jar file created in the previous step. Tick the checkbox to use ObjectStore V2 and click on Deploy.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/9c8aa7890c.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/9c8aa7890c.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/87dfd87b20.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/87dfd87b20.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After deployment, a public URL similar to &amp;ldquo;&lt;a href="https://deciphermiddleware-racer-syivqn.5sc6y6-4.usa-e2.cloudhub.io"&gt;https://deciphermiddleware-racer-syivqn.5sc6y6-4.usa-e2.cloudhub.io&lt;/a&gt;&amp;rdquo; will be generated. This will be used to enter the race and compete with other racers.&lt;/p&gt;
&lt;h2 id="enter-the-race"&gt;Enter the Race &lt;a href="#enter-the-race" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/eddf148fae.gif"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/eddf148fae.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1. To make an entry in the race, trigger a request to Anypoint Race API &lt;a href="https://anypoint.mulesoft.com/exchange/portals/anypoint-speedway/ae6d7954-6fc2-4f3e-8777-80ff8aabd859/anypoint-race-api/minor/3.2/console/method/%2382/"&gt;POST /racers/{racerId}/entry&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;2. Provide the public endpoint along with &lt;strong&gt;/api&lt;/strong&gt; &amp;ldquo;&lt;strong&gt;API kit is used /api is added before every resource&lt;/strong&gt; &amp;ldquo;. Any REST client can be used to trigger the request by providing details as mentioned in the API documentation.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/dbed3aced4.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/dbed3aced4.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The RACER has started RACING. Go to the &lt;a href="https://www.anypointspeedway.com/leaderboard"&gt;Leaderboard &lt;/a&gt;and see your racer name coming up.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/cfd707255c.gif"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/cfd707255c.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Oh wait there are a total of 5 Tiers&lt;/strong&gt;! So, wear your &lt;strong&gt;developer&lt;/strong&gt; hats and enhance the &lt;strong&gt;Rookie Racer&lt;/strong&gt; to level up to &lt;strong&gt;Tier V&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/955bcc363e.gif"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/955bcc363e.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="all-the-best-racers-lets-race"&gt;All the best Racers, Let&amp;rsquo;s Race!!! &lt;a href="#all-the-best-racers-lets-race" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/91fef0e7bd.gif"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/91fef0e7bd.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Configure Custom Domain in Private Space : CloudHub 2.0</title><link>https://blog.deciphermiddleware.in/posts/configure-custom-domain-in-private/</link><pubDate>Fri, 08 Sep 2023 14:58:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/configure-custom-domain-in-private/</guid><description>&lt;p&gt;With CloudHub 2.0, applications are deployed in public spaces or private spaces. Private space isolates the applications deployed, and different network customizations can be done within the private space. Earlier in CloudHub 1.0, DLB used to be configured to balance the incoming load along with configuring the custom/vanity domain instead of using *&lt;strong&gt;.cloudhub.io&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/def6c4a89c.gif"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/def6c4a89c.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We can configure vanity/custom domains in the private space, avoiding accessing the applications through the default *&lt;strong&gt;.cloudhub.io&lt;/strong&gt; domain. Configuring the custom domain will require the public certificate and the private key as a prerequisite.&lt;/p&gt;
&lt;h2 id="generating-the-self-signed-public-certificate-and-the-private-key"&gt;Generating the self-signed public certificate and the private key &lt;a href="#generating-the-self-signed-public-certificate-and-the-private-key" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;For simplicity, we will try to create certificates for the wildcard domain. To generate the self-signed public certificate and private key, we will require &lt;strong&gt;OpenSSL&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;1. Create a config file as below, name it &lt;strong&gt;config.cfg&lt;/strong&gt; , and change the values as per the domain details.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt; req &lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;default_bits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;2048&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;distinguished_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; req_distinguished_name
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; no
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt; req_distinguished_name &lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;countryName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; IN
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;stateOrProvinceName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; Punjab
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;localityName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; Amritsar
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;organizationName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; DecipherMiddleware
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;commonName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; *.domain.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;2. Run the below command through the terminal. Currently, expiration is set to 3000 days.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl req -newkey rsa:2048 -nodes -keyout deciphermiddleware-in-private.pem -x509 -days &lt;span class="m"&gt;3000&lt;/span&gt; -out deciphermiddleware-in-crt.pem -config config.cfg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/92186dffc9.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/92186dffc9.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This will generate 2 files: a public certificate and a private key. These 2 files will be used in the later stage.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/e276dc0268.gif"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/e276dc0268.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="steps-anypoint-platform"&gt;Steps: Anypoint Platform &lt;a href="#steps-anypoint-platform" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Let&amp;rsquo;s now log in to the Anypoint Platform.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/ad32eeabb7.gif"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/ad32eeabb7.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;1. Go to Runtime Manager and click private spaces.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/cf803f58f2.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/cf803f58f2.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. Select the private space, where the custom/vanity domain needs to be configured. Click on &lt;strong&gt;Domains &amp;amp; TLS&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/e2564ed02c.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/e2564ed02c.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. Click on Create TLS Context.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/4d16960a2f.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/4d16960a2f.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4. Enter the name for configuration. Upload the public certificate and the private key created in the previous steps. Certificates have been configured to have domains as *&lt;strong&gt;.mule.deciphermiddleware.in&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/ec9bbbb28f.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/ec9bbbb28f.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5. Enter the keystore password, if the keystore was encrypted. If you have CA signed certificate upload that as well.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/6442fe7a40.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/6442fe7a40.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6. Click on &lt;strong&gt;Create TLS Context&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/14d53e4b38.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/14d53e4b38.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;7. A new TLS context will be created as below.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/5e8efb60bd.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/5e8efb60bd.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s configure an application to use the newly configured custom domain.&lt;/p&gt;
&lt;p&gt;8. Open any CloudHub 2.0 application deployed in the Private Space. Go to settings. Click on &lt;strong&gt;Ingress&lt;/strong&gt; , and click on &lt;strong&gt;Add Endpoint&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/c298258d5e.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/c298258d5e.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;9. Change the host to the custom host configured. For now, leave the remaining fields as is. Click on Apply Changes. This will deploy the application with a new configuration as defined by the deployment model.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/746ebb6e35.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/746ebb6e35.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;10. Before using the custom domain, make sure the DNS record with the following values is being configured.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Record Type&lt;/th&gt;
&lt;th&gt;CNAME&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Host (or Name)&lt;/td&gt;
&lt;td&gt;wildcard or wildcard with subdomain (*.mule used in the current example)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Value (or Content)&lt;/td&gt;
&lt;td&gt;Private Space default hostname&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="validate-if-the-dns-record-is-working"&gt;Validate if the DNS record is working &lt;a href="#validate-if-the-dns-record-is-working" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The below command can be used to check if the DNS records are configured properly.&lt;/p&gt;
&lt;p&gt;nslookup &lt;host-of-application&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/a5e6eb28a9.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/a5e6eb28a9.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If private space static IPs and default hostname are visible as output, then configuration is proper and DNS routing is working as expected.&lt;/p&gt;
&lt;p&gt;Apps can be accessed using the custom/vanity domains.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/bad297b70d.gif"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/bad297b70d.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="references"&gt;References &lt;a href="#references" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://docs.mulesoft.com/cloudhub-2/ps-config-domains#before-you-begin"&gt;https://docs.mulesoft.com/cloudhub-2/ps-config-domains#before-you-begin&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Please share your valuable feedback 😊😊😊&lt;/p&gt;</description></item><item><title>Experimenting Recursion in DataWeave - Fibonacci Series</title><link>https://blog.deciphermiddleware.in/posts/experimenting-recursion-in-dataweave/</link><pubDate>Tue, 13 Jun 2023 17:20:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/experimenting-recursion-in-dataweave/</guid><description>&lt;p&gt;In various programming languages, &lt;strong&gt;recursion&lt;/strong&gt; is a process in which a method or function calls itself to simplify a complicated problem. Understanding recursive solution sometimes become difficult. Let&amp;rsquo;s try to solve a mathematical problem through recursion with a twist by using &lt;strong&gt;&lt;a href="https://docs.mulesoft.com/dataweave/2.4/"&gt;DataWeave&lt;/a&gt;&lt;/strong&gt;. The Fibonacci series is a generic use case that recursion can solve. This is a very generic question in programming interviews.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEgMCAzoIcrFJGsoVYBmoNgx1holseJ--eU4AlGaAEYcvIeVknXZU_1-9XCSKPhdQ1kys0BPwLs1qXHbSB_9tIZZ8HFd2iYE8uQZlOFmZCePE_n0sZIi4O90K1do27hOCY-U_NvwLPoo-YC57NbivLu3t2n1a3oM1bbAtx73xjOF8to424pDOLZunjLs"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/18b1df67c9.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Photo by &lt;a href="https://unsplash.com/ko/@naletu?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Natalya Letunova&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/nJ07EiRkMUY?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="what-is-fibonacci-series"&gt;What is Fibonacci Series? &lt;a href="#what-is-fibonacci-series" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;A Fibonacci series is a set of integers starting with 0 followed by 1, and a series continuing with the sum of the preceding two integers in the sequence. For example,&lt;/p&gt;
&lt;p&gt;$$
F_n = 0,1,1,2,3,5,8,13,21,34&amp;hellip;
$$&lt;/p&gt;
&lt;h3 id="mathematically"&gt;Mathematically, &lt;a href="#mathematically" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;$$
\begin{align*}
&amp;amp; F_0 = 0 \\
&amp;amp; F_1 = 1 \\
&amp;amp; F_n = F_{(n-1)} + F_{(n-2)}
\end{align*}
$$&lt;/p&gt;
&lt;p&gt;Now transforming the above logic in the form of a recursive function to find the nth digit in the Fibonacci series.&lt;/p&gt;
&lt;h3 id="dataweave-recursive-function"&gt;DataWeave Recursive Function: &lt;a href="#dataweave-recursive-function" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
output application/json
fun fib_r(n)=
if (n&amp;lt;=0) 0
else if (n==1) 1
else
fib_r(n-1) + fib_r(n-2)
---
{
recursive:fib_r(9)
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;recursive&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;34&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/c78f1ed507.gif"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/c78f1ed507.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Testing on dataweave playground and increasing the value of &lt;strong&gt;n&lt;/strong&gt;. The moment we increase the value beyond &lt;strong&gt;27&lt;/strong&gt; , we get an &lt;strong&gt;ERROR&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/94b548fae8.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/94b548fae8.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="error"&gt;ERROR? &lt;a href="#error" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The error shows the execution time taken by dataweave is more than 2.5 seconds. But how do we know how much time is taken by the recursive function? Is there a way to capture the execution time within DataWeave without any custom code/java modules? It&amp;rsquo;s a yes, The DataWeave has a utility module &lt;a href="https://docs.mulesoft.com/dataweave/2.4/dw-timer"&gt;Timer&lt;/a&gt;, which can be used to capture execution time as well as the result of the functions.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
import * from dw::util::Timer
output application/json
fun fib_r(n)=
if (n&amp;lt;=0) 0
else if (n==1) 1
else
fib_r(n-1) \+ fib_r(n-2)
---
{
recursive:time(()-&amp;gt;fib_r(27)),
recursive_d:duration(()-&amp;gt;fib_r(27))
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;recursive&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2023-06-13T16:33:29.053017Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;result&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;610&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2023-06-13T16:33:29.059367Z&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;recursive_d&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;time&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;result&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;610&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Duration gives us the time taken by function execution in milliseconds and the time function output the start and end timestamp of the execution. With this, the execution time can be measured easily.&lt;/p&gt;
&lt;p&gt;Now, the real issue is if we need to find the &lt;strong&gt;nth&lt;/strong&gt; digit(greater than &lt;strong&gt;27&lt;/strong&gt;) in the Fibonacci series by optimizing space and time. &lt;strong&gt;How can that be done?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/50e6e3c1da.gif"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/50e6e3c1da.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Going back to programming days, there is a way of using &lt;strong&gt;Tail Recursion&lt;/strong&gt;. Now what exactly is tail recursion?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tail recursion&lt;/strong&gt; is using the recursive function as the last statement of the function. The benefit of this approach is it optimises the space as the function doesn&amp;rsquo;t need to keep the track of last 2 execution results. Since the result is populated as part of the last execution statement of the function. Putting the coding hats again for the DataWeave.&lt;/p&gt;
&lt;p&gt;With the new function let&amp;rsquo;s find out the &lt;strong&gt;500 th digit in the Fibonacci series&lt;/strong&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
import * from dw::util::Timer
output application/json
fun fib_r(n)=
if (n&amp;lt;=0) 0
else if (n==1) 1
else
fib_r(n-1) \+ fib_r(n-2)
//tail recursion
fun fib_tr(n, x=0, y=1)=
if(n&amp;lt;=0)
x
else if (n==1)
y
else
fib_tr(n-1,y,x+y)
---
{
recursive:time(()-&amp;gt;fib_r(5)),
tailRecursive:time(()-&amp;gt;fib_tr(500))
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;recursive&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2023-06-13T16:48:46.007784Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;result&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2023-06-13T16:48:46.007897Z&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tailRecursive&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2023-06-13T16:48:46.007902Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;result&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;139423224561697880139724382870407283950070256587697307264108962948325571622863290691557658876222521294125&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2023-06-13T16:48:46.010339Z&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In nearly 4 milliseconds, the new tail recursive function can give results for the **500 th digit **in the series.&lt;/p&gt;
&lt;h2 id="can-we-improve-the-timings-further"&gt;Can we improve the timings further? &lt;a href="#can-we-improve-the-timings-further" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/86807ebb0c.gif"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/86807ebb0c.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In dataweave, we have a &amp;ldquo;&lt;a href="https://docs.mulesoft.com/dataweave/2.4/dw-core-functions-reduce"&gt;reduce&lt;/a&gt;&amp;rdquo; function, which can be used to get output for the Fibonacci series even faster. Re-writing the logic with the &amp;ldquo;reduce&amp;rdquo; function is kind of challenging. After multiple trials and errors, one way is as below.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
import * from dw::util::Timer
output application/json
fun fib_r(n)=
if (n&amp;lt;=0) 0
else if (n==1) 1
else
fib_r(n-1) \+ fib_r(n-2)
//tail recursion
fun fib_tr(n, x=0, y=1)=
if(n&amp;lt;=0)
x
else if (n==1)
y
else
fib_tr(n-1,y,x+y)
//with reduce
fun fib_rr(n)=
if(n&amp;lt;=0)
0
else
if(n==1)
1
else
([2 to n][0] reduce ((i,acc=[0, 1]) -&amp;gt; acc + (acc[i-1] + acc[i-2])))[n]
---
{
recursive:time(()-&amp;gt;fib_r(5)),
tailRecursive:time(()-&amp;gt;fib_tr(500)),
reduce:time(()-&amp;gt;fib_rr(500))
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;recursive&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2023-06-13T17:04:41.724469Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;result&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2023-06-13T17:04:41.72455Z&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tailRecursive&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2023-06-13T17:04:41.724555Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;result&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;139423224561697880139724382870407283950070256587697307264108962948325571622863290691557658876222521294125&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2023-06-13T17:04:41.726913Z&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;reduce&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2023-06-13T17:04:41.726923Z&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;result&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;139423224561697880139724382870407283950070256587697307264108962948325571622863290691557658876222521294125&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2023-06-13T17:04:41.729307Z&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above DataWeave script is one of the many ways to solve the problem. On comparing all three approaches, the solution using &lt;strong&gt;reduce&lt;/strong&gt; function performs &lt;strong&gt;best of all&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/b8229ff19e.gif"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/b8229ff19e.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please share your valuable feedback 😊😊😊&lt;/p&gt;</description></item><item><title>Connect Free Oracle Autonomous Database from MuleSoft</title><link>https://blog.deciphermiddleware.in/posts/connect-free-oracle-autonomous-database/</link><pubDate>Tue, 27 Dec 2022 12:29:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/connect-free-oracle-autonomous-database/</guid><description>&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb2v142YG4UvARNb2GvnJ6u9JuThDI2ZB8TXRMc3zgd-G5vBvnLLC509FXaCg2PkaDPcjoLNUGO6LY-mJ25ZNCSjmftVNqn0SxLwhZfGR9W7EsH9T-U_8exk-OT-Ykee3VblzZOdpgVTP64UJx7Jy-lh78wDzAZ0FImepj3qQq6yqVAUO7h1-qJ4ZI/s6000/mahdi-bafande-5XCMjETPrsM-unsplash.jpg"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/4eb6554344.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A database is the most commonly used backend in the integration world. We often build a lot of integrations with databases (be it as a source or target system). Likewise, working on a proof-of-concept, we always find it hard to have a database that we can use on a local machine or on the cloud. If we install a database on a local device it will consume a lot of resources. Not only that connecting from a cloud integration platform i.e. MuleSoft cloudhub is always tricky.&lt;/p&gt;
&lt;p&gt;Oracle has an always free-to-use &lt;a href="https://docs.oracle.com/en/cloud/paas/autonomous-database/adbsa/autonomous-always-free.html"&gt;Autonomous Database&lt;/a&gt; instance available on the cloud with limited features but is really a powerful database to use. We would say, it is one of the best suitable for doing proof of concepts and validation before working on an actual use case.&lt;/p&gt;
&lt;p&gt;We thought of giving it a try to connect MuleSoft to the Free version of the Autonomous Oracle database. We created a &lt;a href="https://www.oracle.com/cloud/free/"&gt;free trial&lt;/a&gt; account for Oracle and an always-free autonomous database instance. Once we have the instance created, we can connect using SQL developer easily. But now the question is&lt;/p&gt;
&lt;h2 id="how-to-connect-this-database-using-mulesoft"&gt;How to connect this database using MuleSoft? &lt;a href="#how-to-connect-this-database-using-mulesoft" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Let&amp;rsquo;s start with prerequisites.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites &lt;a href="#prerequisites" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;1. Log in to the oracle cloud instance and navigate to the autonomous database instance.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/bd6247c69b.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/bd6247c69b.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. Click on the database connection. Then click on &lt;strong&gt;Download wallet.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/18a008e5e6.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/18a008e5e6.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. Enter the wallet password (and make a note of it, which will be used in later steps)and click on Download. The &lt;strong&gt;wallet.zip&lt;/strong&gt; file will be downloaded.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/4840948f6a.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/4840948f6a.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4. Extract the downloaded zip file. We will see below files extracted.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/0453d08d33.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/0453d08d33.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To connect to Oracle Autonomous Database, we can use either&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#connect-using-mtls-configurations"&gt;mTLS&lt;/a&gt;, enabled by default.&lt;/li&gt;
&lt;li&gt;&lt;a href="#connect-using-tls-configurations"&gt;TLS&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The below steps will be familiar to both configurations&lt;/p&gt;
&lt;p&gt;1. To fetch the connection URLs, we can either get them from the database instance page. Click on Database connection and scroll down to connection strings.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/959bbbd265.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/959bbbd265.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. Select either TLS or mTLS under TLS authentication.&lt;/p&gt;
&lt;p&gt;3. There will be 5 TNS(&lt;a href="https://docs.oracle.com/en/cloud/paas/autonomous-database/adbsa/service-names-tranaction-processing.html#GUID-610D50B3-A0F0-4059-B940-324E305C5F55"&gt;database service names&lt;/a&gt;) names available: high, low, medium, tp, and tpurgent. Click on the &lt;strong&gt;show,&lt;/strong&gt; the TNS we may want to use, and copy the string. The string will contain all the details like host, port, service name, etc.&lt;/p&gt;
&lt;p&gt;4. We can also get all these details from the file &lt;strong&gt;tnsnames.ora&lt;/strong&gt; extracted from the wallet.&lt;/p&gt;
&lt;h2 id="connect-using-mtls-configurations"&gt;Connect using mTLS configurations &lt;a href="#connect-using-mtls-configurations" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Whenever we create a new autonomous DB instance, only mTLS is enabled by default. To connect to the database, we need to configure 2 way SSL along with database credentials in MuleSoft.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Copy the keystore.jks and truststore.jks under the &amp;ldquo;&lt;strong&gt;src/main/resources&lt;/strong&gt; &amp;quot; directory of the mule project. We can also keep it under a separate directory. In this example, we will be using the &amp;ldquo;wallet&amp;rdquo; folder to store these files.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/f3a09e3a74.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/f3a09e3a74.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configure the database connection as below:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/8548828e40.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/8548828e40.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;By providing these details, we will not be able to connect to DB as we have not configured mTLS. Click on the TLS tab and configure the details below.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/bdfa7cb556.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/bdfa7cb556.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; : Keystore password, Keystore key password, and trust store password will be equal to the wallet password which we gave while generating the wallet on the OCI console.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Click on Test Connection, and we will see the connection is successful.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="connect-using-tls-configurations"&gt;Connect using TLS configurations &lt;a href="#connect-using-tls-configurations" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;To enable connectivity through TLS, we need to update the Access Control List(ACL) in the database instance under networking.&lt;/p&gt;
&lt;p&gt;Please refer below link to configure TLS in the Oracle Autonomous database instance.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://docs.oracle.com/en/cloud/paas/autonomous-database/adbsa/support-tls-mtls-authentication.html#GUID-4C2093B7-4DF0-4CF4-BB2D-33E1FC5D5184"&gt;https://docs.oracle.com/en/cloud/paas/autonomous-database/adbsa/support-tls-mtls-authentication.html#GUID-4C2093B7-4DF0-4CF4-BB2D-33E1FC5D5184&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once TLS is enabled at Oracle Cloud Autonomous database, we can configure TLS. The only difference in the configuration will be to use only the trust store instead of configuring both the key store and the trust store.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/280af9e396.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/280af9e396.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Thank you for reading and please share any thoughts or comments.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Break it! Fix it!</title><link>https://blog.deciphermiddleware.in/posts/break-it-fix-it/</link><pubDate>Fri, 21 Oct 2022 16:10:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/break-it-fix-it/</guid><description>&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/eeb10eee51.jpg"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/eeb10eee51.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One of the items on my bucket list was to do a live stream. This item always went to procrastinate bucket. There were multiple reasons for it. First, the most apparent one is &amp;ldquo;FEAR&amp;rdquo;, fear of doing something new that I never tried before. Then comes the second hurdle, okay now I have decided I will do it but what topic shall I pick. Now whatsoever topic you choose, you will see someone in some part of the world has already delivered that topic. Okay, now for instance topic is also decided, and now how to engage the audience when you cannot see them. And after getting answers to all the questions, what if you are stuck and things are not moving in the middle of the stream? The damn tense situation you are in. So, in this blog, I will discuss my first-time experience on a live stream. First-time experiences always hold importance in your life and are it good or bad are always remembered.&lt;/p&gt;
&lt;p&gt;I did my first live stream on the MuleSoft community &lt;a href="https://www.twitch.tv/mulesoft_community"&gt;twitch&lt;/a&gt; channel and &lt;a href="https://twitter.com/MuleDev"&gt;Twitter&lt;/a&gt;🥳🥳🥳🎉🎉🎉.&lt;/p&gt;
&lt;h2 id="the-right-time"&gt;The Right Time &lt;a href="#the-right-time" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;I am a MuleSoft mentor(a program run by the MuleSoft community, you can learn more from the &lt;a href="https://developer.mulesoft.com/community/mentors"&gt;link&lt;/a&gt;). One day, while scrolling through the messages on the MuleSoft official slack channel, I found an invitation from Alex Martinez for the live stream. I saw one line in the description: &amp;ldquo;All you need to do is come live and try whatever you want&amp;rdquo;. Okay! now this is the right time and I signed up for this. The first hurdle is crossed. Now comes the biggest of all &amp;ldquo;TOPIC&amp;rdquo;😵.&lt;/p&gt;
&lt;h2 id="topic"&gt;Topic &lt;a href="#topic" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;I got a suggestion from Alex to watch previous live streams. While watching I saw we can try any tutorial which is there over the Internet and follow the steps listed there and hope for everything runs as expected 😜. Now my hunt for topic selection started. I juggled around various topics, some couldn&amp;rsquo;t be done in the specified time, some were too short, and a few of them require some extra license or some involved cost, huh!. What to do&amp;hellip;?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/d2db9d864c.gif"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/d2db9d864c.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Finally, I found one tutorial to &lt;a href="https://mulesoft-labs.dev/codelabs/customize-an-edi-x12-schema-language-file/index.html#0"&gt;customize EDI X12 Schema&lt;/a&gt; in MuleSoft. This is a great use case. Sometimes partners have a requirement for having additional fields in the EDI message structure apart from the standard document. This tutorial walks us through customizing the EDI X12 855 v4010 (Purchase order Acknowledgement) document. But let&amp;rsquo;s have some twists and alter the 850 EDI X12 v4010 (Purchase Order).&lt;/p&gt;
&lt;h2 id="d-day"&gt;D-Day &lt;a href="#d-day" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Finally, the day and time arrived. Oh! but there is a catch, the time I selected was 1:30 A.M. 12th October 22), midnight, a quiet time free from any distortions. I am ready with all my configurations and a bit nervous since it is for the first time.&lt;/p&gt;
&lt;h3 id="technical-information"&gt;Technical Information &lt;a href="#technical-information" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;EDI Electronic Data Interchange is used as a standard to transmit data among various systems. This format needs to be translated and fed to the end system for actual processing. MuleSoft x12 and EDIFACT connectors come real handy in all these.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;X12 Connector&lt;/strong&gt; : &lt;a href="https://docs.mulesoft.com/x12-edi-connector/2.9/"&gt;https://docs.mulesoft.com/x12-edi-connector/2.9/&lt;/a&gt;&lt;a href="https://docs.mulesoft.com/x12-edi-connector/2.9/"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EDIFACT Connector&lt;/strong&gt; : &lt;a href="https://docs.mulesoft.com/edifact-edi-connector/2.7/"&gt;https://docs.mulesoft.com/edifact-edi-connector/2.7/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tutorial:&lt;/strong&gt; &lt;a href="https://mulesoft-labs.dev/codelabs/customize-an-edi-x12-schema-language-file/index.html"&gt;https://mulesoft-labs.dev/codelabs/customize-an-edi-x12-schema-language-file/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sample EDI X12 850 v4010&lt;/strong&gt; : &lt;a href="https://edidev.net/edidev-ca/help/Sample_Files/850_X12-4010.txt"&gt;https://edidev.net/edidev-ca/help/Sample_Files/850_X12-4010.txt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Custom ESL files:&lt;/strong&gt; &lt;a href="https://github.com/cipherwizard9/DecipherMiddleware/tree/main/MuleSoft/custom-esl-schema"&gt;https://github.com/cipherwizard9/DecipherMiddleware/tree/main/MuleSoft/custom-esl-schema&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="experience"&gt;Experience &lt;a href="#experience" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;I was live on twitch and Twitter with our great host Alex. At first, it was awesome. Things were going smoothly. Whatever is written in the tutorial I was able to perform live, sharing the screen with Anypoint Studio.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEgPKvkjXyNDVl69ncKZAm7fXItBELzmwVExxDj_bQqJ5xGaVyo1EuQ4dzaK5SWzB_a8Wn0AMbeeqVUaj0M93_kXCHQAutEuhwkrVFemjxqwbMbnXILSl5D1O2fByl9m2gRdFM7Eght7by82fTDg8Fc1jJBny4H9IOMg5urFiSfpnDfLNDS3ewazOH63"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/cb1bd4f698.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The moment I started testing things, now the error started popping up. This was actually going in the back of my mind when everything was going smoothly. As a developer for me nothing runs properly in the first go, it has to fail first 😜. Now, stuck with one error, it took a while for me to understand the issue was just missing the keyword..yuk. While things went sideways, Alex was super supportive and kept on motivating me to fix it. I had only one thing in mind at that moment I have to fix it no matter what. The developer&amp;rsquo;s favorite tool to debug is the logs, for me they are always the savior. The moment one error was fixed, it was a breakthrough from the deadlock.&lt;/p&gt;
&lt;p&gt;One error is fixed another pops up 🤣. Then it&amp;rsquo;s like a never-ending loop&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/1037d5653f.gif"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/1037d5653f.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I kept on trying and fixing errors one by one. And finally, the moment of &lt;strong&gt;satisfaction&lt;/strong&gt; came when the code finally ran and what was required from the complete session was achieved.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/33b97e90f7.gif"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/33b97e90f7.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Overall a great experience, to follow the tutorial, &lt;strong&gt;break&lt;/strong&gt; things, identify the issue &lt;strong&gt;fix&lt;/strong&gt; the issue, and then moment for &lt;strong&gt;celebration&lt;/strong&gt; and &lt;strong&gt;satisfaction&lt;/strong&gt;.&lt;/p&gt;
&lt;h1 id="break-it-fix-it"&gt;BREAK IT! FIX IT! &lt;a href="#break-it-fix-it" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;I hope to have sessions more in the future&amp;hellip;&lt;/p&gt;
&lt;p&gt;Please do let me know your views 😇😇😇&lt;/p&gt;</description></item><item><title>[Mule 4]Catch numeric exceptions inside DataWeave</title><link>https://blog.deciphermiddleware.in/posts/mule-4-catch-numeric-exceptions-inside/</link><pubDate>Sat, 16 Jul 2022 04:32:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/mule-4-catch-numeric-exceptions-inside/</guid><description>&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/6602156a7f.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/6602156a7f.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Numbers are a simple data type, but become complex in real-time integration transformation scenarios. Number data type, we consider number system in base 10 and perform all kinds of arithmetic operations e.g. +, -, *, / etc. We do this starting in childhood: multiply two numbers, divide one number by another, or add two numbers. Now, where is the tricky part 🤔? Let’s start with, various tricky aspects and possible remedies to these.&lt;/p&gt;
&lt;p&gt;This article is published on the &lt;a href="https://www.linkedin.com/showcase/mulesoftcommunity/"&gt;MuleSoft Community&lt;/a&gt; LinkedIn page.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To continue reading please visit the below link.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://www.linkedin.com/pulse/mule-4catch-numeric-exceptions-inside-dataweave-mulesoftcommunity"&gt;https://www.linkedin.com/pulse/mule-4catch-numeric-exceptions-inside-dataweave-mulesoftcommunity&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please share your valuable feedback 😊😊😊&lt;/p&gt;</description></item><item><title>Number System Conversion in MuleSoft(Mule 4) using Dataweave</title><link>https://blog.deciphermiddleware.in/posts/number-system-conversion-in/</link><pubDate>Wed, 23 Mar 2022 05:51:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/number-system-conversion-in/</guid><description>&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLRSAAywglfL2Fz-Bc4zejQDmJYqCtXAb1AaOKT7QjmyAbX7oYbxYjAPQe9Q5iLjlakiVTPyx5NyZ414VuQfJgXW3kSmqjzn7hMnfW62uDX5Od6dqro11WkBLAJYRIusrzx6bhzyeQzoNMdIUd8osWejojTr6bTHMaGPUkJdRkfUNEEXWELE0TEQMv/s5471/hao-wang-pVq6YhmDPtk-unsplash.jpg"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/03c2d348e7.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The number 11, we call it eleven in the decimal system. Still, it can be a representation of three in a binary system or it can be seventeen in a hexadecimal system. The actual value of a number depends on the base it is calculated. It is interesting changing the base changes the value of the representation. Let us assume in some integration flow we are getting values in binary number system but target system accepts values in a decimal system or hexadecimal system or vice versa.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Examples depicting values in various number systems:&lt;/em&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;DECIMAL&lt;/th&gt;
&lt;th&gt;BINARY&lt;/th&gt;
&lt;th&gt;HEXADECIMAL&lt;/th&gt;
&lt;th&gt;OCTAL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;BASE 10&lt;/td&gt;
&lt;td&gt;BASE 2&lt;/td&gt;
&lt;td&gt;BASE 16&lt;/td&gt;
&lt;td&gt;BASE 8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;II&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;1110&lt;/td&gt;
&lt;td&gt;E&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;III&lt;/td&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;td&gt;110110&lt;/td&gt;
&lt;td&gt;36&lt;/td&gt;
&lt;td&gt;66&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IV&lt;/td&gt;
&lt;td&gt;123&lt;/td&gt;
&lt;td&gt;1111011&lt;/td&gt;
&lt;td&gt;7B&lt;/td&gt;
&lt;td&gt;173&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;V&lt;/td&gt;
&lt;td&gt;240&lt;/td&gt;
&lt;td&gt;11110000&lt;/td&gt;
&lt;td&gt;F0&lt;/td&gt;
&lt;td&gt;360&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;In our engineering days, we have studied a lot about number systems. Below is the mathematical representation of conversion logic.&lt;/p&gt;
&lt;p&gt;Let us assume:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;d&lt;/strong&gt;, represents the nth digit.&lt;br&gt;
&lt;strong&gt;b&lt;/strong&gt;, represents the base.&lt;br&gt;
&lt;strong&gt;n&lt;/strong&gt;, represents the number of digits&lt;/p&gt;
&lt;p&gt;Value(&lt;strong&gt;V&lt;/strong&gt;) of number with base b in the decimal system will be:&lt;/p&gt;
&lt;p&gt;$$
V_{10} = (Σd*b(n-1))_{10}
$$&lt;/p&gt;
&lt;p&gt;Let us take example number &lt;strong&gt;7B&lt;/strong&gt; in hexadecimal(&lt;strong&gt;base 16&lt;/strong&gt;) and use the above formula to convert to decimal.&lt;/p&gt;
&lt;p&gt;\(V_{10} = (7 * 16^{(2-1)} + 11 * 16^{(1-1)})_{10}\)&lt;/p&gt;
&lt;p&gt;\(V_{10} = (112 + 11)_{10}\)&lt;/p&gt;
&lt;p&gt;\(V_{10} = (123)_{10}\)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The above conversion was through pen and paper but how to do this in Mule?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Dataweave has built-in functions under the &lt;strong&gt;dw::core::Numbers&lt;/strong&gt; module, which can help us to perform these conversions without writing complex logic. To convert to decimal values we have below 3 functions. Let&amp;rsquo;s see usage one by one.&lt;/p&gt;
&lt;h2 id="1-fromhex"&gt;1. fromHex() &lt;a href="#1-fromhex" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This function helps to convert &lt;strong&gt;hexadecimal&lt;/strong&gt; value to &lt;strong&gt;decimal&lt;/strong&gt;. This function takes a &lt;strong&gt;hexadecimal&lt;/strong&gt; string as input and gives &lt;strong&gt;decimal&lt;/strong&gt; value as output. Example:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
import fromHex from dw::core::Numbers
output application/json
---
fromHex(&amp;#34;7B&amp;#34;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;123
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="2-frombinary"&gt;2. fromBinary() &lt;a href="#2-frombinary" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This function helps to convert the &lt;strong&gt;binary&lt;/strong&gt; string value to decimal value. This function takes a &lt;strong&gt;binary&lt;/strong&gt; string as input and gives &lt;strong&gt;decimal&lt;/strong&gt; value as output. Example:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
import fromBinary from dw::core::Numbers
output application/json
---
fromBinary(&amp;#34;110110&amp;#34;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;54
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="3-fromradixnumber"&gt;3. fromRadixNumber() &lt;a href="#3-fromradixnumber" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This function helps to convert the &lt;strong&gt;numeric value&lt;/strong&gt; in &lt;strong&gt;any base&lt;/strong&gt; to &lt;strong&gt;decimal&lt;/strong&gt; value. This function takes a &lt;strong&gt;number string&lt;/strong&gt; and &lt;strong&gt;base&lt;/strong&gt; as input and gives &lt;strong&gt;decimal&lt;/strong&gt; value as output. Example:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
import fromRadixNumber from dw::core::Numbers
output application/json
---
fromRadixNumber(&amp;#34;360&amp;#34;,8)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here, 360 is the number in octal (base 8) and 8 represents the base.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;240
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The above three ways were to convert numeric values from any base to decimal values. Dataweave also provides functions to do the reverse which is converting a decimal number to any base.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="4-tohex"&gt;4. toHex() &lt;a href="#4-tohex" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This function helps to convert a &lt;strong&gt;decimal&lt;/strong&gt; value to a &lt;strong&gt;hexadecimal&lt;/strong&gt; value. This function takes a &lt;strong&gt;decimal&lt;/strong&gt; number as input and gives a &lt;strong&gt;hexadecimal&lt;/strong&gt; string value as output. Example:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
import toHex from dw::core::Numbers
output application/json
---
toHex(54)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;#34;36&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="5-tobinary"&gt;5. toBinary() &lt;a href="#5-tobinary" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This function helps to convert a &lt;strong&gt;decimal&lt;/strong&gt; value to a &lt;strong&gt;binary&lt;/strong&gt; string value. This function takes a &lt;strong&gt;decimal&lt;/strong&gt; number as input and gives a &lt;strong&gt;binary&lt;/strong&gt; string value as output. Example:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
import toBinary from dw::core::Numbers
output application/json
---
toBinary(54)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;#34;110110&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="6-toradixnumber"&gt;6. toRadixNumber() &lt;a href="#6-toradixnumber" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This function helps to convert a &lt;strong&gt;decimal&lt;/strong&gt; value to a &lt;strong&gt;numeric string&lt;/strong&gt; value as per the specified &lt;strong&gt;base&lt;/strong&gt;. This function takes a &lt;strong&gt;decimal&lt;/strong&gt; number and &lt;strong&gt;base&lt;/strong&gt; as input and gives a string output of decimal value in the &lt;strong&gt;specified base&lt;/strong&gt;. Example:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
import toRadixNumber from dw::core::Numbers
output application/json
---
toRadixNumber(54,8)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;#34;66&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The above output is in base 8 or in octal.&lt;/p&gt;
&lt;h2 id="direct-conversion"&gt;Direct Conversion &lt;a href="#direct-conversion" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;What if we want to convert numeric value in &lt;strong&gt;base 4&lt;/strong&gt; directly to numeric value with &lt;strong&gt;base 3&lt;/strong&gt;. In such a case, we can use a combination of &lt;strong&gt;fromRadixNumber&lt;/strong&gt; and &lt;strong&gt;toRadixNumber&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;$$
(54)_{10} = (312)_{4} = (2000)_{3}
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dataweave&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;%dw 2.0
import * from dw::core::Numbers
output application/json
---
toRadixNumber(fromRadixNumber(312,4),3)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;#34;2000&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="references"&gt;References: &lt;a href="#references" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href="https://docs.mulesoft.com/dataweave/2.4/dw-numbers"&gt;https://docs.mulesoft.com/dataweave/2.4/dw-numbers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please share your valuable feedback 😊😊😊&lt;/p&gt;</description></item><item><title>Creating and Using Key-Value Lookups in MuleSoft (Mule 4)</title><link>https://blog.deciphermiddleware.in/posts/creating-and-using-key-value-lookups-in/</link><pubDate>Wed, 16 Feb 2022 17:59:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/creating-and-using-key-value-lookups-in/</guid><description>&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/99f34eaa76.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/99f34eaa76.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Lookups or key-value pairs are really helpful while developing integrations. Suppose, we get a value from the source system but the target system requires a corresponding value for that key(incoming data). One way is to store such &lt;strong&gt;cross-reference&lt;/strong&gt; in a database table and fetch values. What if, these values are not changed frequently, and accessing a database will probably pose an overhead. A better approach would be to have a static lookup file included within the Mule application. This lookup file can be a .csv, JSON, XML, Excel, etc. file. For simplicity, in this blog, we will be using &lt;strong&gt;CSV&lt;/strong&gt; files as an example for creating and using lookups in Mule 4. A CSV file is easy to maintain and use. Let&amp;rsquo;s start with the below use case.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s take a use case of Country codes. From the source system, the country field contains &lt;strong&gt;Country Name&lt;/strong&gt; e.g. &lt;strong&gt;India&lt;/strong&gt; but our target system requires 2 character &lt;strong&gt;Country Code&lt;/strong&gt; e.g. &lt;strong&gt;IN&lt;/strong&gt; as input in one of the fields. Now such fields will hardly change in a real-time scenario. We can create a csv file(country_codes.csv) as shown below.&lt;/p&gt;
&lt;h3 id="csv-file--country_codescsv"&gt;CSV File- country_codes.csv &lt;a href="#csv-file--country_codescsv" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csv" data-lang="csv"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;Country&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;CountryCode &lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;India&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;IN &lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;Indonesia&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;ID &lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;Philippines&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;PH &lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;United States&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;US &lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;Russia&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;RU &lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;Netherlands&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;NL &lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;Czech Republic&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;CZ &lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;From the source system, we are getting an address payload as shown below.&lt;/p&gt;
&lt;h3 id="source-payload"&gt;Source Payload &lt;a href="#source-payload" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;address&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;streetAdd&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;street1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;streetAdd2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;address2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;city&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;City1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;state&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;State1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;country&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Indonesia&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;zip&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;123456&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Our target system expects only country code to be sent in the payload. Below are the steps to accomplish this&lt;/p&gt;
&lt;h2 id="steps"&gt;STEPS: &lt;a href="#steps" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;1. Place the file country_codes.csv under &lt;strong&gt;src/main/resources&lt;/strong&gt;. In this example, we will place it inside a folder named &lt;strong&gt;lookup&lt;/strong&gt;. If you are using a different folder update classpath accordingly.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/fc5d237652.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/fc5d237652.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. Now, we can refer to the file inside the dataweave using the &lt;strong&gt;readUrl()&lt;/strong&gt; dataweave function.&lt;/p&gt;
&lt;p&gt;3. Let us assume input data is stored in payload, our &lt;strong&gt;dataweave transformation&lt;/strong&gt; will look as below.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
output application/json
var csvData = readUrl(&amp;#34;classpath://lookup/country_codes.csv&amp;#34;,&amp;#34;application/csv&amp;#34;)
fun lookupCC(country: String) : String =
(csvData filter ((item, index) -&amp;gt; item.Country == country))[0].CountryCode as String
---
add:{
addressLine: payload.address.streetAdd ++ &amp;#34; &amp;#34; ++ payload.address.streetAdd2,
city: payload.address.city,
state: payload.address.state,
countryCode: lookupCC(payload.address.country)
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;4. We have created a function called &lt;strong&gt;lookupCC()&lt;/strong&gt; which will take one &lt;strong&gt;String input&lt;/strong&gt; and match the incoming value of &lt;strong&gt;Country&lt;/strong&gt; in the lookup csv file and give the &lt;strong&gt;country code&lt;/strong&gt; as output. The output of the above code will look like this:&lt;/p&gt;
&lt;h3 id="output-payload"&gt;Output Payload &lt;a href="#output-payload" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;add&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;addressLine&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;street1 address2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;city&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;City1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;state&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;State1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;countryCode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ID&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;5. What if the country name is not available in the csv file, the output will come as &lt;strong&gt;null&lt;/strong&gt;. In such cases, we can update the &lt;strong&gt;function&lt;/strong&gt; and provide the &lt;strong&gt;default&lt;/strong&gt; value. For example:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;fun lookupCC(country: String) : String =
(csvData filter ((item, index) -&amp;gt; item.Country == country))[0].CountryCode as String default &amp;#34;--&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If we don&amp;rsquo;t find any matching value in the lookup file it will default country code as &amp;ldquo;&amp;ndash;&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Similarly, we can extend the function and the csv file to fetch values with multiple inputs and conditions.&lt;/p&gt;
&lt;h2 id="references"&gt;References: &lt;a href="#references" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://docs.mulesoft.com/dataweave/2.3/dw-core-functions-readurl"&gt;https://docs.mulesoft.com/dataweave/2.3/dw-core-functions-readurl&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://docs.mulesoft.com/dataweave/2.4/dataweave-cookbook-csv-lookup"&gt;https://docs.mulesoft.com/dataweave/2.4/dataweave-cookbook-csv-lookup&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Please share your valuable feedback 😊😊😊&lt;/p&gt;</description></item><item><title>Playing with XML Namespaces in Mule 4 Dataweave</title><link>https://blog.deciphermiddleware.in/posts/playing-with-xml-namespaces-in-mule-4/</link><pubDate>Sat, 22 Jan 2022 15:52:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/playing-with-xml-namespaces-in-mule-4/</guid><description>&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/1ce3dc9433.jpg"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/1ce3dc9433.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Today, the world is full of REST APIs which use JSON as a major message type. But we have a lot of applications and APIs in the middleware world which rely on XML message structures. XML messages are a bit more complex than JSON messages, as in XML messages namespaces play a vital role. A miss in the namespace can lead to errors that are sometimes unseen to normal eyes. In this blog, we will discuss various ways by which we can handle the transformation of XML messages with or without namespaces in Mule 4 using Dataweave.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#1-transforming-xml-messages-without-namespaces"&gt;Transforming XML messages without namespaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#2-transforming-xml-messages-with-namespaces"&gt;Transforming XML messages with namespaces &lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="1-transforming-xml-messages-without-namespaces"&gt;1. Transforming XML messages without namespaces &lt;a href="#1-transforming-xml-messages-without-namespaces" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This conversion is pretty simple, all we need to consider is XPath and do the mapping accordingly. This is similar to the JSON data transformation Let&amp;rsquo;s take an example of 2 XMLs, wherein both input and output XMLs don&amp;rsquo;t have namespaces. The output we need to specify is &lt;strong&gt;application/xml&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;INPUT:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;InputRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;contact&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;firstName&amp;gt;&lt;/span&gt;Test&lt;span class="nt"&gt;&amp;lt;/firstName&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;lastName&amp;gt;&lt;/span&gt;Data&lt;span class="nt"&gt;&amp;lt;/lastName&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;address&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;street1&amp;gt;&lt;/span&gt;Street1&lt;span class="nt"&gt;&amp;lt;/street1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;street2&amp;gt;&lt;/span&gt;Street2&lt;span class="nt"&gt;&amp;lt;/street2&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;city&amp;gt;&lt;/span&gt;City&lt;span class="nt"&gt;&amp;lt;/city&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;state&amp;gt;&lt;/span&gt;State&lt;span class="nt"&gt;&amp;lt;/state&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;country&amp;gt;&lt;/span&gt;Country&lt;span class="nt"&gt;&amp;lt;/country&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/address&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/contact&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/InputRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Suppose we want to extract the value of country from the above XML message. All we need to do is traverse to the node as we do in the case of JSON transformations i.e. (Assuming data is in the payload variable) &lt;strong&gt;&lt;em&gt;payload.InputRoot.contact.address.country&lt;/em&gt;&lt;/strong&gt; . Below is the dataweave file for the transformation transforming the data to a different XML format.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DATAWEAVE&lt;/strong&gt; :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
output application/xml
---
OutputRoot:{
Contact:{
Name: payload.InputRoot.contact.firstName ++ payload.InputRoot.contact.lastName,
Address :{
Street: payload.InputRoot.contact.address.street1 ++ payload.InputRoot.contact.address.street2 ,
City: payload.InputRoot.contact.address.city,
State:payload.InputRoot.contact.address.state
}
}
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;OUTPUT:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;OutputRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;Contact&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;TestData&lt;span class="nt"&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;Address&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;Street&amp;gt;&lt;/span&gt;Street1Street2&lt;span class="nt"&gt;&amp;lt;/Street&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;City&amp;gt;&lt;/span&gt;City&lt;span class="nt"&gt;&amp;lt;/City&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;State&amp;gt;&lt;/span&gt;State&lt;span class="nt"&gt;&amp;lt;/State&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/Address&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/Contact&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/OutputRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Above is the output for the dataweave file.&lt;/p&gt;
&lt;h2 id="2-transforming-xml-messages-with-namespaces"&gt;2. Transforming XML messages with namespaces. &lt;a href="#2-transforming-xml-messages-with-namespaces" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Namespaces are really important for various systems to understand the element and its data. As the same element name with a different namespace corresponds to 2 different meanings. For example element &lt;strong&gt;name&lt;/strong&gt; in an XML message with a namespace corresponding to the account namespace, is different from the element name corresponding to the &lt;strong&gt;contact&lt;/strong&gt; namespace. So the business meaning of an element differs and so does the representation. An element belonging to a particular namespace will have a target namespace denoted by &lt;strong&gt;xmlns&lt;/strong&gt; attribute. In some cases, namespaces are declared as attributes of elements and are referenced as prefixes like:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;acc:name&lt;/span&gt; &lt;span class="na"&gt;xmlns:acc=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://deciphermiddleware.in/ns/account&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;cont:name&lt;/span&gt; &lt;span class="na"&gt;xmlns:cont=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;****http://deciphermiddleware.in/ns/contact&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Let&amp;rsquo;s take the below example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;INPUT:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;InputRoot&lt;/span&gt; &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://deciphermiddleware.in/ns/sample/data&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;cont:contact&lt;/span&gt; &lt;span class="na"&gt;xmlns:cont=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://deciphermiddleware.in/ns/sample/contact&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;cont:firstName&amp;gt;&lt;/span&gt;Test&lt;span class="nt"&gt;&amp;lt;/cont:firstName&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;cont:lastName&amp;gt;&lt;/span&gt;Data&lt;span class="nt"&gt;&amp;lt;/cont:lastName&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;cont:address&lt;/span&gt; &lt;span class="na"&gt;xmlns:add=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://deciphermiddleware.in/ns/sample/address&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;add:street1&amp;gt;&lt;/span&gt;Street1&lt;span class="nt"&gt;&amp;lt;/add:street1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;add:street2&amp;gt;&lt;/span&gt;Street2&lt;span class="nt"&gt;&amp;lt;/add:street2&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;add:city&amp;gt;&lt;/span&gt;City&lt;span class="nt"&gt;&amp;lt;/add:city&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;add:state&amp;gt;&lt;/span&gt;State&lt;span class="nt"&gt;&amp;lt;/add:state&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;add:country&amp;gt;&lt;/span&gt;Country&lt;span class="nt"&gt;&amp;lt;/add:country&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/cont:address&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/cont:contact&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/InputRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, in the above case, we have multiple namespaces. To deal with such scenarios we need to declare namespaces in the Dataweave file.&lt;/p&gt;
&lt;p&gt;We can declare the namespace in the following way.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
output application/xml
ns ns0 http://deciphermiddleware.in/ns/sample/data
ns cont http://deciphermiddleware.in/ns/sample/contact
ns add http://deciphermiddleware.in/ns/sample/address
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In dataweave, an element with namespace will be denoted by &lt;strong&gt;ns# Element&lt;/strong&gt; (&lt;strong&gt;ns&lt;/strong&gt; denotes namespace prefix as declared, &lt;strong&gt;Element&lt;/strong&gt; is the name of node or element of XML and, &lt;strong&gt;#&lt;/strong&gt; acts as separator)&lt;/p&gt;
&lt;p&gt;Suppose we need to extract data of the country, now dataweave expression for the same will be &amp;ldquo;&lt;strong&gt;&lt;em&gt;payload.ns0#InputRoot.cont#contact.cont#address.add#country&lt;/em&gt;&lt;/strong&gt; &amp;quot;&lt;/p&gt;
&lt;p&gt;Combining the above parameters, below is a sample dataweave file that will output the XML message generated from the above sample input XML, having different namespaces.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DATAWEAVE:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
output application/xml
ns ns0 http://deciphermiddleware.in/ns/sample/data
ns cont http://deciphermiddleware.in/ns/sample/contact
ns add http://deciphermiddleware.in/ns/sample/address
ns ns1 http://deciphermiddleware.in/ns/sample/data1
ns cont1 http://deciphermiddleware.in/ns/sample/contact1
ns add1 http://deciphermiddleware.in/ns/sample/address1
---
ns1#OutputRoot:{
cont1#Contact:{
cont1#Name: payload.ns0#InputRoot.cont#contact.cont#firstName ++ payload.ns0#InputRoot.cont#contact.cont#lastName,
add1#Address :{
add1#Street: payload.ns0#InputRoot.cont#contact.cont#address.add#street1 ++ payload.ns0#InputRoot.cont#contact.cont#address.add#street2 ,
add1#City: payload.ns0#InputRoot.cont#contact.cont#address.add#city,
add1#State:payload.ns0#InputRoot.cont#contact.cont#address.add#state,
add1#Country:payload.ns0#InputRoot.cont#contact.cont#address.add#country
}
}
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Below is the output for the above dataweave.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OUTPUT:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ns1:OutputRoot&lt;/span&gt; &lt;span class="na"&gt;xmlns:ns1=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://deciphermiddleware.in/ns/sample/data1&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;cont1:Contact&lt;/span&gt; &lt;span class="na"&gt;xmlns:cont1=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://deciphermiddleware.in/ns/sample/contact1&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;cont1:Name&amp;gt;&lt;/span&gt;TestData&lt;span class="nt"&gt;&amp;lt;/cont1:Name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;add1:Address&lt;/span&gt; &lt;span class="na"&gt;xmlns:add1=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://deciphermiddleware.in/ns/sample/address1&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;add1:Street&amp;gt;&lt;/span&gt;Street1Street2&lt;span class="nt"&gt;&amp;lt;/add1:Street&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;add1:City&amp;gt;&lt;/span&gt;City&lt;span class="nt"&gt;&amp;lt;/add1:City&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;add1:State&amp;gt;&lt;/span&gt;State&lt;span class="nt"&gt;&amp;lt;/add1:State&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;add1:Country&amp;gt;&lt;/span&gt;Country&lt;span class="nt"&gt;&amp;lt;/add1:Country&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/add1:Address&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/cont1:Contact&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/ns1:OutputRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="references"&gt;References: &lt;a href="#references" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.mulesoft.com/dataweave/2.3/dataweave-cookbook-include-xml-namespaces"&gt;https://docs.mulesoft.com/dataweave/2.3/dataweave-cookbook-include-xml-namespaces&lt;/a&gt;&lt;a href="https://docs.mulesoft.com/dataweave/2.3/dataweave-cookbook-include-xml-namespaces"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Please share your valuable feedback 😊😊😊&lt;/p&gt;</description></item><item><title>Tips and tricks to handle dateTime formats in Mule 4</title><link>https://blog.deciphermiddleware.in/posts/tips-and-tricks-to-handle-datetime/</link><pubDate>Sun, 12 Dec 2021 17:17:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/tips-and-tricks-to-handle-datetime/</guid><description>&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOqRM05QNLd-r4LoUJExyBw-0OKplrdEfChQWiqfLzkdwYIbJSFUbYetD_blClKT_IXz1-9xj8uDyAYiPcHqhFQvamQPkfMJjdiNFr0Ke6wTvsbDTrNo-WPfA-M2th_hR3t2IzT4y-srw/"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/9bb41644ca.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We generally come across various scenarios while developing integrations, wherein we have to deal with multiple formats of date, time, or DateTime. Sometimes source systems can send date data in only one format which may or may not be accepted by target systems, which we have to handle using dataweave expressions. In this blog, we will be going through a couple of generic scenarios which we come across frequently. For example, if we use &lt;strong&gt;now()&lt;/strong&gt; in dataweave, we get an output as below.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DataWeave expression:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
output application/json
---
now()
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;#34;2021-12-12T14:27:48.064709Z&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The above output is in the format of DateTime, and from this, it is easy to convert or extract and date or time values.&lt;/p&gt;
&lt;h2 id="scenario-1"&gt;Scenario #1 &lt;a href="#scenario-1" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;What if we get date time in some different format, for e.g. &amp;ldquo;&lt;strong&gt;2021/12/12 14.27.48&lt;/strong&gt; &amp;quot; and we just need to extract date and time in a different format as &amp;ldquo;&lt;strong&gt;12-12-2021 14:27:48&lt;/strong&gt; &amp;ldquo;. The best way is to cast the input date string to &lt;strong&gt;LocalDateTime&lt;/strong&gt; by providing format and then convert to the &lt;strong&gt;string&lt;/strong&gt; by providing the desired format.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DataWeave expression:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
output application/json
---
&amp;#34;2021/12/12 14.27.48&amp;#34; as LocalDateTime {format:&amp;#34;yyyy/MM/dd HH.mm.ss&amp;#34;} as String {format:&amp;#34;dd-MM-yyyy HH:mm:ss&amp;#34;}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;#34;12-12-2021 14:27:48&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="scenario-2"&gt;Scenario #2 &lt;a href="#scenario-2" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Sometimes, we have to insert dateTime to databases like SQL Server, Oracle database, etc. The generally accepted format for the database date column through Mule4 is &amp;ldquo;&lt;strong&gt;yyyy-MM-dd HH:mm:ss&lt;/strong&gt; &amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DataWeave expression:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
output application/json
---
now() as String {format:&amp;#34;yyyy-MM-dd HH:mm:ss&amp;#34;}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;#34;2021-12-12 14:27:48&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="scenario-3"&gt;Scenario #3 &lt;a href="#scenario-3" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;What if we want to extract year and append Y in the end to output for example &amp;ldquo;2021Y&amp;rdquo;. If we use the format as &amp;ldquo;yyyyY&amp;rdquo; or &amp;ldquo;yY&amp;rdquo;, the output will come as a year repeated 2 times. The reason is y or Y is formatting character. If we want explicit Y to be displayed, one way could be to extract Year and then concatenate year with Y. Another way is to escape the formatting character by enclosing it in &amp;lsquo;&amp;rsquo;. For example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DataWeave expression:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-dw" data-lang="dw"&gt;%dw 2.0
output application/json
---
now() as String {format:&amp;#34;yyyy&amp;#39;Y&amp;#39;&amp;#34;}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;#34;2021Y&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Tabular representation of various formatting characters that can be used.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DateTime:&lt;/strong&gt; &amp;ldquo;2021-08-09T15:37:29.519633+05:30&amp;rdquo;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Character(s)&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;y&lt;/td&gt;
&lt;td&gt;Year of the era (BCE or CE) or calendar year&lt;/td&gt;
&lt;td&gt;2021&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;yy&lt;/td&gt;
&lt;td&gt;Calendar Year limit to 2 digits&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Y&lt;/td&gt;
&lt;td&gt;Week based year&lt;/td&gt;
&lt;td&gt;2021&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YY&lt;/td&gt;
&lt;td&gt;Week based year limit to 2 digits&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;u&lt;/td&gt;
&lt;td&gt;Calendar Year without era (BCE or CE)&lt;/td&gt;
&lt;td&gt;2021&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;uu&lt;/td&gt;
&lt;td&gt;Calendar Year limit to 2 digits&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;M&lt;/td&gt;
&lt;td&gt;The month with no leading 0&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MM&lt;/td&gt;
&lt;td&gt;The month with leading 0&lt;/td&gt;
&lt;td&gt;08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MMM&lt;/td&gt;
&lt;td&gt;Month name with 3 characters&lt;/td&gt;
&lt;td&gt;Aug&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MMMM&lt;/td&gt;
&lt;td&gt;Complete Month name&lt;/td&gt;
&lt;td&gt;August&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;d&lt;/td&gt;
&lt;td&gt;Day of the Month&lt;/td&gt;
&lt;td&gt;09&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;Day of the Year&lt;/td&gt;
&lt;td&gt;221&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E&lt;/td&gt;
&lt;td&gt;Abbreviated day of the Week&lt;/td&gt;
&lt;td&gt;Mon&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EEEE&lt;/td&gt;
&lt;td&gt;Day of the Week&lt;/td&gt;
&lt;td&gt;Monday&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;h&lt;/td&gt;
&lt;td&gt;An hour in 12 hour clock (1-12)&lt;/td&gt;
&lt;td&gt;03&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H&lt;/td&gt;
&lt;td&gt;An hour in 24 hour clock (0-23)&lt;/td&gt;
&lt;td&gt;03&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;m&lt;/td&gt;
&lt;td&gt;Minute of the hour&lt;/td&gt;
&lt;td&gt;37&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;s&lt;/td&gt;
&lt;td&gt;Second of the Minute&lt;/td&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;S&lt;/td&gt;
&lt;td&gt;Fraction of the second&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;a&lt;/td&gt;
&lt;td&gt;AM/PM&lt;/td&gt;
&lt;td&gt;PM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Timezone Offset&lt;/td&gt;
&lt;td&gt;+0530&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ZZZZ&lt;/td&gt;
&lt;td&gt;Timezone Offset&lt;/td&gt;
&lt;td&gt;GMT+05:30&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="references"&gt;References: &lt;a href="#references" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://docs.mulesoft.com/dataweave/2.3/dataweave-cookbook-format-dates"&gt;https://docs.mulesoft.com/dataweave/2.3/dataweave-cookbook-format-dates&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please share your valuable feedback 😊😊😊&lt;/p&gt;</description></item><item><title>Reading .csv files with and without headers using different delimiters in Mule 4</title><link>https://blog.deciphermiddleware.in/posts/reading-csv-files-with-and-without/</link><pubDate>Wed, 18 Aug 2021 18:29:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/reading-csv-files-with-and-without/</guid><description>&lt;p&gt;Flat files especially .csv files are very common for data loading and data transfers. We generally come across scenarios where we want to read a .csv file, which may or may not contain the header row. Also, there is a chance .csv files don&amp;rsquo;t have &amp;lsquo;,&amp;rsquo;(comma) as delimiter rather has &amp;lsquo;&amp;rsquo;|&amp;quot;(pipe) as a delimiter or any other character as a delimiter. This article will discuss various ways to read such files in Mule 4 and create a JSON output of it.&lt;/p&gt;
&lt;h2 id="mule-flow"&gt;Mule Flow &lt;a href="#mule-flow" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This will be a simple flow, where we will be reading a file using a file connector. Then convert the read data to JSON using transform message. Finally, log the JSON payload to the console using Logger. Here, we are not doing any complex transformation, it will be more like a MIME type conversion from application/csv to application/json, for better understanding the structure of input data.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMl92zLt0kZg3C7lyvpGrZN0rxyLhsZ5Qkt_zW1JWW92BgOE8pTxybSr0gIkUTXo2ErF3x2uYnDgfGSfPyya0hjHn5vmAsB8hbOu8jqn1ANyQM09adkyjmXKS-mlvALIAD3-1TqxDeY1A/"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/5f003c74e5.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="steps"&gt;Steps: &lt;a href="#steps" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Create a flow in your mule application.&lt;/li&gt;
&lt;li&gt;Drag and drop file connector with operation &amp;ldquo;On New or Updated file&amp;rdquo; on the source of mule flow.&lt;/li&gt;
&lt;li&gt;In file connector properties under the general tab, specify or create a new connector configuration. Provide input directory, and polling frequency(here it is kept as 10 seconds). Specify the post-processing action like deleting the file, moving the file, or renaming the file. As per the below configurations, the mule application will look for a file in the inbound folder every 10 seconds. If the file is available, then it will process and move the file to the archive directory, deleting the file from the inbound location.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/f9d2de97bb.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/f9d2de97bb.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Drag and drop &amp;ldquo;Transform Message&amp;rdquo; from mule palette, and have output mime type as &amp;ldquo;application/json&amp;rdquo; as below.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/4b263cbdf2.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/4b263cbdf2.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Drag and drop logger from mule palette. Here we will be logging payload after transformation.&lt;/li&gt;
&lt;li&gt;The final mule flow will look as below.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/d3a5fa0af7.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/d3a5fa0af7.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="csv-file-having-header-row-in-the-file-content"&gt;.csv file having header row in the file content &lt;a href="#csv-file-having-header-row-in-the-file-content" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Let us take below employeeData.csv file as an example. For simplicity, we are taking dummy data of only 5 employees.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csv" data-lang="csv"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;first name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;last name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;gender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;designation&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Dom&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Lissett&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;dlissett0@test.com&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Male&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Recruiter&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Susan&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Moogan&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;smoogan1@test.com&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Female&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Executive Secretary&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Carl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Cotesford&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;lcotesford2@test.com&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Male&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Tech Architect&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Debor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Sprakes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;dsprakes3@test.com&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Female&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Account Coordinator&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Priscella&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Genny&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;pgenny5@test.com&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Female&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Environmental Tech&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this example, data in the first row signifies the headers separated by &amp;ldquo;,&amp;rdquo; as a delimiter. Rest all other rows represent employee data.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Since the above .csv file contains a header row, all we need to do is to set the MIME type of file connector as &amp;ldquo;application/csv&amp;rdquo;. To do so, click on the file connector. Click on MIME Type and select &amp;ldquo;application/csv&amp;rdquo; from the drop-down list of values.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/ef5cd1c729.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/ef5cd1c729.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Place the file as defined in the file connector. Run the application. We will see the JSON response logged in the console as shown below.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;INFO 2021-07-27 23:08:55,916 &lt;span class="o"&gt;[[&lt;/span&gt;MuleRuntime&lt;span class="o"&gt;]&lt;/span&gt;.uber.03: &lt;span class="o"&gt;[&lt;/span&gt;csv-read&lt;span class="o"&gt;]&lt;/span&gt;.csv-readFlow.CPU_INTENSIVE @1e42a374&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;processor: csv-readFlow/processors/1&lt;span class="p"&gt;;&lt;/span&gt; event: 895d1200-efb1-11eb-8134-d4d25289cb8d&lt;span class="o"&gt;]&lt;/span&gt; org.mule.runtime.core.internal.processor.LoggerMessageProcessor: &lt;span class="o"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;first name&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Dom&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;last name&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Lissett&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;email&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;dlissett0@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;gender&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Male&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;designation&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Recruiter&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;first name&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Susan&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;last name&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Moogan&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;email&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;smoogan1@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;gender&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Female&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;designation&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Executive Secretary&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;3&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;first name&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Carl&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;last name&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Cotesford&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;email&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;lcotesford2@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;gender&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Male&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;designation&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Tech Architect&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;4&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;first name&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Debor&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;last name&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Sprakes&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;email&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;dsprakes3@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;gender&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Female&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;designation&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Account Coordinator&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;5&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;first name&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Priscella&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;last name&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Genny&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;email&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;pgenny5@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;gender&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Female&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;designation&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Environmental Tech&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Data in the first row became the keys for the JSON output.&lt;/p&gt;
&lt;h2 id="csv-file-without-header-row-in-the-file-content"&gt;.csv file without header row in the file content &lt;a href="#csv-file-without-header-row-in-the-file-content" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Let us assume there is no header row in the content of employeeData.csv&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csv" data-lang="csv"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Dom&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Lissett&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;dlissett0@test.com&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Male&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Recruiter&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Susan&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Moogan&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;smoogan1@test.com&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Female&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Executive Secretary&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Carl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Cotesford&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;lcotesford2@test.com&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Male&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Tech Architect&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Debor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Sprakes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;dsprakes3@test.com&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Female&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Account Coordinator&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Priscella&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Genny&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;pgenny5@test.com&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Female&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Environmental Tech&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If we try to run with the same configurations, it will take the first row as keys and console output will look like.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;INFO 2021-07-27 23:21:15,609 &lt;span class="o"&gt;[[&lt;/span&gt;MuleRuntime&lt;span class="o"&gt;]&lt;/span&gt;.uber.03: &lt;span class="o"&gt;[&lt;/span&gt;csv-read&lt;span class="o"&gt;]&lt;/span&gt;.csv-readFlow.CPU_INTENSIVE @1e42a374&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;processor: csv-readFlow/processors/1&lt;span class="p"&gt;;&lt;/span&gt; event: 4254cbd0-efb3-11eb-8134-d4d25289cb8d&lt;span class="o"&gt;]&lt;/span&gt; org.mule.runtime.core.internal.processor.LoggerMessageProcessor: &lt;span class="o"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Dom&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Susan&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Lissett&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Moogan&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;dlissett0@test.com&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;smoogan1@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Male&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Female&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Recruiter&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Executive Secretary&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;3&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Dom&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Carl&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Lissett&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Cotesford&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;dlissett0@test.com&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;lcotesford2@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Male&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Male&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Recruiter&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Tech Architect&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;4&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Dom&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Debor&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Lissett&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Sprakes&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;dlissett0@test.com&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;dsprakes3@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Male&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Female&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Recruiter&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Account Coordinator&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;5&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Dom&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Priscella&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Lissett&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Genny&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;dlissett0@test.com&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;pgenny5@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Male&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Female&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Recruiter&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Environmental Tech&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;By default, after setting MIME type to &amp;ldquo;application/json&amp;rdquo;, mule considers the first row as the header row. In such cases, we don&amp;rsquo;t want to consider the first row as the header row.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Click on the file connector. Click on MIME Type. Click on add parameter. Set key as &amp;ldquo;header&amp;rdquo; and value as &amp;ldquo;false&amp;rdquo;. Save the changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/860abcc67d.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/860abcc67d.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now, by using the same file, we will be able to read data properly. But in this case, autogenerated values for keys like coloumn_0, column_1, etc. will be populated. Below is a sample log snippet.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;INFO 2021-07-27 23:35:57,158 &lt;span class="o"&gt;[[&lt;/span&gt;MuleRuntime&lt;span class="o"&gt;]&lt;/span&gt;.uber.05: &lt;span class="o"&gt;[&lt;/span&gt;csv-read&lt;span class="o"&gt;]&lt;/span&gt;.csv-readFlow.CPU_INTENSIVE @6fbaa2fe&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;processor: csv-readFlow/processors/1&lt;span class="p"&gt;;&lt;/span&gt; event: 4fbf0590-efb5-11eb-8134-d4d25289cb8d&lt;span class="o"&gt;]&lt;/span&gt; org.mule.runtime.core.internal.processor.LoggerMessageProcessor: &lt;span class="o"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_0&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_1&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Dom&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_2&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Lissett&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_3&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;dlissett0@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_4&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Male&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_5&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Recruiter&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_0&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_1&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Susan&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_2&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Moogan&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_3&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;smoogan1@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_4&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Female&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_5&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Executive Secretary&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_0&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;3&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_1&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Carl&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_2&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Cotesford&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_3&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;lcotesford2@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_4&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Male&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_5&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Tech Architect&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_0&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;4&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_1&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Debor&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_2&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Sprakes&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_3&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;dsprakes3@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_4&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Female&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_5&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Account Coordinator&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_0&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;5&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_1&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Priscella&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_2&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Genny&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_3&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;pgenny5@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_4&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Female&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_5&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Environmental Tech&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="csv-file-without-header-row-and-having-a--as-a-delimiter"&gt;.csv file without header row and having a &amp;ldquo;|&amp;rdquo; as a delimiter &lt;a href="#csv-file-without-header-row-and-having-a--as-a-delimiter" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If we replace &amp;ldquo;,&amp;rdquo; delimiter with &amp;ldquo;|&amp;rdquo; delimiter in employeeData.csv&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csv" data-lang="csv"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;1|Dom|Lissett|dlissett0@test.com|Male|Recruiter&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;2|Susan|Moogan|smoogan1@test.com|Female|Executive Secretary&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;3|Carl|Cotesford|lcotesford2@test.com|Male|Tech Architect&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;4|Debor|Sprakes|dsprakes3@test.com|Female|Account Coordinator&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;5|Priscella|Genny|pgenny5@test.com|Female|Environmental Tech&lt;/span&gt;&lt;span class="p"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On running the same mule application with the above data, the output of the above employeeData.csv file will be.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;INFO 2021-07-27 23:42:06,938 &lt;span class="o"&gt;[[&lt;/span&gt;MuleRuntime&lt;span class="o"&gt;]&lt;/span&gt;.uber.05: &lt;span class="o"&gt;[&lt;/span&gt;csv-read&lt;span class="o"&gt;]&lt;/span&gt;.csv-readFlow.CPU_INTENSIVE @6fbaa2fe&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;processor: csv-readFlow/processors/1&lt;span class="p"&gt;;&lt;/span&gt; event: 2c2f0f20-efb6-11eb-8134-d4d25289cb8d&lt;span class="o"&gt;]&lt;/span&gt; org.mule.runtime.core.internal.processor.LoggerMessageProcessor: &lt;span class="o"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_0&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;1|Dom|Lissett|dlissett0@test.com|Male|Recruiter&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_0&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;2|Susan|Moogan|smoogan1@test.com|Female|Executive Secretary&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_0&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;3|Carl|Cotesford|lcotesford2@test.com|Male|Tech Architect&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_0&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;4|Debor|Sprakes|dsprakes3@test.com|Female|Account Coordinator&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_0&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;5|Priscella|Genny|pgenny5@test.com|Female|Environmental Tech&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, we are getting only one key-value pair for each row. By default mule considers &amp;ldquo;,&amp;rdquo; as delimiter for &amp;ldquo;application/csv&amp;rdquo; MIME type data. We need to explicitly define &amp;ldquo;|&amp;rdquo; as a delimiter in parameters under the MIME type.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Click on the file connector. Click on MIME Type. Click on add parameter. Set Key as &amp;ldquo;separator&amp;rdquo; and Value as &amp;ldquo;|&amp;rdquo;. Save the changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/04b39e8330.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/04b39e8330.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now, by using the same file, we will be able to read data properly as shown below.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;INFO 2021-07-27 23:51:57,557 &lt;span class="o"&gt;[[&lt;/span&gt;MuleRuntime&lt;span class="o"&gt;]&lt;/span&gt;.uber.06: &lt;span class="o"&gt;[&lt;/span&gt;csv-read&lt;span class="o"&gt;]&lt;/span&gt;.csv-readFlow.CPU_INTENSIVE @6efd4175&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;processor: csv-readFlow/processors/1&lt;span class="p"&gt;;&lt;/span&gt; event: 8c31a710-efb7-11eb-8134-d4d25289cb8d&lt;span class="o"&gt;]&lt;/span&gt; org.mule.runtime.core.internal.processor.LoggerMessageProcessor: &lt;span class="o"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_0&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_1&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Dom&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_2&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Lissett&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_3&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;dlissett0@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_4&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Male&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_5&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Recruiter&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_0&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_1&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Susan&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_2&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Moogan&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_3&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;smoogan1@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_4&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Female&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_5&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Executive Secretary&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_0&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;3&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_1&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Carl&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_2&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Cotesford&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_3&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;lcotesford2@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_4&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Male&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_5&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Tech Architect&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_0&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;4&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_1&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Debor&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_2&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Sprakes&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_3&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;dsprakes3@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_4&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Female&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_5&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Account Coordinator&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_0&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;5&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_1&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Priscella&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_2&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Genny&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_3&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;pgenny5@test.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_4&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Female&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;column_5&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Environmental Tech&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="references"&gt;References: &lt;a href="#references" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href="https://docs.mulesoft.com/mule-runtime/4.3/dataweave-formats-csv"&gt;https://docs.mulesoft.com/mule-runtime/4.3/dataweave-formats-csv&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please share your valuable feedback 😊&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This is a repost of the LinkedIn &lt;a href="https://www.linkedin.com/pulse/reading-csv-files-without-headers-using-different-delimiters-davar/"&gt;article&lt;/a&gt;&amp;hellip;.&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>