<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>BPEL on DecipherMiddleware</title><link>https://blog.deciphermiddleware.in/tags/bpel/</link><description>Recent content in BPEL on DecipherMiddleware</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sat, 12 Mar 2022 07:45:00 +0000</lastBuildDate><atom:link href="https://blog.deciphermiddleware.in/tags/bpel/index.xml" rel="self" type="application/rss+xml"/><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>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></channel></rss>