<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>OSB on DecipherMiddleware</title><link>https://blog.deciphermiddleware.in/tags/osb/</link><description>Recent content in OSB on DecipherMiddleware</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 08 Apr 2021 19:22:00 +0000</lastBuildDate><atom:link href="https://blog.deciphermiddleware.in/tags/osb/index.xml" rel="self" type="application/rss+xml"/><item><title>[OSB 12c][Tutorial] OSB 12c SOAP webservice for temperature conversion i.e. Celsius to Fahrenheit and vice versa</title><link>https://blog.deciphermiddleware.in/posts/osb-12ctutorial-osb-12c-soap-webservice/</link><pubDate>Thu, 08 Apr 2021 19:22:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/osb-12ctutorial-osb-12c-soap-webservice/</guid><description>&lt;p&gt;This tutorial is intended for the audience who are completely new to OSB and want to try a simple hello world kind of application. Instead of sending and receiving &lt;strong&gt;Hello World!&lt;/strong&gt;. We will be using simple temperature conversion i.e. from Celsius to Fahrenheit and vice versa. We will be using simple Xquery to do all conversion and logic.&lt;/p&gt;
&lt;h3 id="high-level"&gt;High Level: &lt;a href="#high-level" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/da676403c2.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/da676403c2.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In this case, our OSB component will contain 2 parts proxy service and pipeline. Proxy service will expose SOAP endpoint to the client application and pipeline will perform various operations on input payload. Since this is just a Hello World application, we will not be using business services. XQuery will be used to implement mathematical logic and conditional logic. Service will take temperature as input and will perform either Fahrenheit to Celsius (FtoC) or Celsius to Fahrenheit (CtoF) temperature conversion. If the conversion type is invalid, then the service will return a failure status.&lt;/p&gt;
&lt;h3 id="mathematical-calculations"&gt;Mathematical Calculations: &lt;a href="#mathematical-calculations" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Let temperature in Fahrenheit be X℉ and temperature in Celsius be Y℃.&lt;/p&gt;
&lt;p&gt;Fahrenheit to Celsius (FtoC)&lt;/p&gt;
&lt;p&gt;X = (9/5*Y) + 32&lt;/p&gt;
&lt;p&gt;Celsius to Fahrenheit (CtoF)&lt;/p&gt;
&lt;p&gt;Y = (X-32)*5/9&lt;/p&gt;
&lt;h3 id="steps"&gt;Steps: &lt;a href="#steps" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Note: Jdeveloper 12c(12.2.1.4) is used for creating OSB artifacts.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;1. Click on File. Click on &lt;strong&gt;New&lt;/strong&gt; and then on &lt;strong&gt;Application&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/b808f86f72.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/b808f86f72.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. Click on &lt;strong&gt;Service Bus Application with Service Bus Project&lt;/strong&gt;. Click on &lt;strong&gt;OK&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/dfd9026d9d.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/dfd9026d9d.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. Specify the &lt;strong&gt;Application Name&lt;/strong&gt; and click on &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/f3a9c6c5e2.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/f3a9c6c5e2.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4. Specify the &lt;strong&gt;Project Name&lt;/strong&gt; and click on &lt;strong&gt;Finish&lt;/strong&gt;. Service Bus Application and Project will be created.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/23f9b29ad3.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/23f9b29ad3.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/23f9b29ad3.png"&gt;&lt;/a&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/d24a5916f8.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/d24a5916f8.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5. Right-click on the project, click on New and then Click on &lt;strong&gt;XML Schema&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/b0fa135a2c.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/b0fa135a2c.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6. Specify the File Name, Directory, and Target Namespace for the XML schema. Click on OK. A new schema file will be created.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/fb19f53dd6.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/fb19f53dd6.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;7. Replace content in the file with the below schema data.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xsd" data-lang="xsd"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;windows-1252&amp;#34; ?&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;xsd:schema&lt;/span&gt; &lt;span class="na"&gt;xmlns:xsd=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://www.w3.org/2001/XMLSchema&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://www.example.org&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;targetNamespace=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://www.example.org&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;elementFormDefault=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;qualified&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Request&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;xsd:complexType&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;xsd:sequence&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;temperature&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xsd:double&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;unit&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xsd:string&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;conversionType&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xsd:string&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/xsd:sequence&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/xsd:complexType&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/xsd:element&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Response&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;xsd:complexType&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;xsd:sequence&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;status&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xsd:string&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;statusDescription&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xsd:string&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;temperature&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xsd:double&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;xsd:element&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;unit&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xsd:string&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/xsd:sequence&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/xsd:complexType&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/xsd:element&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/xsd:schema&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;8. Drag and drop &lt;strong&gt;pipeline&lt;/strong&gt; from the component palette to &lt;strong&gt;Pipelines/Split Joins area&lt;/strong&gt;. &amp;ldquo;&lt;strong&gt;Create Pipeline Service&lt;/strong&gt; &amp;quot; window will appear.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8Za-Pu4bPS5YFxC5ZZW9JXsFd54OivT-Qhxc1zyT449U-W2VaqYcbZgp6qAtTqjlPYUmiRhwmjcjRyBRTT3lpG2ICXgnhqVXcBJI5nGOglv-1oLFf1wUuhw9hXtI5IHlVg-sNR9AdJ10/"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/0ada9bf2b5.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6. Specify the name for the pipeline and click on Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/af24aeb250.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/af24aeb250.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;9. Select the WSDL radio button and click on create WSDL button.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/16114c9a99.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/16114c9a99.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;10. Use the schema created in&lt;strong&gt;step 7&lt;/strong&gt; and create WSDL using Create WSDL dialog box. Click on OK.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/080224a66d.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/080224a66d.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;11. The details will be populated. Check the &lt;strong&gt;Expose as a Proxy Service&lt;/strong&gt;. Specify the name of the proxy service and set Proxy Transport as HTTP. Click on Finish.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/7101e55c06.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/7101e55c06.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;12. Double Click on the pipeline.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/c1344e75c8.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/c1344e75c8.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The pipeline window will open as below.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/4115ab11f3.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/4115ab11f3.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;13. Drag pipeline pair from component pallet and drop below the entry point of the pipeline.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/695ff531a5.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/695ff531a5.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pipeline pair will be added as below and 2 stages will be created, one each under request and response pipelines respectively.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/f3238663a3.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/f3238663a3.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;14. To implement transformation, we will be using XQuery. Create a new XQuery file with the name transformation_xquery.xqy under the Transformations folder.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-xquery" data-lang="xquery"&gt;xquery version &amp;#34;1.0&amp;#34; encoding &amp;#34;utf-8&amp;#34;;
(:: OracleAnnotationVersion &amp;#34;1.0&amp;#34; ::)
declare namespace ns1=&amp;#34;http://www.example.org&amp;#34;;
(:: import schema at &amp;#34;../temperature.xsd&amp;#34; ::)
declare variable $Request as element() (:: schema-element(ns1:Request) ::) external;
declare function local:func($Request as element() (:: schema-element(ns1:Request) ::)) as element() (:: schema-element(ns1:Response) ::) {
if($Request/ns1:conversionType =&amp;#39;CtoF&amp;#39;) then(
&amp;lt;ns1:Response&amp;gt;
&amp;lt;ns1:status&amp;gt;SUCCESS&amp;lt;/ns1:status&amp;gt;
&amp;lt;ns1:statusDescription&amp;gt;Converted to Fahrenheit unit!&amp;lt;/ns1:statusDescription&amp;gt;
&amp;lt;ns1:temperature&amp;gt;{(xs:double($Request/ns1:temperature) * 9.0 div 5.0)+32}&amp;lt;/ns1:temperature&amp;gt;
&amp;lt;ns1:unit&amp;gt;F&amp;lt;/ns1:unit&amp;gt;
&amp;lt;/ns1:Response&amp;gt;
)
else(
if($Request/ns1:conversionType =&amp;#39;FtoC&amp;#39;) then(
&amp;lt;ns1:Response&amp;gt;
&amp;lt;ns1:status&amp;gt;SUCCESS&amp;lt;/ns1:status&amp;gt;
&amp;lt;ns1:statusDescription&amp;gt;Converted to Celsius unit!&amp;lt;/ns1:statusDescription&amp;gt;
&amp;lt;ns1:temperature&amp;gt;{((xs:double($Request/ns1:temperature)-32)*5.0 div 9.0)}&amp;lt;/ns1:temperature&amp;gt;
&amp;lt;ns1:unit&amp;gt;C&amp;lt;/ns1:unit&amp;gt;
&amp;lt;/ns1:Response&amp;gt;
)
else(
&amp;lt;ns1:Response&amp;gt;
&amp;lt;ns1:status&amp;gt;FAILURE&amp;lt;/ns1:status&amp;gt;
&amp;lt;ns1:statusDescription&amp;gt;INVALID conversion type&amp;lt;/ns1:statusDescription&amp;gt;
&amp;lt;ns1:temperature&amp;gt;{$Request/ns1:temperature}&amp;lt;/ns1:temperature&amp;gt;
&amp;lt;ns1:unit&amp;gt;{$Request/ns1:unit}&amp;lt;/ns1:unit&amp;gt;
&amp;lt;/ns1:Response&amp;gt;
)
)
};
local:func($Request)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;15. Add Replace activity to response pipeline under Stage 1.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/06366c2a38.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/06366c2a38.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;16. Under replace properties, set location as the &lt;strong&gt;body&lt;/strong&gt;. Location expression as &amp;ldquo;.&amp;rdquo;. For value select &lt;strong&gt;XQuery resource&lt;/strong&gt;. A window will open. Update the values as shown below. Click on OK.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/bd9fa75a2d.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/bd9fa75a2d.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;17. Under &lt;strong&gt;Replace Option&lt;/strong&gt; , Select &amp;ldquo;&lt;strong&gt;Replace Node Contents&lt;/strong&gt; &amp;ldquo;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/92bb207e22.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/92bb207e22.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;18. Open the proxy service and specify the endpoint for the service or project.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/793782adac.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/793782adac.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Endpoint URI will be the relative URI and the hostname will be added before Endpoint URI for the final URL i.e.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;http://&amp;lt;hostname&amp;gt;:&amp;lt;port&amp;gt;/&amp;lt;Endpoint-URI&amp;gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;19. We need to deploy the service to SBConsole. We can either create a jar and deploy it to the service bus console else we can directly deploy it from Jdeveloper if a server is configured in Jdevloper.&lt;/p&gt;
&lt;p&gt;20. Login to the Service Bus console. Open the proxy service. Click on the Green button to launch the test console.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/9e40476c3e.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/9e40476c3e.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;21. Specify the values for the XML elements and Click on Execute.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/77539b18ee.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/77539b18ee.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The service performs the temperature conversion based on inputs and returns the results as below.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/21d9cae768.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/21d9cae768.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We can test and play with different sets of values to check if the code is working fine and even enhance it further.&lt;/p&gt;
&lt;p&gt;Please share your valuable feedback in the comments section below 😊&lt;/p&gt;</description></item><item><title>FTP Polling using FTP JCA adapter in OSB 12c</title><link>https://blog.deciphermiddleware.in/posts/ftp-polling-using-ftp-jca-adapter-in/</link><pubDate>Thu, 14 Jan 2021 19:04:00 +0000</pubDate><guid>https://blog.deciphermiddleware.in/posts/ftp-polling-using-ftp-jca-adapter-in/</guid><description>&lt;p&gt;We can poll files at regular intervals from a remote &lt;strong&gt;ftp/sftp&lt;/strong&gt; server location using &lt;strong&gt;Oracle JCA adapter for FTP&lt;/strong&gt; , with help of &lt;strong&gt;GET&lt;/strong&gt; operation. We can integrate oracle JCA FTP adapter with BPEL, mediator, or OSB 12c. In this article, we will be creating one &lt;strong&gt;OSB&lt;/strong&gt; project that will demonstrate polling of files from remote FTP location using FTP adapter and writing the files to our local server location.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; Using JDeveloper 12c (12.2.1.4).&lt;/em&gt;&lt;/p&gt;
&lt;h3 id="pre-requisites"&gt;Pre-requisites: &lt;a href="#pre-requisites" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Connection factory configured in Weblogic server.&lt;/li&gt;
&lt;li&gt;User, configured in connection factory has the access to read and write files to target/from ftp location&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="steps"&gt;Steps: &lt;a href="#steps" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Let&amp;rsquo;s start by creating a new project with the name &amp;ldquo;FTP_Polling&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/3d4601354d.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/3d4601354d.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Open &amp;ldquo;servicebus.sboverview&amp;rdquo; and drag FTP adapter from components palette to proxy services side.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/27e6ab8419.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/27e6ab8419.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/3574968f6f.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/3574968f6f.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Enter the adapter name and click on next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/35074c6a11.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/35074c6a11.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; In the next step, select Define from operation and schema (specified later).&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/b8a9b78832.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/b8a9b78832.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; Specify the &lt;strong&gt;JNDI&lt;/strong&gt; of the &lt;strong&gt;connection factory&lt;/strong&gt;(e.g. eis/Ftp/testFtpAdapter) for the remote SFTP server, from which we want to poll the files. Click on Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/f3e7c60169.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/f3e7c60169.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5.&lt;/strong&gt; Specify the file type - &lt;strong&gt;Binary or ASCII&lt;/strong&gt;. Select Operation type as &lt;strong&gt;Get File&lt;/strong&gt;. Click Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/6865b3698e.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/6865b3698e.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6.&lt;/strong&gt; Specify the input directory, from where we want to poll files. For e.g. &amp;ldquo;/inbound/input&amp;rdquo;. Uncheck, if you don&amp;rsquo;t want to process files recursively. If you want to delete the file from a remote location, then check &amp;ldquo;Delete files after successful retrieval&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/63fd4f49cd.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/63fd4f49cd.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you want to archive after reading, then check archive processed files. Provide the directory that is located at your server, not on the remote FTP location. If you want to archive at the same remote location, then add the below property in .jca file of the adapter.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt; property name=&amp;ldquo;UseRemoteArchive&amp;rdquo; value=&amp;ldquo;true&amp;rdquo;/&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7.&lt;/strong&gt; Specify the file pattern and click on Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/96f194548d.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/96f194548d.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;8.&lt;/strong&gt; Specify the polling frequency(Here we have kept 1 minute or 60 seconds. The adapter will check every 60 seconds if there is any file available) and click on Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/508e71eb62.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/508e71eb62.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;9.&lt;/strong&gt; Specify the schema, if you don&amp;rsquo;t have any schema and want to read data as opaque then select &amp;ldquo;Native format translation not required&amp;rdquo;. In this example, we will be using an opaque schema and will not convert the data to XML by providing any schema. Click on Next. Then click on Finish.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/291f2301b8.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/291f2301b8.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10.&lt;/strong&gt; Adapter files along with proxy service will be created and the adapter will appear on the proxy services side.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/04fcb988ec.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/04fcb988ec.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/dd5502fee6.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/dd5502fee6.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;11.&lt;/strong&gt; Drag and Drop pipeline on Pipeline/Split joins area. A popup window will appear. Specify the service name and click on Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/ea500f66dc.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/ea500f66dc.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;12.&lt;/strong&gt; Uncheck the &amp;ldquo;Expose as proxy service&amp;rdquo;. Select the concrete wsdl(i.e. containing ports and bindings), which got created while creating the FTP adapter.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/efdc3ec50a.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/efdc3ec50a.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;13.&lt;/strong&gt; Click on Finish. A pipeline will be created. Now link the adapter and connect the arrow from proxy to pipeline as shown below.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/90cb6bb24d.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/90cb6bb24d.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If proxy service is showing error. Just save all files in the project.&lt;/p&gt;
&lt;h4 id="lets-create-a-file-adapter-to-write-the-polled-file-to-some-local-directory"&gt;Let&amp;rsquo;s create a file adapter to write the polled file to some local directory. &lt;a href="#lets-create-a-file-adapter-to-write-the-polled-file-to-some-local-directory" class="anchor"&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;14.&lt;/strong&gt; Drag file adapter from components palette. Enter the adapter name and click Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/6a431116bf.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/6a431116bf.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;15.&lt;/strong&gt; Select Define from operation and schema (specified later). Click on Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/a4ffce542a.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/a4ffce542a.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;16.&lt;/strong&gt; Provide the name of &lt;strong&gt;JNDI&lt;/strong&gt; and click on Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/493b890d28.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/493b890d28.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;17.&lt;/strong&gt; Select the &lt;strong&gt;Write File&lt;/strong&gt; as operation type. Click on Next&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/5293941a20.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/5293941a20.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;18.&lt;/strong&gt; Provide the physical or logical directory and file naming convention(e.g. test_%yyMMddHHmmssSS%). Click on Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/7266d77f32.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/7266d77f32.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;19.&lt;/strong&gt; Specify the schema, if you don&amp;rsquo;t have any schema and want to read data as opaque then select &amp;ldquo;Native format translation not required&amp;rdquo;. In this example, we will be using an opaque schema and will not convert the data to XML by providing any schema. Click on Next. Then click on Finish.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/817f82aba9.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/817f82aba9.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;20.&lt;/strong&gt; Business service and adapter files will be created. Join the wire from the pipeline to the newly created file adapter.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/80f20aaa8b.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/80f20aaa8b.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/871e9bbc11.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/871e9bbc11.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;21.&lt;/strong&gt; Double click on the pipeline. The pipeline window will open. You will see, the route node is already created and configured with the file write business service. Click on routing to check for properties.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/8acd40758b.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/8acd40758b.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;22.&lt;/strong&gt; Under properties select operation as write.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.deciphermiddleware.in/images/blogger/adf539901f.png"&gt;&lt;img src="https://blog.deciphermiddleware.in/images/blogger/adf539901f.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;23.&lt;/strong&gt; Since we are using opaque schema to read and write, we need not do any transformation. Opaque/ base64 data coming as input to service will go to file write business service as output. In this case, the namespace of the body variable will also remain the same.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;24.&lt;/strong&gt; Save and deploy the project to the service bus console. Check for the whole operation to execute.&lt;/p&gt;
&lt;p&gt;Files will be picked from the source location and will be written to the target location. Sample file name: &lt;strong&gt;test_21011512001300&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Since this is an OSB composite, you need to enable trace to see the complete flow from the em console.&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>