<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Oracle on DecipherMiddleware</title><link>https://blog.deciphermiddleware.in/categories/oracle/</link><description>Recent content in Oracle on DecipherMiddleware</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 05 Dec 2023 19:43:21 +0000</lastBuildDate><atom:link href="https://blog.deciphermiddleware.in/categories/oracle/index.xml" rel="self" type="application/rss+xml"/><item><title>Playing With JSON data in Oracle Database- Part1</title><link>https://blog.deciphermiddleware.in/posts/playing-with-json-data-in-oracle-database-part1/</link><pubDate>Tue, 05 Dec 2023 19:43:21 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/playing-with-json-data-in-oracle-database-part1/</guid><description>&lt;p&gt;Whenever we hear Oracle Database, we imagine storing data in rows and columns. The data stored in cells generally is in primitive data types(char, varchar2, int, date, etc.). What if we need to store JSON data in the table. The first thing that may come into our minds is to convert JSON data to string(varchar2) or have data as clob/blob and insert it into the table. But with this if we need to query a particular field or update it, tricky one. This blog is a part of a series. The scope includes, creation of table having column with JSON datatype, insertion of JSON data and querying the JSON data.&lt;/p&gt;
&lt;h2 id="umm-how-to-do"&gt;Umm.. How to do? &lt;a href="#umm-how-to-do" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://blog.deciphermiddleware.in/images/wp/giphy-8.webp" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s put the developer hat on! and start exploring. In this blog, Oracle Database 23c free is used.&lt;/p&gt;
&lt;h2 id="create-a-table-with-a-column-to-store-json-data"&gt;Create a table with a column to store JSON data &lt;a href="#create-a-table-with-a-column-to-store-json-data" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;JSON data can be used natively with RDBMS features in Oracle Database 23c. Let&amp;rsquo;s start the journey by creating a simple database table for storing JSON data.&lt;/p&gt;
&lt;p&gt;Create a sequence &lt;strong&gt;SEQ_PO&lt;/strong&gt; for the id column.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sequence&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SEQ_PO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;increment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NOCACHE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NOMAXVALUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Create a table q_purchaseorder to store purchase order documents in JSON format.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;q_purchaseorder&lt;/span&gt;&lt;span class="w"&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 class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NUMBER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SEQ_PO&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NEXTVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;date_loaded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TIMESTAMP&lt;/span&gt;&lt;span class="w"&gt; &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 class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TIME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ZONE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;po_document&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If, we want to store the JSON data in Varchar2, then we need to add a constraint &amp;ldquo;ensure_json&amp;rdquo; to check if the data is in JSON format. For example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;q_purchaseorder&lt;/span&gt;&lt;span class="w"&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 class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NUMBER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SEQ_PO&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NEXTVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;date_loaded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TIMESTAMP&lt;/span&gt;&lt;span class="w"&gt; &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 class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TIME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ZONE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;po_document&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;23767&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CONSTRAINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ensure_json&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CHECK&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;po_document&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;The table &lt;strong&gt;q_purchaseorder&lt;/strong&gt; is created.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="insert-data-to-the-json-column"&gt;Insert data to the JSON column &lt;a href="#insert-data-to-the-json-column" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Let&amp;rsquo;s insert some purchase orders JSON data to the newly created table in &lt;strong&gt;po_document&lt;/strong&gt; column.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;INTO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;q_purchaseorder&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;date_loaded&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;po_document&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;VALUES&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SYSTIMESTAMP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;pONumber&amp;#34;: &amp;#34;1001&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;reference&amp;#34;: &amp;#34;dm-1001&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;requestor&amp;#34;: &amp;#34;One More Query&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;user&amp;#34;: &amp;#34;dm_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="s1"&gt; &amp;#34;costCenter&amp;#34;: &amp;#34;CC1&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;shippingDetails&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;name&amp;#34;: &amp;#34;Test 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="s1"&gt; &amp;#34;address&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;street&amp;#34;: &amp;#34;Street 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="s1"&gt; &amp;#34;city&amp;#34;: &amp;#34;Amritsar&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;state&amp;#34;: &amp;#34;Punjab&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;zipCode&amp;#34;: &amp;#34;143001&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;country&amp;#34;: &amp;#34;India&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;phone&amp;#34;: &amp;#34;+91-99999-99999&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;message&amp;#34;: &amp;#34;Courier&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;lineItems&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;itemNumber&amp;#34;: 1,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;part&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;description&amp;#34;: &amp;#34;Test product1&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;unitPrice&amp;#34;: 200,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;uPCCode&amp;#34;: &amp;#34;123456789&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;quantity&amp;#34;: 8.0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;itemNumber&amp;#34;: 2,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;part&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;description&amp;#34;: &amp;#34;Test product2&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;unitPrice&amp;#34;: 250,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;uPCCode&amp;#34;: &amp;#34;987654321&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;quantity&amp;#34;: 5
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;}&amp;#39;&lt;/span&gt;&lt;span class="w"&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 class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above JSON record gets inserted into the table.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;q_purchaseorder&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="https://blog.deciphermiddleware.in/images/wp/image.webp" alt=""&gt;&lt;/p&gt;
&lt;h2 id="query-the-json-data"&gt;Query the JSON data &lt;a href="#query-the-json-data" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The easiest way to query the JSON data is to use dot notations. The JSON data in the column must be well formed. If the data type is not JSON, varchar2, clob/blob column must have &amp;ldquo;&lt;strong&gt;is json &amp;ldquo;&lt;/strong&gt; constraint. Taking the data inserted in the previous step as an example, below are the various queries to extract values from different JSON fields.&lt;/p&gt;
&lt;h3 id="query-the-po-number"&gt;Query the PO number. &lt;a href="#query-the-po-number" 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-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;po&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PO_DOCUMENT&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pONumber&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;q_purchaseorder&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;po&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="query-the-unit-price-for-second-line-item"&gt;Query the unit price for second line item. &lt;a href="#query-the-unit-price-for-second-line-item" 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-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;po&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PO_DOCUMENT&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lineItems&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;unitPrice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;q_purchaseorder&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;po&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above two examples output the data as JSON object instead of SQL number or SQL STRING, as the column datatype is JSON. If datatype of the column is not JSON, the query will give a result in VARCHAR2 format. An item method, such as number(), string(), etc., can convert JSON/VARCHAR2 output from the query into the desired format. For example:&lt;/p&gt;
&lt;h3 id="query-the-quantity-for-the-second-line-item-and-output-in-number-format"&gt;Query the quantity for the second line item and output in number format. &lt;a href="#query-the-quantity-for-the-second-line-item-and-output-in-number-format" 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-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;po&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PO_DOCUMENT&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lineItems&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;quantity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;number&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;q_purchaseorder&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;po&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;where&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;po&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Another way to query data is to use &lt;strong&gt;JSON_VALUE&lt;/strong&gt; SQL function. For example:&lt;/p&gt;
&lt;h3 id="query-the-po-number-in-number-format-using-json_value-sql-function"&gt;Query the PO Number in number format using JSON_VALUE SQL function. &lt;a href="#query-the-po-number-in-number-format-using-json_value-sql-function" 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-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;JSON_VALUE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;po_document&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;$.pONumber.number()&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;q_purchaseorder&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;where&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;po&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pretty simple, yeah? Let&amp;rsquo;s make it a bit more complex.&lt;/p&gt;
&lt;p&gt;How to fetch an &lt;strong&gt;item description&lt;/strong&gt; from purchase order JSON where unit price is &lt;strong&gt;less than&lt;/strong&gt; 225?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scratching the head&lt;/strong&gt;!!!! Let&amp;rsquo;s use &lt;strong&gt;json_query&lt;/strong&gt; sql function along with filter conditions to accomplish the task.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;json_query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;po&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;po_document&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;$.lineItems[*].part?(@.unitPrice &amp;lt; 225).description&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ARRAY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wrapper&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;q_purchaseorder&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;po&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;po&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&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;WITH ARRAY WRAPPER&lt;/strong&gt; is used to wrap the results in array, as output may contain more than one values.&lt;/p&gt;
&lt;h2 id="references"&gt;References: &lt;a href="#references" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/en/database/oracle/oracle-database/23/adjsn/json-data.html"&gt;https://docs.oracle.com/en/database/oracle/oracle-database/23/adjsn/json-data.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.oracle.com/in/database/free/"&gt;https://www.oracle.com/in/database/free/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Please feel free to share your valuable feedback ! 😊😊😊&lt;/p&gt;</description></item><item><title>Transactional Event queues in Oracle Database 23c Free (PL/SQL)</title><link>https://blog.deciphermiddleware.in/posts/transactional-event-queues-in-oracle-database-23c-free-pl-sql/</link><pubDate>Thu, 31 Aug 2023 17:42:45 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/transactional-event-queues-in-oracle-database-23c-free-pl-sql/</guid><description>&lt;p&gt;The Oracle Database 23c provides integrated, robust and feature-rich queuing systems AQ (Advance Queues) and TxEventQ(Transactional Event Queues). Oracle Transactional Event Queues(TxEventQ) facilitate the implementation of event-based/streaming applications. TxEventQ can be integrated with open source event streaming platform Kafka.&lt;/p&gt;
&lt;p&gt;So, let&amp;rsquo;s wear our developer&amp;rsquo;s hat and create a simple &lt;strong&gt;TxEventQ&lt;/strong&gt; in Oracle Database 23c.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/91fef0e7bd.gif" alt=""&gt;&lt;/p&gt;
&lt;h2 id="pre-requisites"&gt;Pre-Requisites &lt;a href="#pre-requisites" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.oracle.com/database/free/download/"&gt;Oracle Database 23c free&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;User with SYSDBA privileges&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="steps"&gt;Steps &lt;a href="#steps" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Create a database user and grant privileges. Login using sysdba user and execute the below commands using SQL developer or SQL plus.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- CREATE USER &amp;lt;USERNAME&amp;gt; IDENTIFIED BY &amp;lt;PASSWORD&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dm_teq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IDENTIFIED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*****&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- GRANT ACCESS AND ROLES TO THE USER
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CONNECT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RESOURCE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AQ_ADMINISTRATOR_ROLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dm_teq&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;EXECUTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DBMS_AQ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dm_teq&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;EXECUTE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DBMS_AQADM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dm_teq&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- OPTIONAL GRANT TABLESPACE TO THE USER
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UNLIMITED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TABLESPACE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dm_teq&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;There is a procedure &lt;strong&gt;CREATE_TRANSACTIONAL_EVENT_QUEUE&lt;/strong&gt; available under package &lt;strong&gt;DBMS_AQADM&lt;/strong&gt; that can be used to create TxEventQ.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;PROCEDURE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CREATE_TRANSACTIONAL_EVENT_QUEUE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;queue_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;storage_clause&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;multiple_consumers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BOOLEAN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;max_retries&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NUMBER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;comment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;queue_payload_type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;JMS_TYPE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;queue_properties&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;QUEUE_PROPS_T&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;replication_mode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BINARY_INTEGER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NONE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Login via the newly created user(&lt;code&gt;**dm_teq**&lt;/code&gt;) and execute the below commands.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;BEGIN&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbms_aqadm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_transactional_event_queue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;queue_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;demo_topic&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;multiple_consumers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;queue_payload_type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbms_aqadm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;jms_type&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- Start the
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbms_aqadm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;start_queue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;queue_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;demo_topic&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above command will create a topic(with multiple consumers) with the name &amp;ldquo;demo-topic&amp;rdquo;, payload type as JMS and start the topic.&lt;/p&gt;
&lt;h3 id="fetch-txeventq-params"&gt;Fetch TxEventQ Params &lt;a href="#fetch-txeventq-params" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://blog.deciphermiddleware.in/images/wp/giphy-4.webp" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Now, the topic is created. What if we need to fetch queue/parameters, we can use the &lt;strong&gt;get_queue_parameter&lt;/strong&gt; procedure as below.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SERVEROUTPUT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;declare&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out_var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;begin&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbms_aqadm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_queue_parameter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;queue_name&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;demon_topic&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;param_name&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;SHARD_NUM&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;param_value&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out_var&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbms_output&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;put_line&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;out_var&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&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;Output:&lt;/strong&gt; Below output will display the number of partitions for the topic.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;5
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;PL/SQL procedure successfully completed.&lt;/p&gt;
&lt;h3 id="add-a-subscriber-to-the-txeventq"&gt;Add a Subscriber to the TxEventQ &lt;a href="#add-a-subscriber-to-the-txeventq" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Execute below pl/sql block to add a subscriber to the &lt;strong&gt;demo_topic&lt;/strong&gt;(TxEventQ).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;DECLARE&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;subscriber&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SYS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;aq$_agent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* Add subscribers omq to the suscriber list: */&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;BEGIN&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;subscriber&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SYS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;aq$_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;OMQ&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DBMS_AQADM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ADD_SUBSCRIBER&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;queue_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;demo_topic&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;subscriber&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;subscriber&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Query the list of subscribers for the topic.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- view name : aq$&amp;lt;queue_name&amp;gt;_s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aq$demo_topic_s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&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;Output:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.deciphermiddleware.in/images/wp/image-1.webp" alt=""&gt;&lt;/p&gt;
&lt;h3 id="publish-a-message-on-the-topic"&gt;Publish a message on the topic &lt;a href="#publish-a-message-on-the-topic" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class="mermaid"&gt;---
config:
theme: 'neutral'
---
flowchart LR
A("Publisher") --&gt; id1[(demo_topic)]&lt;/div&gt;
&lt;p&gt;We have created a topic based on &lt;strong&gt;JMS Message type&lt;/strong&gt;. Payload should also be of type JMS message.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;DECLARE&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enqueue_options&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbms_aq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;enqueue_options_t&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message_properties&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbms_aq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message_properties_t&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message_handle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RAW&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SYS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AQ$_JMS_MESSAGE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;BEGIN&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SYS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AQ$_JMS_MESSAGE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;construct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DBMS_AQ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;JMS_TEXT_MESSAGE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;hello world&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbms_aq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;queue_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;demo_topic&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enqueue_options&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enqueue_options&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message_properties&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message_properties&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;msgid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message_handle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DBMS_OUTPUT&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PUT_LINE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message_handle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The message has been published on the topic, let&amp;rsquo;s validate. We can check the status of the message from the available view &amp;ldquo;aq$&amp;lt;queue_name&amp;gt;&amp;rdquo;. Let&amp;rsquo;s run the below query to know the status of the message.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;msg_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;msg_state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;enq_timestamp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;deq_timestamp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aq$demo_topic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&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;Output:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.deciphermiddleware.in/images/wp/image-2.webp" alt=""&gt;&lt;/p&gt;
&lt;h3 id="subscribe-messages-from-the-topic"&gt;Subscribe messages from the topic &lt;a href="#subscribe-messages-from-the-topic" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class="mermaid"&gt;---
config:
theme: 'neutral'
---
flowchart LR
A("Publisher") --&gt; db[(demo_topic)]
db --&gt; B(subscriber
OMQ)&lt;/div&gt;
&lt;p&gt;Let&amp;rsquo;s use the subscriber created in the earlier step to extract the message from the topic.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;DECLARE&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dequeue_options&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbms_aq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dequeue_options_t&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message_properties&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbms_aq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message_properties_t&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;aq$_jms_message&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message_handle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RAW&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;message_text&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;BEGIN&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dequeue_options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;navigation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DBMS_AQ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FIRST_MESSAGE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dequeue_options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;consumer_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;omq&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbms_aq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dequeue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;queue_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;demo_topic&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dequeue_options&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dequeue_options&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message_properties&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message_properties&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;msgid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message_handle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;message_text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbms_output&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;put_line&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;message_text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&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;Output&lt;/strong&gt; :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;hello world
PL/SQL procedure successfully completed.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This is a simple example to dequeue a message from TxEventQ. Let&amp;rsquo;s run the below query to know the status of the message.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;msg_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;msg_state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;enq_timestamp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;deq_timestamp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aq$demo_topic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="https://onemorequery.wordpress.com/wp-content/uploads/2023/08/image-3.png?w=1024" alt=""&gt;&lt;/p&gt;
&lt;p&gt;The state now changed from &lt;strong&gt;READY&lt;/strong&gt; to &lt;strong&gt;PROCESSED&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This is a simple walkthrough to configure and use TxEventQ in Oracle Database 23c with the help of PL/SQL.&lt;/p&gt;
&lt;p&gt;Please share your valuable feedback! &amp;#x1f604;&amp;#x1f604;&amp;#x1f604;&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;a href="https://www.oracle.com/database/free/download/"&gt;https://www.oracle.com/database/free/download/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/en/database/oracle/oracle-database/23/arpls/DBMS_AQADM.html"&gt;https://docs.oracle.com/en/database/oracle/oracle-database/23/arpls/DBMS_AQADM.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/en/database/oracle/oracle-database/21/adque/Programmatic_Interfaces_Sharded_Queues.html"&gt;https://docs.oracle.com/en/database/oracle/oracle-database/21/adque/Programmatic_Interfaces_Sharded_Queues.html&lt;/a&gt;&lt;/li&gt;
&lt;/ol&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>DECIPHER: Dynamic XSLTs in BPEL (SOA 12c)</title><link>https://blog.deciphermiddleware.in/posts/decipher-dynamic-xslts-in-bpel-soa-12c/</link><pubDate>Sat, 12 Mar 2022 07:45:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/decipher-dynamic-xslts-in-bpel-soa-12c/</guid><description>&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/3b0f0ad9f3.jpg"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/3b0f0ad9f3.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;While developing integrations in BPEL 12c, XSLT is most commonly used to transform different XML message structures. We generally come across scenarios wherein based on specific input fields, our transformation logic changes. What we generally do is have all conditions within the same XSLT file. This makes our XSLT look a lot bigger and difficult to maintain. A better way would be to have different XSLTs and move deciding factor out of XSLT. Once we create different XSLTs for specific use cases having the same output format, now the question will come how to configure these XSLTs to be picked at runtime? This blog is curated with answers to such and many more questions.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s take the example of account creation. There is a source application sending account information in an XML document which we need to update in a backend database. Now source system can send different types of address information like home address, business address, or shipping address. We get this information in the &lt;strong&gt;addressType&lt;/strong&gt; input field. In the backend database, for each type of address, there are different fields in the backend database. There could various ways to handle this.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create one single XSLT to handle all the scenarios using XSLT functions like &lt;strong&gt;if, choose-when&lt;/strong&gt; , etc. One single XSLT file for all the scenarios, BPEL code will be easy to read. But this will lead to a huge XSLT file and will be a bit tricky to maintain. In the future, if we want to add new conditions for only secondary addresses, then regression testing might be required to ensure we don&amp;rsquo;t hamper the other functionality.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/d4f912cbdf.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/d4f912cbdf.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Another way could be to have separate XSLTs for each scenario. As per the example, we have 3 scenarios. The address can be of type home, business, or shipping address.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We can have 3 XSLTs created for each scenario. Now maintainability of Transformation XSLT code will be a lot easier. These can now be configured using an if-else block within the BPEL process to decide which XSLT to pick. The BPEL process will look now similar to below.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/ea2ad1b12b.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/ea2ad1b12b.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Now suppose tomorrow we have a new condition added, then we need to add another block of &amp;ldquo;elseif&amp;rdquo; to accommodate this. This will make your BPEL code look bigger.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In SOA 12c we have below two functions that can be used to shorten the BPEL flow and use the XSLT dynamically.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ora:processXSLT&lt;/li&gt;
&lt;li&gt;ora:doXSLTransformForDoc&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;xmlns:ora&lt;/strong&gt; =&amp;ldquo;&lt;a href="http://schemas.oracle.com/xpath/extension%22"&gt;http://schemas.oracle.com/xpath/extension&amp;quot;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Both of the above functions support the location of the XSLT file and input XML. The above functions can be used in conjunction with DVM to fetch the location of XSLT and assign it to the input of the function.&lt;br&gt;
For the same example, let&amp;rsquo;s consider below DVM file as an example.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/8b70819393.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/8b70819393.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We can use the above DVM file to extract the location of XSLT that can be used. Suppose we store the conditional value in a variable called &lt;strong&gt;$addType&lt;/strong&gt;(having one of the values in the home, business, or shipping). We can use DVM lookup to fetch the resulting XSLT file location that can be provided as input to the above-mentioned functions in an Assign activity. In case none of the conditions matches the default.xsl file can be used.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;dvm:lookupValue&lt;/strong&gt;(&amp;ldquo;dvms/dynamicXSLT.dvm&amp;rdquo;, &amp;ldquo;addressType&amp;rdquo;,$addType, &amp;ldquo;xsltLocation&amp;rdquo;, &amp;ldquo;transformations/default.xsl&amp;rdquo;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Let us assume the output value of the above expression is stored in variable $dynamicXSLT and input XML is stored in $input. The expression will be:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ora:processXSLT&lt;/strong&gt;($dynamicXSLT, $input)&lt;br&gt;
&lt;strong&gt;ora:doXSLTransformForDoc&lt;/strong&gt;($dynamicXSLT, $input)&lt;/p&gt;
&lt;p&gt;Both the above functions do a similar task. But there is one major difference. Suppose your XSLT requires extra complex parameters to be passed as input. In such scenarios &lt;strong&gt;ora:doXSLTransformForDoc&lt;/strong&gt; comes real handy. In this function, we can pass key-value pairs of parameters that can be used within the XSLT.&lt;/p&gt;
&lt;p&gt;For example, if our XSLT requires a parameter &lt;strong&gt;contact&lt;/strong&gt;(as defined in XSLT) and the value is stored in the &lt;strong&gt;$Contact&lt;/strong&gt; variable in the BPEL process. Now our function will look like.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ora:doXSLTransformForDoc&lt;/strong&gt;($dynamicXSLT, $input, &amp;lsquo;contact&amp;rsquo;, $contact)&lt;/p&gt;
&lt;/blockquote&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.oracle.com/middleware/12211/soasuite/develop/GUID-B37B91AF-0036-47EC-AB9F-FCBCD2BA55E2.htm#SOASE2117"&gt;https://docs.oracle.com/middleware/12211/soasuite/develop/GUID-B37B91AF-0036-47EC-AB9F-FCBCD2BA55E2.htm#SOASE2117&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Please share your valuable feedback 😊😊😊&lt;/p&gt;</description></item><item><title>Demystifying file read as attachment in SOA 12c</title><link>https://blog.deciphermiddleware.in/posts/demystifying-file-read-as-attachment-in/</link><pubDate>Sat, 27 Nov 2021 21:12:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/demystifying-file-read-as-attachment-in/</guid><description>&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/e86152fc43.jpg"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/e86152fc43.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In cases when we just want to move a file(without transformation) from one SFTP/FTP/file location to the other SFTP/FTP/file location, we can read a file with or without schema and then perform the write operation to the target location. If we provide an exact file schema for conversion to XML, it takes a lot of heap memory to transform from a csv or ffd to an XML document. In cases when files are not simple text files or schema is not available, one way to do so is to read the file as an opaque object and write it to a target location. In doing so, we still use a heap memory of the WebLogic server. If we are dealing with very large files, this may impact server performance as the conversion to opaque elements will take place behind the scenes. Using opaque schema is never recommended to process huge files. One better way of handling such a scenario is to read a file as an attachment in SOA 12c. Generally, we have below question:&lt;/p&gt;
&lt;h2 id="what-is-reading-a-file-as-an-attachment-means"&gt;What is reading a file as an attachment means? &lt;a href="#what-is-reading-a-file-as-an-attachment-means" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In this case, we are not loading the contents of the file in the memory of the Weblogic server i.e in BPEL flow we will not see the contents of the file loaded instead, a href to the actual file is seen. In this case, the Weblogic server leverages SOA-INFRA tables to load file data in the table and in return gives href to the flow. This href actually links to data stored in the SOA-INFRA table and can be used to write files to the different locations (in the same or different FTP servers).&lt;/p&gt;
&lt;p&gt;To understand better, let&amp;rsquo;s take an example of flow which polls the FTP directory every 10 minutes and read as an attachment. Then, how we can find the payload from SOA-INFRA tables.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/379a3dd04f.jpg"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/379a3dd04f.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Below are the steps to configure the file/FTP adapter in BPEL(SOA 12c).&lt;/p&gt;
&lt;h2 id="configuration-steps"&gt;Configuration Steps: &lt;a href="#configuration-steps" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;1. Create a SOA project in Jdevloper 12c.&lt;/p&gt;
&lt;p&gt;2. Drag and drop FTP adapter from component pallet. Enter the &lt;strong&gt;service name&lt;/strong&gt;. Click Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/575729400a.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/575729400a.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. Select &lt;strong&gt;Define from operation and schema (specified later)&lt;/strong&gt;. Click Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/659e3685a0.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/659e3685a0.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4. Specify the source &lt;strong&gt;FTP JNDI&lt;/strong&gt; name as configured in the Weblogic server. Click next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/b95a9cf0c4.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/b95a9cf0c4.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5. Select operation type as &lt;strong&gt;Get File&lt;/strong&gt;. Check the &lt;strong&gt;Read File As Attachment&lt;/strong&gt;. If we know the character set, encoding, and Content-Type of the file, then specify else leave it blank. Click Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/45c7f14392.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/45c7f14392.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6. Specify the input directory from where we want to pick the file from. Check &lt;strong&gt;Archive processed files&lt;/strong&gt; , and specify a directory for archive files if we want to archive the data after processing. Check &lt;strong&gt;Delete files after successful retrieval&lt;/strong&gt; if we want to delete the file after processing. Click Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/8ad73896ee.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/8ad73896ee.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;7. Provide the file name pattern or regex file name pattern and click Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/fd20684f1c.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/fd20684f1c.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;8. Specify the polling frequency and click Next. Click on Finish to complete the adapter configuration.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/421396f1b2.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/421396f1b2.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;9. Add a BPEL component with no service, i.e. define service later.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/52cd824c48.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/52cd824c48.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;10. Join the wire from the FTP adapter to the BPEL component.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/8bf3d1fb80.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/8bf3d1fb80.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11. Open the BPEL component, and configure receive activity as shown below.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/73c397a022.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/73c397a022.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;12. Click OK. Save and deploy the code on the Weblogic server.&lt;/p&gt;
&lt;h2 id="analyzing-the-read-file-as-an-attachment"&gt;Analyzing the read file as an attachment &lt;a href="#analyzing-the-read-file-as-an-attachment" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Let&amp;rsquo;s test the service and see the behaviour of file being read as an attachment.&lt;/p&gt;
&lt;p&gt;1. Place the file in the FTP location and wait for it to get it picked.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/dbb3b822c3.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/dbb3b822c3.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. Once the file is picked, log in to the em console. We will see an instance created.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/e7c151f581.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/e7c151f581.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. Open the flow, here we will see only the href.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/b3ee06ca0a.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/b3ee06ca0a.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now after seeing this, we might think about where did our data go. As we see only href. But where is our actual data?&lt;/p&gt;
&lt;p&gt;Our data is safe within soa-infra database.&lt;/p&gt;
&lt;p&gt;4. To query the file data and file attributes, connect to the SOA-INFRA database of the SOA instance.&lt;/p&gt;
&lt;p&gt;5. Run the below query&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;attachment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;where&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbkey&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;href-value&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&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/937c749fe8.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/937c749fe8.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;File data is stored in blob format within the &lt;strong&gt;attachment&lt;/strong&gt; table.&lt;/em&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/middleware/1213/adapters/develop-soa-adapters/GUID-088EFFE9-AE8B-4A35-B9DB-0A0DDA1BBBE7.htm#TKADP590"&gt;https://docs.oracle.com/middleware/1213/adapters/develop-soa-adapters/GUID-088EFFE9-AE8B-4A35-B9DB-0A0DDA1BBBE7.htm#TKADP590&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please share your valuable feedback 😊😊😊&lt;/p&gt;</description></item><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>Database Xpath-extension Functions in SOA 12c</title><link>https://blog.deciphermiddleware.in/posts/database-xpath-extension-functions-in/</link><pubDate>Wed, 21 Jul 2021 13:18:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/database-xpath-extension-functions-in/</guid><description>&lt;p&gt;In SOA, we can connect with databases using a database jca adapter and configuring the &lt;strong&gt;data source&lt;/strong&gt; and &lt;strong&gt;connection factory&lt;/strong&gt; in the &lt;strong&gt;WebLogic server&lt;/strong&gt;. Sometimes, we may want to query the database directly within the BPEL component or XSLT without configuring a database jca adapter. For such use cases, we can take leverage of database functions that can be used within **BPEL Assign Activity **or &lt;strong&gt;XSLT transformations&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;We have 3 different database functions available, that can be used in different use cases.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#1-oraextsequence-next-val"&gt;oraeext:sequence-next-val()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#2-oraextlookup-table"&gt;oraext:lookup-table()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#3-oraextquery-database"&gt;oraext:query-database()&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="1-oraextsequence-next-val"&gt;1. oraext:sequence-next-val() &lt;a href="#1-oraextsequence-next-val" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Syntax:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;oraext:sequence-next-val(sequence as string, dataSource as string)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;sequence:&lt;/strong&gt; Specify the sequence available in the database for which the next value needs to be extracted.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;dataSource:&lt;/strong&gt; Specify the Data source JNDI name as configured in WebLogic server or JDBC string in the format &lt;strong&gt;jdbc:oracle:thin:username/password@host:port:sid&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; Only oracle thin driver is supported if used as JDBC string.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This function is used when we want to fetch the next value of defined sequence in the database. It can be used in cases where we want each request to adhere with a particular sequence id which can be used to identify each unique record where using a db adapter might create overhead and extra transformation. This function is basically an alternative to the below SQL statement.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SEQUENCE_TEST&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NEXTVAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DUAL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&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://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCd-OMgVvRwSoMEABzRpqOd7uzAtVu-Yi8VwUjeMPdJUUrauCwA8qpCOK189MK9xTSYSXMtUZZfWIC1kHZbrEhIrxjFeofwAs4kxsSaKncMrJ8TLHHLWvAs0c140L45ehtp0EKsogsA-Q/"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/6306d0404a.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here, SEQUENCE_TEST is the name of the sequence defined in the database.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example usage in XSLT&lt;/strong&gt; :&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;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/&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;root&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;seqJDBCString&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:sequence-next-val(&amp;#39;SEQUENCE_TEST&amp;#39;,&amp;#39;jdbc:oracle:thin:mark1/password@localhost:1521:XE&amp;#39; )** &amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&amp;lt;/seqJDBCString&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;/root&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;/xsl:template&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;root&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;seqJDBCString&amp;gt;&lt;/span&gt;**2** &lt;span class="nt"&gt;&amp;lt;/seqJDBCString&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;/root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="2-oraextlookup-table"&gt;2. oraext:lookup-table() &lt;a href="#2-oraextlookup-table" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;oraext:lookup-table(tableName as string, inputColumn as string, inputData as string, outputColumn as string, dataSource as string)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;tableName:&lt;/strong&gt; Name of the table in database, from which value need to be fetched**.**&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;inputColumn:&lt;/strong&gt; Column name of the table for which we will supply the data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;inputData:&lt;/strong&gt; Data that will be provided as input to match a value in &lt;strong&gt;inputColumn&lt;/strong&gt; in the table**.**&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;outputColumn:&lt;/strong&gt; Column name of table for which value needs to fetched**.**&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;dataSource:&lt;/strong&gt; Specify the Data source JNDI name as configured in WebLogic server or JDBC string in the format &lt;strong&gt;jdbc:oracle:thin:username/password@host:port:sid&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;**Note: **Only oracle thin driver is supported if used as JDBC string.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Suppose we have a table in our database which contains names of employee corresponding to the empIds. Now, we want to extract the name of employee corresponding to empId which we are getting in input. To do so, one way could be to have a db adapter created and use similar SQL statement as below to retrieve data.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EMP_NAME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EMPLOYEE_TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EMP_ID&lt;/span&gt;&lt;span class="o"&gt;=#&lt;/span&gt;&lt;span class="n"&gt;inputId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If we want to fetch the value directly in assign activity or xslt, we can use the oraext:lookup-table(). This can be treated as alternative approach to dvm lookup where in dvm files are stored local to composite or in MDS.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;EMPLOYEE_TABLE&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;EMP_ID&lt;/th&gt;
&lt;th&gt;EMP_NAME&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1002&lt;/td&gt;
&lt;td&gt;DecipherMiddleware&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;INPUT&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;input&lt;/span&gt; &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://test.com/tns&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;empId&amp;gt;&lt;/span&gt;1002&lt;span class="nt"&gt;&amp;lt;/empId&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;/input&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;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;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/&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;root&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;empName&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:lookup-table(&amp;#39;EMPLOYEE_TABLE&amp;#39;,&amp;#39;EMP_ID&amp;#39;,/ns0:input/ns0:/empId,&amp;#39;EMP_NAME&amp;#39;,&amp;#39;jdbc:oracle:thin:mark1/password@localhost:1521:XE&amp;#39; )&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&amp;lt;/empName&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;/root&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;/xsl:template&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;root&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;empName&amp;gt;&lt;/span&gt;DecipherMiddleware&lt;span class="nt"&gt;&amp;lt;/empName&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;/root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="3-oraextquery-database"&gt;3. oraext:query-database() &lt;a href="#3-oraextquery-database" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;oraext:query-database(sqlQuery as string, rowSet as boolean, row as boolean, dataSource as string)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;sqlQuery:&lt;/strong&gt; SQL query that needs to be executed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;rowSet:&lt;/strong&gt; true(), if we need tag for output rowSet()&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;row:&lt;/strong&gt; true(), if we need tag for each row&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;dataSource:&lt;/strong&gt; Specify the Data source JNDI name as configured in WebLogic server or JDBC string in the format &lt;strong&gt;jdbc:oracle:thin:username/password@host:port:sid&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; Only oracle thin driver is supported if used as JDBC string.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This function can be used to execute SQL statements without configuring a JCA adapter in SOA composite. Let us assume we have a category table like below, from where we need to query all columns.&lt;/p&gt;
&lt;h3 id="category-table"&gt;CATEGORY TABLE &lt;a href="#category-table" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CATEGORYID&lt;/th&gt;
&lt;th&gt;CATEGORYNAME&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;Beverages&lt;/td&gt;
&lt;td&gt;Soft drinks, coffees, teas, beers, and ales&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Condiments&lt;/td&gt;
&lt;td&gt;Sweet and savory sauces, relishes, spreads, and seasonings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Confections&lt;/td&gt;
&lt;td&gt;Desserts, candies, and sweet breads&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Dairy Products&lt;/td&gt;
&lt;td&gt;Cheeses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Grains/Cereals&lt;/td&gt;
&lt;td&gt;Breads, crackers, pasta, and cereal&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;SQL Query&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-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&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;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;xsl:template&lt;/span&gt; &lt;span class="na"&gt;match=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/&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;xsl:variable&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dbData&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;oraext:query-database(&amp;#39;SELECT * FROM category&amp;#39;, true(),true(),&amp;#39;jdbc:oracle:thin:mark1/password@localhost:1521:XE&amp;#39; )&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;root&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;categoryData&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;xsl:copy-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;$dbData&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;/categoryData&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;/root&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;/xsl:template&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;root&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;categoryData&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;ROWSET&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;ROW&lt;/span&gt; &lt;span class="na"&gt;num=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1&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;CATEGORYID&amp;gt;&lt;/span&gt;1&lt;span class="nt"&gt;&amp;lt;/CATEGORYID&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;CATEGORYNAME&amp;gt;&lt;/span&gt;Beverages&lt;span class="nt"&gt;&amp;lt;/CATEGORYNAME&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;DESCRIPTION&amp;gt;&lt;/span&gt;Soft drinks, coffees, teas, beers, and ales&lt;span class="nt"&gt;&amp;lt;/DESCRIPTION&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;/ROW&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;ROW&lt;/span&gt; &lt;span class="na"&gt;num=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;2&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;CATEGORYID&amp;gt;&lt;/span&gt;2&lt;span class="nt"&gt;&amp;lt;/CATEGORYID&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;CATEGORYNAME&amp;gt;&lt;/span&gt;Condiments&lt;span class="nt"&gt;&amp;lt;/CATEGORYNAME&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;DESCRIPTION&amp;gt;&lt;/span&gt;Sweet and savory sauces, relishes, spreads, and seasonings&lt;span class="nt"&gt;&amp;lt;/DESCRIPTION&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;/ROW&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;ROW&lt;/span&gt; &lt;span class="na"&gt;num=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;3&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;CATEGORYID&amp;gt;&lt;/span&gt;3&lt;span class="nt"&gt;&amp;lt;/CATEGORYID&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;CATEGORYNAME&amp;gt;&lt;/span&gt;Confections&lt;span class="nt"&gt;&amp;lt;/CATEGORYNAME&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;DESCRIPTION&amp;gt;&lt;/span&gt;Desserts, candies, and sweet breads&lt;span class="nt"&gt;&amp;lt;/DESCRIPTION&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;/ROW&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;ROW&lt;/span&gt; &lt;span class="na"&gt;num=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;4&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;CATEGORYID&amp;gt;&lt;/span&gt;4&lt;span class="nt"&gt;&amp;lt;/CATEGORYID&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;CATEGORYNAME&amp;gt;&lt;/span&gt;Dairy Products&lt;span class="nt"&gt;&amp;lt;/CATEGORYNAME&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;DESCRIPTION&amp;gt;&lt;/span&gt;Cheeses&lt;span class="nt"&gt;&amp;lt;/DESCRIPTION&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;/ROW&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;ROW&lt;/span&gt; &lt;span class="na"&gt;num=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;5&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;CATEGORYID&amp;gt;&lt;/span&gt;5&lt;span class="nt"&gt;&amp;lt;/CATEGORYID&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;CATEGORYNAME&amp;gt;&lt;/span&gt;Grains/Cereals&lt;span class="nt"&gt;&amp;lt;/CATEGORYNAME&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;DESCRIPTION&amp;gt;&lt;/span&gt;Breads, crackers, pasta, and cereal&lt;span class="nt"&gt;&amp;lt;/DESCRIPTION&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;/ROW&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;/ROWSET&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;/categoryData&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;/root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Since we have kept &lt;strong&gt;rowSet&lt;/strong&gt; and **row **as &lt;strong&gt;true()&lt;/strong&gt; , we are seeing tags coming in output from function result.&lt;/p&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.oracle.com/en/middleware/soa-suite/soa/12.2.1.3/develop/xpath-extension-functions.html#GUID-73F8AE17-41AC-474E-8AF3-6027CAEADB55"&gt;https://docs.oracle.com/en/middleware/soa-suite/soa/12.2.1.3/develop/xpath-extension-functions.html#GUID-73F8AE17-41AC-474E-8AF3-6027CAEADB55&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>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>[OSB 12c][Tutorial] OSB 12c SOAP webservice for temperature conversion i.e. Celsius to Fahrenheit and vice versa</title><link>https://blog.deciphermiddleware.in/posts/osb-12ctutorial-osb-12c-soap-webservice/</link><pubDate>Thu, 08 Apr 2021 19:22:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/osb-12ctutorial-osb-12c-soap-webservice/</guid><description>&lt;p&gt;This tutorial is intended for the audience who are completely new to OSB and want to try a simple hello world kind of application. Instead of sending and receiving &lt;strong&gt;Hello World!&lt;/strong&gt;. We will be using simple temperature conversion i.e. from Celsius to Fahrenheit and vice versa. We will be using simple Xquery to do all conversion and logic.&lt;/p&gt;
&lt;h3 id="high-level"&gt;High Level: &lt;a href="#high-level" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/da676403c2.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/da676403c2.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In this case, our OSB component will contain 2 parts proxy service and pipeline. Proxy service will expose SOAP endpoint to the client application and pipeline will perform various operations on input payload. Since this is just a Hello World application, we will not be using business services. XQuery will be used to implement mathematical logic and conditional logic. Service will take temperature as input and will perform either Fahrenheit to Celsius (FtoC) or Celsius to Fahrenheit (CtoF) temperature conversion. If the conversion type is invalid, then the service will return a failure status.&lt;/p&gt;
&lt;h3 id="mathematical-calculations"&gt;Mathematical Calculations: &lt;a href="#mathematical-calculations" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Let temperature in Fahrenheit be X℉ and temperature in Celsius be Y℃.&lt;/p&gt;
&lt;p&gt;Fahrenheit to Celsius (FtoC)&lt;/p&gt;
&lt;p&gt;X = (9/5*Y) + 32&lt;/p&gt;
&lt;p&gt;Celsius to Fahrenheit (CtoF)&lt;/p&gt;
&lt;p&gt;Y = (X-32)*5/9&lt;/p&gt;
&lt;h3 id="steps"&gt;Steps: &lt;a href="#steps" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Note: Jdeveloper 12c(12.2.1.4) is used for creating OSB artifacts.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;1. Click on File. Click on &lt;strong&gt;New&lt;/strong&gt; and then on &lt;strong&gt;Application&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/b808f86f72.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/b808f86f72.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. Click on &lt;strong&gt;Service Bus Application with Service Bus Project&lt;/strong&gt;. Click on &lt;strong&gt;OK&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/dfd9026d9d.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/dfd9026d9d.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. Specify the &lt;strong&gt;Application Name&lt;/strong&gt; and click on &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/f3a9c6c5e2.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/f3a9c6c5e2.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4. Specify the &lt;strong&gt;Project Name&lt;/strong&gt; and click on &lt;strong&gt;Finish&lt;/strong&gt;. Service Bus Application and Project will be created.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/23f9b29ad3.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/23f9b29ad3.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/23f9b29ad3.png"&gt;&lt;/a&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/d24a5916f8.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/d24a5916f8.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5. Right-click on the project, click on New and then Click on &lt;strong&gt;XML Schema&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/b0fa135a2c.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/b0fa135a2c.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6. Specify the File Name, Directory, and Target Namespace for the XML schema. Click on OK. A new schema file will be created.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/fb19f53dd6.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/fb19f53dd6.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;7. Replace content in the file with the below schema data.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsd" data-lang="xsd"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;windows-1252&amp;#34; ?&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;xsd:schema&lt;/span&gt; &lt;span class="na"&gt;xmlns:xsd=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://www.w3.org/2001/XMLSchema&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://www.example.org&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;targetNamespace=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://www.example.org&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;elementFormDefault=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;qualified&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;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Request&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;xsd:complexType&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;xsd:sequence&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;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;temperature&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xsd:double&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;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;unit&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xsd:string&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;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;conversionType&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xsd:string&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;/xsd:sequence&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;/xsd:complexType&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;/xsd:element&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;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Response&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;xsd:complexType&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;xsd:sequence&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;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;status&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xsd:string&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;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;statusDescription&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xsd:string&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;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;temperature&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xsd:double&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;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;unit&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xsd:string&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;/xsd:sequence&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;/xsd:complexType&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;/xsd:element&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;/xsd:schema&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;8. Drag and drop &lt;strong&gt;pipeline&lt;/strong&gt; from the component palette to &lt;strong&gt;Pipelines/Split Joins area&lt;/strong&gt;. &amp;ldquo;&lt;strong&gt;Create Pipeline Service&lt;/strong&gt; &amp;quot; window will appear.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8Za-Pu4bPS5YFxC5ZZW9JXsFd54OivT-Qhxc1zyT449U-W2VaqYcbZgp6qAtTqjlPYUmiRhwmjcjRyBRTT3lpG2ICXgnhqVXcBJI5nGOglv-1oLFf1wUuhw9hXtI5IHlVg-sNR9AdJ10/"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/0ada9bf2b5.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6. Specify the name for the pipeline and click on Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/af24aeb250.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/af24aeb250.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;9. Select the WSDL radio button and click on create WSDL button.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/16114c9a99.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/16114c9a99.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;10. Use the schema created in&lt;strong&gt;step 7&lt;/strong&gt; and create WSDL using Create WSDL dialog box. Click on OK.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/080224a66d.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/080224a66d.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11. The details will be populated. Check the &lt;strong&gt;Expose as a Proxy Service&lt;/strong&gt;. Specify the name of the proxy service and set Proxy Transport as HTTP. Click on Finish.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/7101e55c06.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/7101e55c06.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;12. Double Click on the pipeline.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/c1344e75c8.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/c1344e75c8.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The pipeline window will open as below.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/4115ab11f3.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/4115ab11f3.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;13. Drag pipeline pair from component pallet and drop below the entry point of the pipeline.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/695ff531a5.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/695ff531a5.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pipeline pair will be added as below and 2 stages will be created, one each under request and response pipelines respectively.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/f3238663a3.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/f3238663a3.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;14. To implement transformation, we will be using XQuery. Create a new XQuery file with the name transformation_xquery.xqy under the Transformations folder.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-xquery" data-lang="xquery"&gt;xquery version &amp;#34;1.0&amp;#34; encoding &amp;#34;utf-8&amp;#34;;
(:: OracleAnnotationVersion &amp;#34;1.0&amp;#34; ::)
declare namespace ns1=&amp;#34;http://www.example.org&amp;#34;;
(:: import schema at &amp;#34;../temperature.xsd&amp;#34; ::)
declare variable $Request as element() (:: schema-element(ns1:Request) ::) external;
declare function local:func($Request as element() (:: schema-element(ns1:Request) ::)) as element() (:: schema-element(ns1:Response) ::) {
if($Request/ns1:conversionType =&amp;#39;CtoF&amp;#39;) then(
&amp;lt;ns1:Response&amp;gt;
&amp;lt;ns1:status&amp;gt;SUCCESS&amp;lt;/ns1:status&amp;gt;
&amp;lt;ns1:statusDescription&amp;gt;Converted to Fahrenheit unit!&amp;lt;/ns1:statusDescription&amp;gt;
&amp;lt;ns1:temperature&amp;gt;{(xs:double($Request/ns1:temperature) * 9.0 div 5.0)+32}&amp;lt;/ns1:temperature&amp;gt;
&amp;lt;ns1:unit&amp;gt;F&amp;lt;/ns1:unit&amp;gt;
&amp;lt;/ns1:Response&amp;gt;
)
else(
if($Request/ns1:conversionType =&amp;#39;FtoC&amp;#39;) then(
&amp;lt;ns1:Response&amp;gt;
&amp;lt;ns1:status&amp;gt;SUCCESS&amp;lt;/ns1:status&amp;gt;
&amp;lt;ns1:statusDescription&amp;gt;Converted to Celsius unit!&amp;lt;/ns1:statusDescription&amp;gt;
&amp;lt;ns1:temperature&amp;gt;{((xs:double($Request/ns1:temperature)-32)*5.0 div 9.0)}&amp;lt;/ns1:temperature&amp;gt;
&amp;lt;ns1:unit&amp;gt;C&amp;lt;/ns1:unit&amp;gt;
&amp;lt;/ns1:Response&amp;gt;
)
else(
&amp;lt;ns1:Response&amp;gt;
&amp;lt;ns1:status&amp;gt;FAILURE&amp;lt;/ns1:status&amp;gt;
&amp;lt;ns1:statusDescription&amp;gt;INVALID conversion type&amp;lt;/ns1:statusDescription&amp;gt;
&amp;lt;ns1:temperature&amp;gt;{$Request/ns1:temperature}&amp;lt;/ns1:temperature&amp;gt;
&amp;lt;ns1:unit&amp;gt;{$Request/ns1:unit}&amp;lt;/ns1:unit&amp;gt;
&amp;lt;/ns1:Response&amp;gt;
)
)
};
local:func($Request)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;15. Add Replace activity to response pipeline under Stage 1.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/06366c2a38.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/06366c2a38.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;16. Under replace properties, set location as the &lt;strong&gt;body&lt;/strong&gt;. Location expression as &amp;ldquo;.&amp;rdquo;. For value select &lt;strong&gt;XQuery resource&lt;/strong&gt;. A window will open. Update the values as shown below. Click on OK.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/bd9fa75a2d.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/bd9fa75a2d.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;17. Under &lt;strong&gt;Replace Option&lt;/strong&gt; , Select &amp;ldquo;&lt;strong&gt;Replace Node Contents&lt;/strong&gt; &amp;ldquo;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/92bb207e22.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/92bb207e22.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;18. Open the proxy service and specify the endpoint for the service or project.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/793782adac.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/793782adac.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Endpoint URI will be the relative URI and the hostname will be added before Endpoint URI for the final URL i.e.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;http://&amp;lt;hostname&amp;gt;:&amp;lt;port&amp;gt;/&amp;lt;Endpoint-URI&amp;gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;19. We need to deploy the service to SBConsole. We can either create a jar and deploy it to the service bus console else we can directly deploy it from Jdeveloper if a server is configured in Jdevloper.&lt;/p&gt;
&lt;p&gt;20. Login to the Service Bus console. Open the proxy service. Click on the Green button to launch the test console.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/9e40476c3e.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/9e40476c3e.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;21. Specify the values for the XML elements and Click on Execute.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/77539b18ee.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/77539b18ee.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The service performs the temperature conversion based on inputs and returns the results as below.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/21d9cae768.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/21d9cae768.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We can test and play with different sets of values to check if the code is working fine and even enhance it further.&lt;/p&gt;
&lt;p&gt;Please share your valuable feedback in the comments section below 😊&lt;/p&gt;</description></item><item><title>FTP Polling using FTP JCA adapter in OSB 12c</title><link>https://blog.deciphermiddleware.in/posts/ftp-polling-using-ftp-jca-adapter-in/</link><pubDate>Thu, 14 Jan 2021 19:04:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/ftp-polling-using-ftp-jca-adapter-in/</guid><description>&lt;p&gt;We can poll files at regular intervals from a remote &lt;strong&gt;ftp/sftp&lt;/strong&gt; server location using &lt;strong&gt;Oracle JCA adapter for FTP&lt;/strong&gt; , with help of &lt;strong&gt;GET&lt;/strong&gt; operation. We can integrate oracle JCA FTP adapter with BPEL, mediator, or OSB 12c. In this article, we will be creating one &lt;strong&gt;OSB&lt;/strong&gt; project that will demonstrate polling of files from remote FTP location using FTP adapter and writing the files to our local server location.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; Using JDeveloper 12c (12.2.1.4).&lt;/em&gt;&lt;/p&gt;
&lt;h3 id="pre-requisites"&gt;Pre-requisites: &lt;a href="#pre-requisites" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Connection factory configured in Weblogic server.&lt;/li&gt;
&lt;li&gt;User, configured in connection factory has the access to read and write files to target/from ftp location&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="steps"&gt;Steps: &lt;a href="#steps" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Let&amp;rsquo;s start by creating a new project with the name &amp;ldquo;FTP_Polling&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/3d4601354d.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/3d4601354d.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Open &amp;ldquo;servicebus.sboverview&amp;rdquo; and drag FTP adapter from components palette to proxy services side.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/27e6ab8419.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/27e6ab8419.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/3574968f6f.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/3574968f6f.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Enter the adapter name and click on next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/35074c6a11.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/35074c6a11.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; In the next step, select Define from operation and schema (specified later).&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/b8a9b78832.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/b8a9b78832.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; Specify the &lt;strong&gt;JNDI&lt;/strong&gt; of the &lt;strong&gt;connection factory&lt;/strong&gt;(e.g. eis/Ftp/testFtpAdapter) for the remote SFTP server, from which we want to poll the files. Click on Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/f3e7c60169.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/f3e7c60169.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5.&lt;/strong&gt; Specify the file type - &lt;strong&gt;Binary or ASCII&lt;/strong&gt;. Select Operation type as &lt;strong&gt;Get File&lt;/strong&gt;. Click Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/6865b3698e.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/6865b3698e.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6.&lt;/strong&gt; Specify the input directory, from where we want to poll files. For e.g. &amp;ldquo;/inbound/input&amp;rdquo;. Uncheck, if you don&amp;rsquo;t want to process files recursively. If you want to delete the file from a remote location, then check &amp;ldquo;Delete files after successful retrieval&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/63fd4f49cd.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/63fd4f49cd.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you want to archive after reading, then check archive processed files. Provide the directory that is located at your server, not on the remote FTP location. If you want to archive at the same remote location, then add the below property in .jca file of the adapter.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt; property name=&amp;ldquo;UseRemoteArchive&amp;rdquo; value=&amp;ldquo;true&amp;rdquo;/&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7.&lt;/strong&gt; Specify the file pattern and click on Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/96f194548d.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/96f194548d.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;8.&lt;/strong&gt; Specify the polling frequency(Here we have kept 1 minute or 60 seconds. The adapter will check every 60 seconds if there is any file available) and click on Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/508e71eb62.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/508e71eb62.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;9.&lt;/strong&gt; Specify the schema, if you don&amp;rsquo;t have any schema and want to read data as opaque then select &amp;ldquo;Native format translation not required&amp;rdquo;. In this example, we will be using an opaque schema and will not convert the data to XML by providing any schema. Click on Next. Then click on Finish.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/291f2301b8.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/291f2301b8.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10.&lt;/strong&gt; Adapter files along with proxy service will be created and the adapter will appear on the proxy services side.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/04fcb988ec.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/04fcb988ec.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/dd5502fee6.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/dd5502fee6.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;11.&lt;/strong&gt; Drag and Drop pipeline on Pipeline/Split joins area. A popup window will appear. Specify the service name and click on Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/ea500f66dc.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/ea500f66dc.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;12.&lt;/strong&gt; Uncheck the &amp;ldquo;Expose as proxy service&amp;rdquo;. Select the concrete wsdl(i.e. containing ports and bindings), which got created while creating the FTP adapter.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/efdc3ec50a.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/efdc3ec50a.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;13.&lt;/strong&gt; Click on Finish. A pipeline will be created. Now link the adapter and connect the arrow from proxy to pipeline as shown below.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/90cb6bb24d.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/90cb6bb24d.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If proxy service is showing error. Just save all files in the project.&lt;/p&gt;
&lt;h4 id="lets-create-a-file-adapter-to-write-the-polled-file-to-some-local-directory"&gt;Let&amp;rsquo;s create a file adapter to write the polled file to some local directory. &lt;a href="#lets-create-a-file-adapter-to-write-the-polled-file-to-some-local-directory" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;14.&lt;/strong&gt; Drag file adapter from components palette. Enter the adapter name and click Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/6a431116bf.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/6a431116bf.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;15.&lt;/strong&gt; Select Define from operation and schema (specified later). Click on Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/a4ffce542a.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/a4ffce542a.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;16.&lt;/strong&gt; Provide the name of &lt;strong&gt;JNDI&lt;/strong&gt; and click on Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/493b890d28.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/493b890d28.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;17.&lt;/strong&gt; Select the &lt;strong&gt;Write File&lt;/strong&gt; as operation type. Click on Next&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/5293941a20.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/5293941a20.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;18.&lt;/strong&gt; Provide the physical or logical directory and file naming convention(e.g. test_%yyMMddHHmmssSS%). Click on Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/7266d77f32.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/7266d77f32.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;19.&lt;/strong&gt; Specify the schema, if you don&amp;rsquo;t have any schema and want to read data as opaque then select &amp;ldquo;Native format translation not required&amp;rdquo;. In this example, we will be using an opaque schema and will not convert the data to XML by providing any schema. Click on Next. Then click on Finish.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/817f82aba9.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/817f82aba9.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;20.&lt;/strong&gt; Business service and adapter files will be created. Join the wire from the pipeline to the newly created file adapter.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/80f20aaa8b.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/80f20aaa8b.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/871e9bbc11.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/871e9bbc11.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;21.&lt;/strong&gt; Double click on the pipeline. The pipeline window will open. You will see, the route node is already created and configured with the file write business service. Click on routing to check for properties.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/8acd40758b.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/8acd40758b.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;22.&lt;/strong&gt; Under properties select operation as write.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/adf539901f.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/adf539901f.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;23.&lt;/strong&gt; Since we are using opaque schema to read and write, we need not do any transformation. Opaque/ base64 data coming as input to service will go to file write business service as output. In this case, the namespace of the body variable will also remain the same.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;24.&lt;/strong&gt; Save and deploy the project to the service bus console. Check for the whole operation to execute.&lt;/p&gt;
&lt;p&gt;Files will be picked from the source location and will be written to the target location. Sample file name: &lt;strong&gt;test_21011512001300&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Since this is an OSB composite, you need to enable trace to see the complete flow from the em console.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Create Delimited String from XML Nodes and Vice Versa in SOA 12c</title><link>https://blog.deciphermiddleware.in/posts/create-delimited-string-or-xml-nodes/</link><pubDate>Fri, 25 Dec 2020 00:00:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/create-delimited-string-or-xml-nodes/</guid><description>&lt;p&gt;A delimited string is a string representation of data separated by a delimiter(e.g. &amp;ldquo;,&amp;rdquo;). A simple representation of the delimited string will look like.&lt;/p&gt;
&lt;h2 id="delimited-string-examples"&gt;Delimited String Examples &lt;a href="#delimited-string-examples" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;Sample-1-- Delimiter as &amp;#34;,&amp;#34;
Value1,Value2,Value3
Sample-2-- Delimiter as &amp;#34;|&amp;#34;
Value1|Value2|Value3
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If we want to represent the above set of delimited values in the form of an XML document under some root and parent tag. The representation will look like this.&lt;/p&gt;
&lt;h3 id="xml-example"&gt;XML Example &lt;a href="#xml-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-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;root&lt;/span&gt; &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://test.com/sample/xml&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;Values&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;value&amp;gt;&lt;/span&gt;Value1&lt;span class="nt"&gt;&amp;lt;/value&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;value&amp;gt;&lt;/span&gt;Value2&lt;span class="nt"&gt;&amp;lt;/value&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;value&amp;gt;&lt;/span&gt;Value3&lt;span class="nt"&gt;&amp;lt;/value&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;/Values&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;/root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sometimes we may need to convert values coming in delimited string to an xml document or vice versa. Since delimited string is similar to csv format. We can create a nxsd schema and then perform translate i.e. native to xml or xml to native within our SOA application. But in the scenarios wherein we just want to convert one delimited string to xml or recurring xml nodes to one delimited string, there we can make use of oracle xpath extension functions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.deciphermiddleware.in/2020/12/create-delimited-string-or-xml-nodes.html#1"&gt;oraext:create-nodeset-from-delimited-string()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.deciphermiddleware.in/2020/12/create-delimited-string-or-xml-nodes.html#2"&gt;oraext:create-delimited-string()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&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;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Both functions can be used in XSLT or BPEL assign activity. The above two mentioned examples will be used for explaining these 2 functions.&lt;/p&gt;
&lt;h2 id="oraextcreate-nodeset-from-delimited-string"&gt;oraext:create-nodeset-from-delimited-string() &lt;a href="#oraextcreate-nodeset-from-delimited-string" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This function is used to create XML node set from delimited string. Basic syntax of the function is as below.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;oraext:create-nodeset-from-delimited-string ($qName, $delimitedString, $delimiter)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;$qName:&lt;/strong&gt; Qualified name of the node for each value to be created along with namespace. For e.g. &amp;lsquo;{http://test.com/sample/xml}value&amp;rsquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;$delimitedString:&lt;/strong&gt; String containing values delimited by a delimiter. Examples as above.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;$delimiter:&lt;/strong&gt; String representation of delimiter. For e.g. &amp;lsquo;,&amp;rsquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="sample-xslt-code"&gt;Sample XSLT code: &lt;a href="#sample-xslt-code" 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;/&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;ns1:root&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;ns1:Values&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;oraext:create-nodeset-from-delimited-string(&amp;#39;{http://test.com/sample/xml}value&amp;#39;,&amp;#39;Value1,Value2,Value3&amp;#39; , &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;ns1:Values&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;ns1:root&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;&lt;strong&gt;Note:&lt;/strong&gt; Excluding, the XSL header for a better view. Please make sure all namespaces are properly imported in the XSL header.
The above code snippet will give output as above example.&lt;/p&gt;
&lt;h2 id="oraextcreate-delimited-string"&gt;oraext:create-delimited-string() &lt;a href="#oraextcreate-delimited-string" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This function is used to convert nodes to delimited string. Below is the syntax of the function.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;oraext:create-delimited-string ($nodeSetValue, $delimiter)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;$nodeSetValue:&lt;/strong&gt; repetitive nodes or combination of nodes for which delimited string needs to be created. For e.g.&lt;/p&gt;
&lt;h3 id="xml-sample"&gt;XML Sample &lt;a href="#xml-sample" 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;value&amp;gt;&lt;/span&gt;Value1&lt;span class="nt"&gt;&amp;lt;/value&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;value&amp;gt;&lt;/span&gt;Value2&lt;span class="nt"&gt;&amp;lt;/value&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;value&amp;gt;&lt;/span&gt;Value3&lt;span class="nt"&gt;&amp;lt;/value&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;$delimiter:&lt;/strong&gt; String representation of delimiter. For e.g. &amp;lsquo;,&amp;rsquo;&lt;/p&gt;
&lt;p&gt;Sample code using the above sample&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="c"&gt;&amp;lt;!--&amp;#39;,&amp;#39; as delimiter--&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;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;oraext:create-delimited-string ($nodeSet/ns1:Values/ns1:value, &amp;#39;,&amp;#39;)&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="c"&gt;&amp;lt;!--&amp;#39;|&amp;#39; as delimiter--&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;xsl:value-of&lt;/span&gt; &lt;span class="na"&gt;select=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;oraext:create-delimited-string ($nodeSet/ns1:Values/ns1:value, &amp;#39;|&amp;#39;)&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;blockquote&gt;
&lt;p&gt;xmlns:ns1=&amp;ldquo;&lt;a href="http://test.com/sample/xml%22"&gt;http://test.com/sample/xml&amp;quot;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here &lt;strong&gt;$nodeSet&lt;/strong&gt; contains the XML data as represented in above example. Above XSL snippets will yield results as shown in &lt;a href="#delimited-string-examples"&gt;delimited string samples&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Import and Export MDS artifacts in SOA 12c</title><link>https://blog.deciphermiddleware.in/posts/import-and-export-mds-artifacts-in-soa/</link><pubDate>Tue, 22 Dec 2020 13:51:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/import-and-export-mds-artifacts-in-soa/</guid><description>&lt;p&gt;Oracle SOA-MDS (Metadata Store) repository can be used to access artifacts that can be shared among various SOA composites. For example, we have one common schema for a business fault that is consumed by various applications. Instead of having a localized copy of that schema file in each SOA composite, we can have it in a centralized repository (SOA-MDS). Another benefit of using SOA-MDS is that we can change the file at runtime and need not redeploy the complete code.&lt;/p&gt;
&lt;p&gt;While developing SOA composites, we use SOA design-time repository, later these changes can be synced to the SOA servers. In this article, we will discuss 2 ways to sync the artifacts available in the SOA design-time repository and the SOA servers.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#1-establishing-the-connection-to-soa-mds-in-jdeveloper"&gt;Establishing the connection to SOA-MDS in Jdeveloper.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#2-using-soa-em-console-or-fusion-middleware-control-console"&gt;Using SOA em console or Fusion Middleware control console.&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="moving-a-file-between-soa-composite-to-soa-design-time-mds-repository"&gt;Moving a file between SOA composite to SOA design-time MDS repository &lt;a href="#moving-a-file-between-soa-composite-to-soa-design-time-mds-repository" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Let&amp;rsquo;s assume, we created a &lt;strong&gt;businessFault.xsd&lt;/strong&gt; which will be used by various SOA composites or projects.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/6dcc9a6563.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/6dcc9a6563.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Before moving this file to the SOA server MDS location, we need to first push it to the SOA design-time repository.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To do so, right-click on &lt;strong&gt;businessFault.xsd&lt;/strong&gt; and click on &lt;strong&gt;Share using SOA Design-Time MDS Repository&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/4f0bafb1e3.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/4f0bafb1e3.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Make sure, that file is not opened in Jdeveloper else you will get the below error.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/5c97fbd7f6.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/5c97fbd7f6.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A wizard will open as below. Click next to proceed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/1f0d7d52d5.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/1f0d7d52d5.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Select the folder in which you want to place the file. For e.g. &amp;lsquo;/apps/Common&amp;rsquo;. Click Next.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/98dde21089.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/98dde21089.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If the document exists with the same name and we want to overwrite, then check the &lt;strong&gt;Overwrite if document exists in the target MDS repository&lt;/strong&gt;. Click Next&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/722acc7277.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/722acc7277.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If there are any references for the document, then those will be displayed along with updates that will happen. In this scenario, the file is not being used currently and the list is empty. Review the changes and click on Finish.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/6e08cf9fbb.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/6e08cf9fbb.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We will get a success message.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/10c087b83a.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/10c087b83a.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/4f81fcca2c.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/4f81fcca2c.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="1-establishing-the-connection-to-soa-mds-in-jdeveloper"&gt;1. Establishing the connection to SOA-MDS in Jdeveloper. &lt;a href="#1-establishing-the-connection-to-soa-mds-in-jdeveloper" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Click on File. Click on New. Under all items select SOA-MDS connection. Click Ok&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/b881d098b8.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/b881d098b8.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Specify the Connection Name (MDSConnection1). Select the type of connection to MDS, either File-based or DB based.&lt;/li&gt;
&lt;li&gt;In this example, we will be using File Based MDS. Specify the path to the MDS File location and click on OK.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/80ad18da71.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/80ad18da71.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you want to configure DB based MDS, then you need to either have the MDS DB connection or create a new DB connection to SOA-MDS.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/1eab201e75.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/1eab201e75.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Now the New MDS connection will be created and can be viewed under the resources palette.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/bb4bcc49c5.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/bb4bcc49c5.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Right-click on the SOA_DesignTimeRepository and then select transfer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/b31321c2bf.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/b31321c2bf.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Select the files which you want to transfer and specify the target MDS connection. Click on transfer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/784aa1b240.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/784aa1b240.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The file will be copied to the target MDS location i.e. SOA-MDS location. The file will be on the SOA server.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/c828657250.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/c828657250.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Similarly, to transfer files from SOA server MDS repository to SOA_DesignTimeRepository. Right-click MDSConnection1 and select transfer. Specify the files and click transfer. Here in this case target Connection will be SOA_DesignTimeRepository.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/736bdf51bb.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/736bdf51bb.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="2-using-soa-em-console-or-fusion-middleware-control-console"&gt;2. Using SOA em console or Fusion Middleware control console. &lt;a href="#2-using-soa-em-console-or-fusion-middleware-control-console" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;We can download the complete MDS repository in the .jar/.zip file and import it into our Jdeveloper and vice versa.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To Download or upload MDS repository .jar/.zip file from em console, Login to em console using the URL http://HOST[: PORT]/em. Click on Target Navigation and click on soa-infra.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/ace2c512fc.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/ace2c512fc.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Click on SOA Infrastructure. A Dropdown menu will appear. Click on Administration and then click on MDS Configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/7bb616dce5.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/7bb616dce5.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On this page, we can import or export the MDS repository in the .jar file. To export click on export. A zip file with the name &amp;ldquo;soa-infra_metadata.zip&amp;rdquo; will be downloaded. Similarly, to import the jar or zip file click on import.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/8e9fb6b777.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/8e9fb6b777.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To import this file in Jdeveloper, right-click on SOA_DesignTimeRepository and click on import from Jar. In case you want to export the file click on Export the Jar and specify the file name.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/aeb990c70b.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/aeb990c70b.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Specify the location of the .jar/zip file containing MDS files. Click on import.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/471c93a6f2.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/471c93a6f2.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; It is always better to use the &lt;a href="#1-establishing-the-connection-to-soa-mds-in-jdeveloper"&gt;first&lt;/a&gt; approach in case files and composites are deployed more on the server.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Read file inside BPEL using Xpath function</title><link>https://blog.deciphermiddleware.in/posts/read-file-inside-bpel-using-xpath/</link><pubDate>Wed, 25 Nov 2020 18:01:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/read-file-inside-bpel-using-xpath/</guid><description>&lt;p&gt;To read a file in SOA composite, we can use the following options&lt;/p&gt;
&lt;p&gt;1. Using file adapter&lt;br&gt;
2. Using java embedding&lt;br&gt;
3. Using xpath function i.e. ora:readFile()&lt;/p&gt;
&lt;p&gt;We generally use file adapter to read, write or poll files from different file locations. But, in case if don&amp;rsquo;t want to create a file adapter and don&amp;rsquo;t want to go for java embedding. We can make use of BPEL xpath extension functions. In this article, we will discuss about reading a file using xpath function &lt;strong&gt;ora:readFile()&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id="xpath-expression"&gt;&lt;strong&gt;Xpath expression:&lt;/strong&gt; &lt;a href="#xpath-expression" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;ora:readFile(&amp;#39;fileName&amp;#39;,[&amp;#39;schemaLocation&amp;#39;],[&amp;#39;rootElement&amp;#39;])
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;xmlns:ora = **&lt;a href="http://schemas.oracle.com/xpath/extension"&gt;http://schemas.oracle.com/xpath/extension&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;&amp;lsquo;fileName&amp;rsquo;&lt;/strong&gt; : Refers to absolute path of file along with extension. This is mandatory field.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lsquo;schemaLocation&amp;rsquo;&lt;/strong&gt; : Refers to location of nxsd schema for the file to be read. This is an optional field. If you don&amp;rsquo;t provide the schema location, then data from the file will be read and converted to base64 encoded string&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;lsquo;rootElement&amp;rsquo;&lt;/strong&gt; : Refers to root element in nxsd schema. This is optional field but required if we provide schema location.&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;&lt;strong&gt;Sample CSV&lt;/strong&gt; file with absolute file path: &lt;strong&gt;&lt;em&gt;C:\Users\test\SOA\test1.csv&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-csv" data-lang="csv"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;S.No&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Field1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Field2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;Field3 &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;t1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;t2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;t3 &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;s1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;s2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;s3&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;&lt;strong&gt;Sample NXSD Schema:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsd" data-lang="xsd"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;xsd:schema&lt;/span&gt; &lt;span class="na"&gt;xmlns:xsd=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://www.w3.org/2001/XMLSchema&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;xmlns:nxsd=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://xmlns.oracle.com/pcbpel/nxsd&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;xmlns:tns=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://TargetNamespace.com/ServiceName&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;targetNamespace=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://TargetNamespace.com/ServiceName&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;elementFormDefault=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;qualified&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;attributeFormDefault=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;unqualified&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;nxsd:version=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;NXSD&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;nxsd:stream=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;chars&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;nxsd:encoding=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;UTF-8&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;nxsd:hasHeader=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;true&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;nxsd:headerLines=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;nxsd:headerLinesTerminatedBy=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;${eol}&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;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Root-Element&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;xsd:complexType&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;xsd:sequence&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;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;row&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;minOccurs=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;maxOccurs=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;unbounded&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;xsd:complexType&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;xsd:sequence&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;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;S.No&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xsd:string&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;nxsd:style=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;terminated&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;nxsd:terminatedBy=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;,&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;nxsd:quotedBy=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;amp;quot;&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;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Field1&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xsd:string&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;nxsd:style=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;terminated&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;nxsd:terminatedBy=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;,&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;nxsd:quotedBy=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;amp;quot;&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;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Field2&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xsd:string&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;nxsd:style=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;terminated&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;nxsd:terminatedBy=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;,&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;nxsd:quotedBy=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;amp;quot;&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;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Field3&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xsd:string&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;nxsd:style=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;terminated&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;nxsd:terminatedBy=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;${eol}&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;nxsd:quotedBy=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;amp;quot;&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;/xsd:sequence&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;/xsd:complexType&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;/xsd:element&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;/xsd:sequence&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;/xsd:complexType&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;/xsd:element&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;/xsd:schema&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;XPath statement without schema, which will give output as base64 schema.&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; ora:readFile(&amp;#39;file:///C:/Users/test/SOA/test1.csv&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/5a4665da22.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/5a4665da22.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/02eec04c2c.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/02eec04c2c.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Uy5ObyxGaWVsZDEsRmllbGQyLEZpZWxkMw0KMSx0MSx0Mix0Mw0KMixzMSxzMixzMw0K
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Xpath statement with schema, which will give output as xml&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ora:readFile('file:///C:/Users/test/SOA/test1.csv','Schemas/nxsd_schema1.xsd','Root-Element')
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/e475840131.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/e475840131.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/3bdebf4a09.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/3bdebf4a09.png" alt=""&gt;&lt;/a&gt;&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;Root-Element&lt;/span&gt; &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://TargetNamespace.com/ServiceName&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;row&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;S.No&amp;gt;&lt;/span&gt;1&lt;span class="nt"&gt;&amp;lt;/S.No&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;Field1&amp;gt;&lt;/span&gt;t1&lt;span class="nt"&gt;&amp;lt;/Field1&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;Field2&amp;gt;&lt;/span&gt;t2&lt;span class="nt"&gt;&amp;lt;/Field2&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;Field3&amp;gt;&lt;/span&gt;t3&lt;span class="nt"&gt;&amp;lt;/Field3&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;/row&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;row&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;S.No&amp;gt;&lt;/span&gt;2&lt;span class="nt"&gt;&amp;lt;/S.No&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;Field1&amp;gt;&lt;/span&gt;s1&lt;span class="nt"&gt;&amp;lt;/Field1&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;Field2&amp;gt;&lt;/span&gt;s2&lt;span class="nt"&gt;&amp;lt;/Field2&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;Field3&amp;gt;&lt;/span&gt;s3&lt;span class="nt"&gt;&amp;lt;/Field3&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;/row&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;/Root-Element&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Using either of the above statements we can read file in assign activity directly, without using file adapter or java embedding.&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>