DVM Transformation of a comma separated delimited string input in SOA 11g

Problem statement:- During one of my project, we had a requirement to apply a DVM transformation on a comma separated delimited input string and post DVM transformation send transformed output as comma separated single string value.

For example :- As an input we are receiving input as <input>A,B,C</input> and now we have to apply a DVM transformation based on below rule

DVM Capture

And the output to target should be <output>X,Y,Z</output>.

Solution :-

To achieve this we have followed below approach

  1. Used oraext:create-nodeset-from-delimited-string() function to convert a delimited string input to a XML output
  2. Apply DVM function on input values
  3. Use oraext:create-delimited-string() function to create a comma(,) separated string.

Below is the snapshot of BPEL Design

BPEL SnapShot

 

To achieve this, we have used a intermediate XSD.

TempXSLTConversion.xsd

<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.example.org"
targetNamespace="http://www.example.org"
elementFormDefault="qualified">
<xsd:element name="InputString">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="DVMInput" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="OutputString">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="DVMOutput" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

 

Below is the BPEL source code for your reference.


<sequence name="main">

<!– Receive input from requestor. (Note: This maps to operation defined in XSLTDVMConversion.wsdl) –>
<receive name=”receiveInput” partnerLink=”xsltdvmconversion_client” portType=”client:XSLTDVMConversion” operation=”process” variable=”inputVariable” createInstance=”yes”/>
<assign name=”CreateNodeSetOfDelimitedString”>
<bpelx:copyList>
<bpelx:from expression=”oraext:create-nodeset-from-delimited-string(‘{http://www.example.org}DVMInput’,bpws:getVariableData(‘inputVariable’,’payload’,’/client:process/client:input’),’,’)”/>
<bpelx:to variable=”TempInputVariable”
query=”/ns1:InputString/ns1:DVMInput”/>
</bpelx:copyList>
</assign>
<assign name=”DVMTransform”>
<bpelx:annotation>
<bpelx:pattern>transformation</bpelx:pattern>
</bpelx:annotation>
<copy>
<from expression=”ora:doXSLTransformForDoc(‘xsl/Transformation_DVM.xsl’, $TempInputVariable)”/>
<to variable=”TempOutPutVariable”/>
</copy>
</assign>
<assign name=”CombinNodeSetToDelimatedString”>
<bpelx:annotation>
<bpelx:pattern>transformation</bpelx:pattern>
</bpelx:annotation>
<copy>
<from expression=”ora:doXSLTransformForDoc(‘xsl/Transformation_DelimatedString.xsl’, $TempOutPutVariable)”/>
<to variable=”outputVariable” part=”payload”/>
</copy>
</assign>
<!– Generate reply to synchronous request –>
<reply name=”replyOutput” partnerLink=”xsltdvmconversion_client” portType=”client:XSLTDVMConversion” operation=”process” variable=”outputVariable”/>
</sequence>

 

Attached the sample code your reference. Feel free to post your query if you have see any issue with sample code.

Advertisements
This entry was posted in SOA and tagged , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s