<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>OIC on DecipherMiddleware</title><link>https://blog.deciphermiddleware.in/tags/oic/</link><description>Recent content in OIC on DecipherMiddleware</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sat, 28 Aug 2021 17:52:00 +0000</lastBuildDate><atom:link href="https://blog.deciphermiddleware.in/tags/oic/index.xml" rel="self" type="application/rss+xml"/><item><title>Tips and Tricks for handling numbers in BPEL or OIC</title><link>https://blog.deciphermiddleware.in/posts/tips-and-tricks-for-handling-numbers-in/</link><pubDate>Sat, 28 Aug 2021 17:52:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/tips-and-tricks-for-handling-numbers-in/</guid><description>&lt;p&gt;While integrating with multiple systems and moving data from one system to the other, we generally come across scenarios, wherein we need to change the format of the number or perform operations like floor, ceil, round, divide, multiply, add, etc. on numbers. We will be going through various mathematical functions available in XSLT 1.0, which would be helpful in such scenarios, and also some generic errors which we encounter usually.&lt;/p&gt;
&lt;p&gt;&lt;a href="#mathematical-operations"&gt;Mathematical Operations&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#1-divide"&gt;Divide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#2-multiply"&gt;Multiply&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#3-add"&gt;Add&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#4-subtract"&gt;Subtract&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#5-square-root"&gt;Square-root&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#6-round"&gt;Round&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#7-floor"&gt;Floor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#8-ceil"&gt;Ceil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#9-advanced-number-formatting"&gt;Advanced Number formatting&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/feeds/posts/default?alt=rss&amp;amp;max-results=150#errors"&gt;Common Errors&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="mathematical-operations"&gt;Mathematical Operations &lt;a href="#mathematical-operations" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="1-divide"&gt;1. Divide &lt;a href="#1-divide" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To divide 2 numbers, we can use the &lt;strong&gt;div&lt;/strong&gt; operator to divide two numbers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Syntax:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$num1 div $num2
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let us assume we want to divide 120 by 7.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;divide&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;120 div 7&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/divide&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&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;divide&amp;gt;&lt;/span&gt;17.14285714285714285714&lt;span class="nt"&gt;&amp;lt;/divide&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2-multiply"&gt;2. Multiply &lt;a href="#2-multiply" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To multiply 2 numbers, we can use the * operator.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Syntax:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$num1 * $num2
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let us assume we want to multiply 120 by 7.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;multiply&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;120 * 7&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/multiply&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&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;multiply&amp;gt;&lt;/span&gt;840&lt;span class="nt"&gt;&amp;lt;/multiply&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="3-add"&gt;3. Add &lt;a href="#3-add" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To add 2 numbers, we can use the &lt;strong&gt;+&lt;/strong&gt; operator.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Syntax:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$num1 + $num2
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let us assume we want to add 120 and 7.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;add&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;120 + 7&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/add&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&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;add&amp;gt;&lt;/span&gt;127&lt;span class="nt"&gt;&amp;lt;/add&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="4-subtract"&gt;4. Subtract &lt;a href="#4-subtract" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To subtract one number from another, we can use the &lt;strong&gt;-&lt;/strong&gt; operator.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Syntax:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$num1 - $num2
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let us assume we want to subtract 7 from 120.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;subtract&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;120 - 7&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/subtract&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&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;subtract&amp;gt;&lt;/span&gt;113&lt;span class="nt"&gt;&amp;lt;/subtract&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="5-square-root"&gt;5. Square Root &lt;a href="#5-square-root" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To find a square root of a number, we can use the &lt;strong&gt;oraext:square-root&lt;/strong&gt; function.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Syntax:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;oraext:square-root($number)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let us assume we want to find a square root of 121.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;square-root&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;oraext:square-root(121)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/square-root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&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;square-root&amp;gt;&lt;/span&gt;11&lt;span class="nt"&gt;&amp;lt;/square-root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="6-round"&gt;6. Round &lt;a href="#6-round" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To round a number to the nearest integer we can use the round($number) function available in XSLT.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Syntax:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;round($number)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;roundInt&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;round(17.64285714285714285714)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/roundInt&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&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;roundInt&amp;gt;&lt;/span&gt;18&lt;span class="nt"&gt;&amp;lt;/roundInt&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What if we want to round the number to 2 or 3 decimal places. Since the round function only takes one argument, we cannot pass the number of decimal digits we want to round the number to. To do so we can try the below-mentioned method.&lt;/p&gt;
&lt;p&gt;We can multiply the number by 10m, round the number, and then divide the result by 10m. Here, m denotes the number of decimal places.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Pseudo Code:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;(round($number * 10 m) )/ 10 m
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let us assume we want to round to two decimal places. Here, the value of m will be 2. 10m will be equal to 100.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;roundDec1&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;round(17.64285714285714285714 * 100 ) div 100&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/roundDec1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&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;roundDec1&amp;gt;&lt;/span&gt;17.64&lt;span class="nt"&gt;&amp;lt;/roundDec1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="7-floor"&gt;7. Floor &lt;a href="#7-floor" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To return the largest integer less than or equal to the number we can use the floor($number) function available in XSLT.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Syntax:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;floor($number)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;floorInt&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;floor(17.64285714285714285714)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/floorInt&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&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;floorInt&amp;gt;&lt;/span&gt;17&lt;span class="nt"&gt;&amp;lt;/floorInt&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What if we want to perform floor operation on the number and have output with 2 or 3 decimal places. Since the floor function only takes one argument, we cannot pass the number of decimal digits we want to floor the number to. To do so we can try the below-mentioned method.&lt;/p&gt;
&lt;p&gt;We can multiply the number by 10m, floor the number, and then divide the result by 10m. Here, m denotes the number of decimal places.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Pseudo Code:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;(floor($number * 10 m) )/ 10 m&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let us assume we want to floor the number to three decimal places. Here, the value of m will be 3. 10m will be equal to 1000.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;floorDec1&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;floor(17.64285714285714285714 * 1000 ) div 1000&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/floorDec1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&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;floorDec1&amp;gt;&lt;/span&gt;17.642&lt;span class="nt"&gt;&amp;lt;/floorDec1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="8-ceil"&gt;8. Ceil &lt;a href="#8-ceil" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To return the largest integer greater than or equal to the number we can use the ceiling($number) function available in XSLT.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Syntax:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ceiling($number)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ceilInt&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ceiling(17.14285714285714285714)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/ceilInt&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&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;ceilInt&amp;gt;&lt;/span&gt;18&lt;span class="nt"&gt;&amp;lt;/ceilInt&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What if we want to perform ceiling operation on the number and have output with 2 or 3 decimal places. Since the ceiling function only takes one argument, we cannot pass the number of decimal digits we want to ceil the number to. To do so we can try the below-mentioned method.&lt;/p&gt;
&lt;p&gt;We can multiply the number by 10m, ceiling the number, and then divide the result by 10m. Here, m denotes the number of decimal places.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Pseudo Code:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;(ceiling($number * 10 m) )/ 10 m
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let us assume we want to ceiling the number to three decimal places. Here, the value of m will be 3. 10m will be equal to 1000.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;ceilDec1&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ceiling(17.14285714285714285714 * 1000 ) div 1000&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/ceilDec1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&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;ceilDec1&amp;gt;&lt;/span&gt;17.143&lt;span class="nt"&gt;&amp;lt;/ceilDec1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="9-advanced-number-formatting"&gt;9. Advanced Number formatting &lt;a href="#9-advanced-number-formatting" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;We may come across the scenarios especially when dealing with financial or accounting integrations, wherein we want the numbers like &lt;strong&gt;1234.56&lt;/strong&gt; , &lt;strong&gt;45&lt;/strong&gt; to be formatted like &lt;strong&gt;1,234.56&lt;/strong&gt; , &lt;strong&gt;$45.00&lt;/strong&gt; , etc. One common way, while developing integration which we opt for, is multiple substrings and then multiple concatenations. There is a built-in function format-number, which can come in really handy in such situations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Syntax:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;format-number($number,$format,[$decimal-format])
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note: Here $decimal-format parameter is optional and we have not used it in examples.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Format Character Table&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;S.No.&lt;/th&gt;
&lt;th&gt;Character&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Representation for digit. For 0 after the decimal and before the number, it is present. For example, the number 1 with the format as &amp;lsquo;00.0&amp;rsquo; will give 01.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;#&lt;/td&gt;
&lt;td&gt;Representation for digit. For 0 after the decimal and before the number, it is absent. For example, the number 1 with the format as &amp;lsquo;##.#&amp;rsquo; will give 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;.&lt;/td&gt;
&lt;td&gt;Separator for decimal.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;,&lt;/td&gt;
&lt;td&gt;Group Separator. Suppose we want to separate thousands, we may use like #,###.##, When 1000 is passed as input, the output becomes 1,000.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;%&lt;/td&gt;
&lt;td&gt;Represent number in %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;;&lt;/td&gt;
&lt;td&gt;Separator to define different formats for negative and positive numbers.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Format number performs the round operation by default(&lt;strong&gt;&lt;em&gt;which is banker&amp;rsquo;s rounding&lt;/em&gt;&lt;/strong&gt;) to the number of decimal places defined in format. To understand more on how can we use various formats. Please find below the table consisting of various use cases&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;S.No.&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Input Number&lt;/th&gt;
&lt;th&gt;Formatted Number&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Always having two Decimal digits&lt;/td&gt;
&lt;td&gt;#.00&lt;/td&gt;
&lt;td&gt;123.456&lt;/td&gt;
&lt;td&gt;123.46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;123.4&lt;/td&gt;
&lt;td&gt;123.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Having a maximum of 2 decimal digits&lt;/td&gt;
&lt;td&gt;#.##&lt;/td&gt;
&lt;td&gt;123.456&lt;/td&gt;
&lt;td&gt;123.46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;123&lt;/td&gt;
&lt;td&gt;123&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Creating a number in Currency Format&lt;/td&gt;
&lt;td&gt;$#,###,###.00&lt;/td&gt;
&lt;td&gt;123456.789&lt;/td&gt;
&lt;td&gt;$123,456.79&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Display number in percentage&lt;/td&gt;
&lt;td&gt;0.13245&lt;/td&gt;
&lt;td&gt;##.##%&lt;/td&gt;
&lt;td&gt;13.25%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Having different formats for positive and negative numbers.&lt;/td&gt;
&lt;td&gt;#.000;(#.000)&lt;/td&gt;
&lt;td&gt;132.45&lt;/td&gt;
&lt;td&gt;132.450&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;-132.45&lt;/td&gt;
&lt;td&gt;(132.450)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;format1&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;format-number(123.456, &amp;#39;#.00&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/format1&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;format1-1&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;format-number(123.4, &amp;#39;#.00&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/format1-1&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;format2&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;format-number(123.456, &amp;#39;#.##&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/format2&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;format2-1&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;format-number(123, &amp;#39;#.##&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/format2-1&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;format3&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;format-number(123456.789, &amp;#39;$#,###,###.00&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/format3&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;format4&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;format-number(0.13245, &amp;#39;##.##%&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/format4&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;format5&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;format-number(132.45, &amp;#39;#.000;(#.000)&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/format5&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;format5-1&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;format-number(-132.45, &amp;#39;#.000;(#.000)&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/format5-1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Output&lt;/em&gt;&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;format1&amp;gt;&lt;/span&gt;123.46&lt;span class="nt"&gt;&amp;lt;/format1&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;format1-1&amp;gt;&lt;/span&gt;123.40&lt;span class="nt"&gt;&amp;lt;/format1-1&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;format2&amp;gt;&lt;/span&gt;123.46&lt;span class="nt"&gt;&amp;lt;/format2&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;format2-1&amp;gt;&lt;/span&gt;123&lt;span class="nt"&gt;&amp;lt;/format2-1&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;format3&amp;gt;&lt;/span&gt;$123,456.79&lt;span class="nt"&gt;&amp;lt;/format3&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;format4&amp;gt;&lt;/span&gt;13.25%&lt;span class="nt"&gt;&amp;lt;/format4&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;format5&amp;gt;&lt;/span&gt;132.450&lt;span class="nt"&gt;&amp;lt;/format5&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;format5-1&amp;gt;&lt;/span&gt;(132.450)&lt;span class="nt"&gt;&amp;lt;/format5-1&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="common-errors"&gt;Common Errors &lt;a href="#common-errors" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;We get XPath errors when the data type doesn&amp;rsquo;t match the numeric data type.&lt;/li&gt;
&lt;li&gt;We get NaN(Not a Number) error when we explicitly try to convert a string or any other data type to a number using the &lt;strong&gt;number()&lt;/strong&gt; function and the string contains some invalid characters apart from what is accepted by the number data type.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;XSL to explain NaN errors:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsl" data-lang="xsl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;errors&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;error&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;number(&amp;#39;123 1&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/error&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;error&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;number(&amp;#39;abc&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/error&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;error&amp;gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;number(&amp;#39;123b&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/error&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;/errors&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="resources"&gt;Resources: &lt;a href="#resources" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;XSLT file containing all the XSL statements used in the blog &amp;ndash; &lt;a href="https://github.com/pranav-davar/DecipherMiddleware/blob/1d4d4f55c20d21aea08a1374f10546633d07ff77/Oracle/xsl/handling-number.xsl"&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The output of the above file &amp;ndash; &lt;a href="https://github.com/pranav-davar/DecipherMiddleware/blob/1d4d4f55c20d21aea08a1374f10546633d07ff77/Oracle/xsl/handling-numbers-output.xml"&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please share your valuable feedback 😊😊😊&lt;/p&gt;</description></item><item><title>Using REST APIs to manage Connections in OIC</title><link>https://blog.deciphermiddleware.in/posts/using-rest-apis-to-manage-connections/</link><pubDate>Sun, 20 Jun 2021 06:10:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/using-rest-apis-to-manage-connections/</guid><description>&lt;p&gt;In cases, when we have many connections created on the OIC instance, it becomes hard to manage connections using the OIC console. Also, to achieve automation, manually going and updating each and every connection is never a feasible task. OIC provides various REST APIs to fetch connection details, update connection properties and delete connections. With the help of these APIs, we can overcome such scenarios.&lt;/p&gt;
&lt;p&gt;In this blog, we will be discussing how to use various OIC connections REST APIs. A postman collection in the public workspace, which contains some of the use cases for this and can be forked, updated, and used accordingly.&lt;/p&gt;
&lt;p&gt;Below are various REST APIs, that are covered in this blog.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#1-retrieve-connections"&gt;Retrieve Connections&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#2-retrieve-a-connection"&gt;Retrieve a Connection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#3-update-a-connection"&gt;Update a Connection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#4-test-a-connection"&gt;Test a Connection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#5-refresh-metadata-for-a-connection"&gt;Refresh Metadata for a Connection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#6-delete-a-connection"&gt;Delete a Connection&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In this blog, we will be using &lt;a href="https://www.postman.com/"&gt;Postman &lt;/a&gt;to test and run various APIs. Below is the link to the Postman collection, which will be helpful to try and test different REST APIs.&lt;/p&gt;
&lt;h2 id="authentication-for-rest-apis"&gt;Authentication for REST APIs &lt;a href="#authentication-for-rest-apis" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;To invoke OIC connections REST APIs, &lt;strong&gt;BASIC AUTH&lt;/strong&gt; can be used to authenticate and authorize calls. The user whose credentials are used to call these APIs must have access to edit the connection.&lt;/p&gt;
&lt;p&gt;OAuth can also be used to authenticate to REST APIs. In this blog, we will be using Basic Auth to authenticate/authorize API calls.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbB20aiRsLpta90EDf6T57FdlAOCMM3-5WS50OyVFjhYooENmuwo2wU_9z_j11WOZGtWxZSF_BtBcmd601rV9h7hBZvtVrIyg5N408YTCayDcCViw9ARXG78Ep7q59OfrE2cl8ggS7ecA/"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/cc515387d2.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="1-retrieve-connections"&gt;1. Retrieve Connections &lt;a href="#1-retrieve-connections" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;[GET]&lt;/strong&gt; {oic_host}&lt;em&gt;/ic/api/integration/v1/connections&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;{oic_host} -&lt;/strong&gt; Host URL for OIC instance&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This API lets to get all available connections available on the OIC instance. This API provides support for pagination also. The default number of connection information returned without using the &lt;strong&gt;limit&lt;/strong&gt; query parameter is &lt;strong&gt;101&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;We can use the &lt;strong&gt;limit&lt;/strong&gt; query parameter to limit the number of records returned. For example:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8Pfe4D8tzXniqUpHLfFvbuO3o0DMcf2CW1V2W1s_2X7jZfCR5H_bBCNrA8-D6diH_syN22hKHvJq2vTcOKce_5iq8jW8XSRKNr05gJ9maFXg4xgbqKhYJbdYsnWs9w0v_Ts0V3-Il_iU/"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/d49d1b677f.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As in the above example, we have kept the limit as 5, if we want to get the next 5 connection details, we need to update the request as below&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[GET]&lt;/strong&gt; {oic_host}&lt;em&gt;/ic/api/integration/v1/connections?limit=5 &amp;amp;offset=5&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This will return the connections 6-10.&lt;/p&gt;
&lt;p&gt;To make this response even more readable, we have added a Visual table using the Postman visualizer. Once you click the Visualize under the response the section after sending the request from &lt;a href="https://www.postman.com/deciphermiddleware/workspace/deciphermiddleware/collection/1913239-659e77cf-2c07-423b-a15f-d0157426c8f0?ctx=documentation"&gt;this Postman collection&lt;/a&gt;, the below tabular representation is shown.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjIH5kszjc6H-GYKXaP-39IXR-CCbr9vVFlHcnm7ir1-XxWDWzhLYzhhR1F2yBDso_1L5cnFizdJY4Agsa_e6K-l7xUz6EqANH6qFGT32jd7M6ujcsMqECz46K97Vs2-1YVa2m2NhBmw8/"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/73d31855f1.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="2-retrieve-a-connection"&gt;2. Retrieve a Connection &lt;a href="#2-retrieve-a-connection" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;[GET]&lt;/strong&gt;{oic_host}&lt;em&gt;/ic/api/integration/v1/connections/ :id&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;{oic_host} -&lt;/strong&gt; Host URL for OIC instance.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;:id -&lt;/strong&gt; Connection ID of the connection in OIC instance, to be passed as the path parameter.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This API lets you fetch connection details of a specific connection by adding Connection ID as a path parameter to the request URL.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc-KQVTFVscCQE2OfCzodR27Qi4t-Jam8CbXavKYhjByHbW9f910Vh8RnXMOfnl6JLI19JFBka73FdiANMWBr_darElmr58OpQBmfXPwecGwdZ_kWbMmAtmqSu4_2OakRd6wbJ6zAqqLA/"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/2d9d4dba07.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To make this response even more readable, we have added a Visual table using the Postman visualizer. Once you click the Visualize under the response section after sending the request from &lt;a href="https://www.postman.com/deciphermiddleware/workspace/deciphermiddleware/collection/1913239-659e77cf-2c07-423b-a15f-d0157426c8f0?ctx=documentation"&gt;this Postman collection&lt;/a&gt;, the below tabular representation is shown.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgNa4P9CK-2kszuwmTgkaABcvjVRNrJYaxCeAw0zaOIvzjvreHTw0fNtYRDJSuFVbiEejNeKQv-DXFleLV_2mkYUe92v2PuX51pv7n9Wg1sc2XpQ4oIOknzdO0WG4KFj7-JGa6A6XvgiI/"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/740fe95a8a.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="3-update-a-connection"&gt;3. Update a Connection &lt;a href="#3-update-a-connection" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;[POST]&lt;/strong&gt;{oic_host}/&lt;em&gt;ic/api/integration/v1/connections/ :id&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;{oic_host} -&lt;/strong&gt; Host URL for OIC instance.&lt;br&gt;
&lt;em&gt;&lt;strong&gt;:id -&lt;/strong&gt; Connection ID of the connection in OIC instance, to be passed as the path parameter.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This API helps to update the connection properties of a particular connection in the OIC instance. Let&amp;rsquo;s take an example to update the REST Connection properties that include &lt;strong&gt;Base path&lt;/strong&gt; and &lt;strong&gt;Basic Auth user credentials&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id="request-headers"&gt;Request Headers: &lt;a href="#request-headers" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;X-HTTP-Method-Override:&lt;/strong&gt; PATCH&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQRmIAWcoNAe3lOBA15O01FrHaJTnBS8xhoqoxCqz-OM_Hl1SLAeByBi6J7zuEMUzKqSfTcsrgKM-tsIaCMUuqsCjjWUZU7cs3LOIDoEdazVV28wbkOYnAciSN-jIoAdwJ7mWQv9NmDwo/"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/52cba83a25.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Request:&lt;/em&gt;&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;connectionProperties&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;propertyGroup&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;CONNECTION_PROPS&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;propertyName&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;connectionUrl&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;propertyType&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;URL&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;propertyValue&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;{{CONN_REST_URL}}&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;securityPolicy&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;BASIC_AUTH&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;securityProperties&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="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;propertyGroup&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;CREDENTIALS&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;propertyName&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;username&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;propertyValue&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;{{CONN_USERNAME}}&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;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;propertyGroup&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;CREDENTIALS&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;propertyName&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;password&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;propertyValue&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;{{CONN_PASSWORD}}&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;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;Here, &lt;strong&gt;{{CONN_REST_URL}}&lt;/strong&gt; will be the base URL of the REST endpoint. &lt;strong&gt;{{CONN_USERNAME}}&lt;/strong&gt; and &lt;strong&gt;{{CONN_PASSWORD}}&lt;/strong&gt; will be the credentials for BASIC Authentication for invoking the REST endpoint.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1PAIKg0LDwQUtcaEGHcsn3ByeUvB70N-YvJhblSL6J8_6xuRsS3eCtVLnoeNhPOvUrLHEVCRucGa75vZPjnydo-w14pPb1mabyR09EmbrNEQ-rSulxJOZslU70-aKl2Bu7jnncDe6KiE/"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/4a87985b23.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="4-test-a-connection"&gt;4. Test a Connection &lt;a href="#4-test-a-connection" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;[POST]&lt;/strong&gt;{oic_host}&lt;em&gt;/ic/api/integration/v1/connections/:id/test&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;{oic_host} -&lt;/strong&gt; Host URL for OIC instance.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;:id -&lt;/strong&gt; Connection ID of the connection in OIC instance, to be passed as the path parameter.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This API is an alternative to the TEST button on OIC Connection page for a particular connection. Below is an example of successful testing of a Connection.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjFKLD2MDiTGHtttBhDWSAq74BrPNsn3jWBaF1EkAsU6v1TqgFYrzi7M3vrodedpjHekHRbjHU01D4GV8_udj4p7V_VGZ0JBwYwqjdRXBdrNhFkzdrolJ8zpCDL8LBrtSAEi_42u23ciE/"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/442a20e2ef.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="5-refresh-metadata-for-a-connection"&gt;5. Refresh Metadata for a connection. &lt;a href="#5-refresh-metadata-for-a-connection" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;[POST]&lt;/strong&gt; {oic_host}&lt;em&gt;/ic/api/integration/v1/connections/:id/metadata&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;{oic_host} -&lt;/strong&gt; Host URL for OIC instance.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;:id -&lt;/strong&gt; Connection ID of the connection in OIC instance, to be passed as the path parameter.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sometimes, we may cache metadata for a connection, and if for some reason metadata is changed but our connection is still referring to old metadata. This API can come in handy. Below is the sample invocation of REST API in postman to refresh the metadata of a connection.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoC4PgPPIVDupBmaQKsi2Hyf3XO2nFzC7USaBgp1p97Fw7HLTlWTdzs1kc6WYgtkI4dEPKdMbdbt0fhRMwuiaX7GgxINAe8SqMLsfKJn4818qLXWc7SHB09hFsy-ulmt0IFyxZis37mxE/"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/a380508a0f.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="6-delete-a-connection"&gt;6. Delete a Connection &lt;a href="#6-delete-a-connection" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;[DELETE]&lt;/strong&gt; {oic_host}/&lt;em&gt;ic/api/integration/v1/connections/ :id&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;{oic_host} -&lt;/strong&gt; Host URL for OIC instance.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;:id -&lt;/strong&gt; Connection ID of the connection in OIC instance, to be passed as the path parameter.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This API can be used to delete a connection available on the OIC instance. This API saves a lot of time to perform delete operations rather than going to UI and manually deleting a connection. All you need to know is the connection id of the connection. Below is an example of the successful deletion of Connection by triggering the API using Postman.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_8AEnw3CyhmzkroErcPz47GM_2pijSSfJ49Fn4ox625LK3w5zsBY95-KfrbPabNvgfRnJpDXgI_YwYuyFx4c7CNwrRlTbe0Pu9W6uQSCSs7B3q-F57IX57AWHrNxPTo-21pXxjRi084E/"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/5f414fe1fe.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To Validate if the Connection is deleted or not we can use a &lt;a href="https://blog.deciphermiddleware.in/feeds/posts/default?alt=rss&amp;amp;max-results=150#2"&gt;retrieve a connection&lt;/a&gt; API and check if the connection is available or not.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilnOKx05DLNZK74fj1b5rxRB82z9PqlxV_9W1RdXf4-4R23QN2bZYEmfg_iRuRKFx-LDSeNh56modOQzPVnFLpC4uUV3oKojGWPUCTP1OM5hdpOB5P6w2JjYVhP-jvPnlMBixI8Htbiu8/"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/2d6f78ce9b.png" alt=""&gt;&lt;/a&gt;&lt;/p&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.oracle.com/en/cloud/paas/integration-cloud/rest-api/api-integrations-connections.html"&gt;https://docs.oracle.com/en/cloud/paas/integration-cloud/rest-api/api-integrations-connections.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please share your valuable feedback in the comments section below 😊&lt;/p&gt;</description></item><item><title>XML to String and String to XML conversion</title><link>https://blog.deciphermiddleware.in/posts/xml-to-string-and-string-to-xml/</link><pubDate>Thu, 24 Sep 2020 00:00:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/xml-to-string-and-string-to-xml/</guid><description>&lt;h2 id="use-cases"&gt;Use Cases &lt;a href="#use-cases" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Many a times, we may need to convert xml data and pass it as a string inside an XML tag.&lt;/li&gt;
&lt;li&gt;Sometimes from source, we get data which is in string format but actually is xml encoded in string format.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To do so in Oracle BPEL 12c or OSB 12c we can use built in functions.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="xml-data-to-string"&gt;XML data to String &lt;a href="#xml-data-to-string" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="sample-input"&gt;Sample input &lt;a href="#sample-input" 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-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;inRoot&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;t1&amp;gt;&lt;/span&gt;Hello&lt;span class="nt"&gt;&amp;lt;/t1&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;t2&amp;gt;&lt;/span&gt;World&lt;span class="nt"&gt;&amp;lt;/t2&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;t3&amp;gt;&lt;/span&gt;One&lt;span class="nt"&gt;&amp;lt;/t3&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;/inRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="sample-output"&gt;Sample output &lt;a href="#sample-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-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;outRoot&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;t1&amp;gt;&lt;/span&gt;&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;inRoot&lt;span class="ni"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;t1&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;Hello&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/t1&lt;span class="ni"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;t2&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;World&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/t2&lt;span class="ni"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;t3&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;One&lt;span class="ni"&gt;&amp;amp;lt;&lt;/span&gt;/t3&lt;span class="ni"&gt;&amp;amp;gt;&amp;amp;lt;&lt;/span&gt;/inRoot&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/t1&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;/outRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="xslt"&gt;XSLT &lt;a href="#xslt" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This can be accomplished by using the function oraext:get-content-as-string(element as node-set). This function is really helpful when we are working on BPEL as we can use this function in ASSIGN activity or in TRANSFORM activity using XSLT.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;xmlns:oraext&lt;/strong&gt;=&amp;ldquo;&lt;a href="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc%22"&gt;http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc&amp;quot;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;element as node-set:&lt;/strong&gt; xml data(can be variable, xpath, or a function that returns xml data)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="example"&gt;Example: &lt;a href="#example" 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-xslt" data-lang="xslt"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;outRoot&lt;/span&gt;&lt;span class="p"&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;t1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;oraext:get-content-as-string(/ns0:inRoot)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;t1&lt;/span&gt;&lt;span class="p"&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="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;outRoot&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="xquery"&gt;XQuery &lt;a href="#xquery" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Xquery too have a function to convert xml to string i.e. &lt;strong&gt;fn-bea:serialize($arg as item()*)&lt;/strong&gt; as xs:string. This function is really helpful when we are dealing with OSB.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;xmlns:fn-bea=&amp;ldquo;&lt;a href="http://www.bea.com/xquery/xquery-functions%22"&gt;http://www.bea.com/xquery/xquery-functions&amp;quot;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;$arg: Variable containing XML data.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="example-1"&gt;Example: &lt;a href="#example-1" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;$input contains xml data that needs to be converted and assigned to one tag in output payload.&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;outRoot&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;t1&amp;gt;&lt;/span&gt;{fn-bea:serialize($input)}&lt;span class="nt"&gt;&amp;lt;/t1&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;/outRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="string-to-xml"&gt;String to XML &lt;a href="#string-to-xml" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="sample-input-1"&gt;Sample input &lt;a href="#sample-input-1" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;#39;&amp;amp;lt;inRoot&amp;amp;gt;&amp;amp;lt;t1&amp;amp;gt;Hello&amp;amp;lt;/t1&amp;amp;gt;&amp;amp;lt;t2&amp;amp;gt;World&amp;amp;lt;/t2&amp;amp;gt;&amp;amp;lt;t3&amp;amp;gt;One&amp;amp;lt;/t3&amp;amp;gt;&amp;amp;lt;/inRoot&amp;amp;gt;&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="sample-output-1"&gt;Sample output &lt;a href="#sample-output-1" 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-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;inRoot&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;t1&amp;gt;&lt;/span&gt;Hello&lt;span class="nt"&gt;&amp;lt;/t1&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;t2&amp;gt;&lt;/span&gt;World&lt;span class="nt"&gt;&amp;lt;/t2&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;t3&amp;gt;&lt;/span&gt;One&lt;span class="nt"&gt;&amp;lt;/t3&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;/inRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As we can see in above example that &amp;lt; and &amp;gt; are replaced with &amp;amp;lt; and &amp;amp;gt;. In xml &amp;lt; and &amp;gt; are invalid characters and escaper characters are used in place of these.&lt;/p&gt;
&lt;h2 id="xslt-1"&gt;XSLT &lt;a href="#xslt-1" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In xslt, we can use built in function &lt;strong&gt;oraext:parseXML(stringData)&lt;/strong&gt;.This function is really helpful when we are working on BPEL as we can use this function in ASSIGN activity or in TRANSFORM activity using XSLT.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;xmlns:oraext=&amp;ldquo;&lt;a href="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc%22"&gt;http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc&amp;quot;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;stringData: string value of xml data.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="example-2"&gt;Example: &lt;a href="#example-2" 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-xslt" data-lang="xslt"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:copy-of&lt;/span&gt; &lt;span class="na"&gt;select&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;oraext:parseXML(&amp;#39;&amp;amp;lt;inRoot&amp;amp;gt;&amp;amp;lt;t1&amp;amp;gt;Hello&amp;amp;lt;/t1&amp;amp;gt;&amp;amp;lt;t2&amp;amp;gt;World&amp;amp;lt;/t2&amp;amp;gt;&amp;amp;lt;t3&amp;amp;gt;One&amp;amp;lt;/t3&amp;amp;gt;&amp;amp;lt;/inRoot&amp;amp;gt;&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;Note: we have used copy-of instead of value-of as we need all the xml nodes to be copied to the target file. If we want to extract the data from xml without xml tags then we can use value-of.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="xquery-1"&gt;XQuery &lt;a href="#xquery-1" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In xquery, we can use fn-bea:inlinedXML($arg as xs:string) as node()*. This function is really helpful when we are dealing with OSB.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;xmlns:fn-bea=&amp;ldquo;&lt;a href="http://www.bea.com/xquery/xquery-functions%22"&gt;http://www.bea.com/xquery/xquery-functions&amp;quot;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;$arg: variable containing xml data in string format.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="example-3"&gt;Example: &lt;a href="#example-3" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;fn-bea:inlinedXML(&amp;#39;&amp;amp;lt;inRoot&amp;amp;gt;&amp;amp;lt;t1&amp;amp;gt;Hello&amp;amp;lt;/t1&amp;amp;gt;&amp;amp;lt;t2&amp;amp;gt;World&amp;amp;lt;/t2&amp;amp;gt;&amp;amp;lt;t3&amp;amp;gt;One&amp;amp;lt;/t3&amp;amp;gt;&amp;amp;lt;/inRoot&amp;amp;gt;&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Remove Empty tags using XSLT</title><link>https://blog.deciphermiddleware.in/posts/remove-empty-tags-using-xslt/</link><pubDate>Sun, 13 Sep 2020 00:00:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/remove-empty-tags-using-xslt/</guid><description>&lt;p&gt;While performing xslt transform on source XML, we may need not to include empty tags in the output xml payload.&lt;/p&gt;
&lt;h2 id="sample-scenarios"&gt;Sample scenarios: &lt;a href="#sample-scenarios" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Target system doesn&amp;rsquo;t want empty tags to come.&lt;/li&gt;
&lt;li&gt;Size of xml payload has become huge due to unwanted empty tags.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="source-xml"&gt;Source XML &lt;a href="#source-xml" 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-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;inRoot&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;t1&amp;gt;&lt;/span&gt;Hello&lt;span class="nt"&gt;&amp;lt;/t1&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;t2&amp;gt;&amp;lt;/t2&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;t3&amp;gt;&lt;/span&gt;World&lt;span class="nt"&gt;&amp;lt;/t3&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;/inRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="output-xml"&gt;Output XML &lt;a href="#output-xml" 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-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;outRoot&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;a1&amp;gt;&lt;/span&gt;Hello&lt;span class="nt"&gt;&amp;lt;/a1&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;a3&amp;gt;&lt;/span&gt;World&lt;span class="nt"&gt;&amp;lt;/a3&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;/outRoot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The optimal way to achieve above result is to use conditional if statement in xslt i.e. xsl:if&lt;/p&gt;
&lt;h3 id="sample-xslt"&gt;Sample XSLT &lt;a href="#sample-xslt" 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-xslt" data-lang="xslt"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:if&lt;/span&gt; &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/inRoot/t2!=&amp;#39;&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="p"&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a2&lt;/span&gt;&lt;span class="p"&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ns0:C1&amp;#34;&lt;/span&gt;&lt;span class="p"&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="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a2&lt;/span&gt;&lt;span class="p"&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="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;xsl:if&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If we have some whitespaces included between tags, the above if-statement may fail and in such scenarios, we may use normalize-space() function in xslt and test condition will become : &lt;strong&gt;&amp;ldquo;normalize-space(/inRoot/t2)!=&amp;rsquo;&amp;rsquo;&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sometimes, we just want to remove empty elements from already transformed xml. Such cases have same input and output schemas. In such scenarios we can take leverage of identity transform using xsl templates and copy methods. See the below sample xslt identity transform to remove empty tags.&lt;/p&gt;
&lt;h3 id="sample-xslt-1"&gt;Sample XSLT: &lt;a href="#sample-xslt-1" 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-xslt" data-lang="xslt"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;node()|@*&amp;#34;&lt;/span&gt;&lt;span class="p"&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:if&lt;/span&gt; &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;normalize-space(.) !=&amp;#39;&amp;#39; or ./@* !=&amp;#39;&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="p"&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:copy&lt;/span&gt;&lt;span class="p"&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:copy-of&lt;/span&gt; &lt;span class="na"&gt;select&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;@*&amp;#34;&lt;/span&gt;&lt;span class="p"&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;xsl:apply-templates&lt;/span&gt;&lt;span class="p"&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="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;xsl:copy&lt;/span&gt;&lt;span class="p"&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="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;xsl:if&lt;/span&gt;&lt;span class="p"&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="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;xsl:template&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If we are using xslt in JDev, we need to specify input and output schemas and replace &lt;strong&gt;xsl:template&lt;/strong&gt; tag with the above xsl template code.&lt;/p&gt;</description></item><item><title>Format String oraext:format-string</title><link>https://blog.deciphermiddleware.in/posts/format-string-oraextformat-string/</link><pubDate>Sat, 05 Sep 2020 00:00:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/format-string-oraextformat-string/</guid><description>&lt;p&gt;In our integration world, sometimes target system requires the data from source system to be formatted in some specific format which may require data from various input fields along with custom data. To do so we generally use concat() function to concatenate data from various fields and some user specific inputs.&lt;/p&gt;
&lt;p&gt;Lets take the below example&lt;/p&gt;
&lt;p&gt;Suppose we have a predefined format for the output string:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The &lt;strong&gt;abc&lt;/strong&gt; with employeeID: &lt;strong&gt;1234567&lt;/strong&gt; has been successfully registered in the system.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here, name of the employee(&lt;strong&gt;$empName&lt;/strong&gt;=&amp;lsquo;abc&amp;rsquo;) and employee id(&lt;strong&gt;$empId&lt;/strong&gt;=&amp;lsquo;1234567&amp;rsquo;) are dynamic values. One way to accomplish this, is to use concat().&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;concat(&amp;#39;The &amp;#39;,$empName,&amp;#39; with employeeID: &amp;#39;,$empId,&amp;#39; has been successfully registered in the system.&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Another way we can achieve this, is using oraext:format-string(string,string,string&amp;hellip;)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;oraext:format-string (&amp;#39;The {0} with employeeID: {1} has been successfully registered in the system.&amp;#39;,$empName, $empId)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In above example, first string defines the output format containing place holders({0},{1}). These place holders will be replaced by the subsequent string values(&lt;strong&gt;$empName&lt;/strong&gt;=&amp;lsquo;abc&amp;rsquo;, &lt;strong&gt;$empId&lt;/strong&gt;=&amp;lsquo;1234567&amp;rsquo;). In future, if we need to change the position of these dynamic value in output string, all we need to do is to move the position of these placeholders.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Maximum of 10 arguments are supported for this function.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>DateTime formatting using xp20:format-dateTime()</title><link>https://blog.deciphermiddleware.in/posts/datetime-formatting-using-xp20format/</link><pubDate>Wed, 02 Sep 2020 00:00:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/datetime-formatting-using-xp20format/</guid><description>&lt;h2 id="xsdatetime-format"&gt;xs:dateTime Format &lt;a href="#xsdatetime-format" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In XML, we generally use xs:dateTime(xs:xmlns=&amp;ldquo;&lt;a href="http://www.w3.org/2001/XMLSchema%22"&gt;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;/a&gt;) data type to store date time data. The generic representation of date time, that is supported by xs:dateTime in xml:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;YYYY-MM-DDThh:mm:ss[.SSS][Z|(+|-)hh:mm]&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="example"&gt;Example: &lt;a href="#example" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;2019-09-11T10:16:31.943+05:30&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&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;YYYY&lt;/td&gt;
&lt;td&gt;represents a 4-digit year&lt;/td&gt;
&lt;td&gt;2019&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MM&lt;/td&gt;
&lt;td&gt;represents a 2-digit month&lt;/td&gt;
&lt;td&gt;09&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DD&lt;/td&gt;
&lt;td&gt;represents 2-digit date&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;hh&lt;/td&gt;
&lt;td&gt;represents 2-digit hours&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mm&lt;/td&gt;
&lt;td&gt;represents minutes in 2-digits&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ss&lt;/td&gt;
&lt;td&gt;represents seconds in 2-digits&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSS&lt;/td&gt;
&lt;td&gt;represents milliseconds&lt;/td&gt;
&lt;td&gt;943&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;T&lt;/td&gt;
&lt;td&gt;represents time separator&lt;/td&gt;
&lt;td&gt;T&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;represents UTC time zone or 0 time zone offset&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(+|-)&lt;/td&gt;
&lt;td&gt;hh:mm represents time zone offset&lt;/td&gt;
&lt;td&gt;+5:30&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Few more valid &lt;strong&gt;examples&lt;/strong&gt;: 2019-09-11T21:32:52, 2019-09-11T21:32:52+02:00, 2019-09-11T19:32:52Z, 2019-09-11T19:32:52+00:00, 2019-09-11T21:32:52.11179&lt;/p&gt;
&lt;p&gt;While working with different systems, we may come across such systems, which require date time in some different formats other than default format as supported by xs:dateTime. To over come such scenarios, function is available in OIC(Oracle Integration Cloud) and Oracle SOA&lt;/p&gt;
&lt;h2 id="format-datetime"&gt;Format DateTime &lt;a href="#format-datetime" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;xp20:format-dateTime($dateTime as string, $format as string) xmlns:xp20=&amp;quot;http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;$dateTime&lt;/strong&gt; should contain date time value as per xs:dateTime data type as as string eg: &amp;lsquo;2019-09-11T10:16:31.943+05:30&amp;rsquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;$format&lt;/strong&gt; should contain output format to which we need to convert to. For e.g. if we want output to be &amp;lsquo;11/09/2019&amp;rsquo; then value of $format should be &lt;code&gt;[D01]/[M01]/[Y001]&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;xp20:format-dateTime('2019-09-11T10:16:31.943+05:30', '[D01]/[M01]/[Y001]')&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To format current date time, we can use xp20:current-dateTime() in $dateTime&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;xp20:format-dateTime(xp20:current-dateTime(), &amp;#39;[D01]/[M01]/[Y001]&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="formatting-codes"&gt;Formatting Codes: &lt;a href="#formatting-codes" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Below are some important codes which can be helpful in generating desired format for target application.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Sample dateTime:&lt;/strong&gt;&lt;/em&gt; &lt;code&gt;2019-09-03T15:16:31.943+05:30&lt;/code&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Example Output&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;[Y001]&lt;/td&gt;
&lt;td&gt;4 digit year&lt;/td&gt;
&lt;td&gt;2019&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[Y01]&lt;/td&gt;
&lt;td&gt;2 digit year&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[M01]&lt;/td&gt;
&lt;td&gt;2 digit month&lt;/td&gt;
&lt;td&gt;09&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[D01]&lt;/td&gt;
&lt;td&gt;2 digit date&lt;/td&gt;
&lt;td&gt;03&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[H01]&lt;/td&gt;
&lt;td&gt;2 digit hour in 24 hour clock&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[h01]&lt;/td&gt;
&lt;td&gt;2 digit hour in 12 hour clock&lt;/td&gt;
&lt;td&gt;03&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[m01]&lt;/td&gt;
&lt;td&gt;2-digit minutes&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[s01]&lt;/td&gt;
&lt;td&gt;2-digit seconds&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[f001]&lt;/td&gt;
&lt;td&gt;3-digit milliseconds&lt;/td&gt;
&lt;td&gt;943&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[Z]&lt;/td&gt;
&lt;td&gt;Time zone offset in the form (+|-)hhmm&lt;/td&gt;
&lt;td&gt;+0530&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[z]&lt;/td&gt;
&lt;td&gt;Time zone offset in the form GMT(+|-)hh:mm&lt;/td&gt;
&lt;td&gt;GMT+05:30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[Dwo]&lt;/td&gt;
&lt;td&gt;Word for ordinal value of day&lt;/td&gt;
&lt;td&gt;third&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[dwo]&lt;/td&gt;
&lt;td&gt;The day of the year, represented in ordinal words&lt;/td&gt;
&lt;td&gt;second hundred and forty-sixth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[MNn]&lt;/td&gt;
&lt;td&gt;Capitalized month name&lt;/td&gt;
&lt;td&gt;September&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[P]&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;[PX]&lt;/td&gt;
&lt;td&gt;Uppercase am/pm&lt;/td&gt;
&lt;td&gt;PM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[FNn]&lt;/td&gt;
&lt;td&gt;Capitalized weekday name&lt;/td&gt;
&lt;td&gt;Tuesday&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[MNn,a-b]&lt;/td&gt;
&lt;td&gt;Capitalized month name having atleast &amp;ldquo;a&amp;rdquo; charcters and atmost &amp;ldquo;b&amp;rdquo; characters [MNn,3-3]:&lt;/td&gt;
&lt;td&gt;Sep&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item></channel></rss>