In my previous blog I showed how to use an iterate mediator to iterate through a soap message. In this post I am going to explain how WSO2 ESB payload mediator works.
Lets say you have a service which provides set of data and you want to call a data service insert operation. This message is generated from a data service, which access a database table and get set of records from the database. Please refer "How to create a MYSQL data service using WSO2 data services Server" If you want to create the data service and generate the below Request,
<Keys xmlns="http://ws.wso2.org/dataservice">
<Key>
<P_Id>1</P_Id>
<LastName>Soysa</LastName>
<FirstName>Amani</FirstName>
<Address>361 Kotte Road Nugegoda</Address>
<City>Colombo</City>
</Key>
<Key>
<P_Id>2</P_Id>
<LastName>Bishop</LastName>
<FirstName>Peter</FirstName>
<Address>300 Technology BuildingHouston</Address>
<City>London</City>
</Key>
<Key>
<P_Id>3</P_Id>
<LastName>Clark</LastName>
<FirstName>James</FirstName>
<Address>Southampton</Address>
<City>London</City>
</Key>
<Key>
<P_Id>4</P_Id>
<LastName>Carol</LastName>
<FirstName>Dilan</FirstName>
<Address>A221 LSRC Box 90328 </Address>
<City>Durham</City>
</Key>
</Keys>
Lets see how we can use this data set which will come to WSO2 ESB as a soap request and we need to extract soap payload data and send them to a data service. First we need to use the iterate mediator which will iterate the soap request if you have more than one data set. And we need to create the data service soap request using the payload mediator.
<payloadFactory>
<format>
<p:InsertPerson xmlns:p="http://ws.wso2.org/dataservice">
<p:P_Id>?</p:P_Id>
<p:LastName>?</p:LastName>
<p:FirstName>?</p:FirstName>
<p:Address>?</p:Address>
<p:City>?</p:City>
</p:InsertPerson>
</format>
<args>
<arg expression="//P_Id/text()" />
<arg expression="//LastName/text()" />
<arg expression="//FirstName/text()" />
<arg expression="//Address/text()" />
<arg expression="//City/text()" />
</args>
</payloadFactory>
Once we create the payload mediator then we can create a send mediator to insert data to data service
Lets say you have a service which provides set of data and you want to call a data service insert operation. This message is generated from a data service, which access a database table and get set of records from the database. Please refer "How to create a MYSQL data service using WSO2 data services Server" If you want to create the data service and generate the below Request,
<Keys xmlns="http://ws.wso2.org/dataservice">
<Key>
<P_Id>1</P_Id>
<LastName>Soysa</LastName>
<FirstName>Amani</FirstName>
<Address>361 Kotte Road Nugegoda</Address>
<City>Colombo</City>
</Key>
<Key>
<P_Id>2</P_Id>
<LastName>Bishop</LastName>
<FirstName>Peter</FirstName>
<Address>300 Technology BuildingHouston</Address>
<City>London</City>
</Key>
<Key>
<P_Id>3</P_Id>
<LastName>Clark</LastName>
<FirstName>James</FirstName>
<Address>Southampton</Address>
<City>London</City>
</Key>
<Key>
<P_Id>4</P_Id>
<LastName>Carol</LastName>
<FirstName>Dilan</FirstName>
<Address>A221 LSRC Box 90328 </Address>
<City>Durham</City>
</Key>
</Keys>
Lets see how we can use this data set which will come to WSO2 ESB as a soap request and we need to extract soap payload data and send them to a data service. First we need to use the iterate mediator which will iterate the soap request if you have more than one data set. And we need to create the data service soap request using the payload mediator.
<payloadFactory>
<format>
<p:InsertPerson xmlns:p="http://ws.wso2.org/dataservice">
<p:P_Id>?</p:P_Id>
<p:LastName>?</p:LastName>
<p:FirstName>?</p:FirstName>
<p:Address>?</p:Address>
<p:City>?</p:City>
</p:InsertPerson>
</format>
<args>
<arg expression="//P_Id/text()" />
<arg expression="//LastName/text()" />
<arg expression="//FirstName/text()" />
<arg expression="//Address/text()" />
<arg expression="//City/text()" />
</args>
</payloadFactory>
Once we create the payload mediator then we can create a send mediator to insert data to data service
When you add everything together your proxy service will look like shown below.
<proxy xmlns="http://ws.apache.org/ns/synapse" name="AssetProxyService" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
<target>
<inSequence>
<iterate xmlns:m="http://ws.wso2.org/dataservice" id="iter1" expression="//m:Keys/m:Key">
<target>
<sequence>
<payloadFactory>
<format>
<p:InsertPerson xmlns:p="http://ws.wso2.org/dataservice">
<p:P_Id>?</p:P_Id>
<p:LastName>?</p:LastName>
<p:FirstName>?</p:FirstName>
<p:Address>?</p:Address>
<p:City>?</p:City>
</p:InsertPerson>
</format>
<args>
<arg expression="//P_Id/text()" />
<arg expression="//LastName/text()" />
<arg expression="//FirstName/text()" />
<arg expression="//Address/text()" />
<arg expression="//City/text()" />
</args>
</payloadFactory>
<send>
<endpoint>
<address uri="http://localhost:9765/services/MyFirstDSS/" />
</endpoint>
</send>
</sequence>
</target>
</iterate>
</inSequence>
</target>
<description />
</proxy>
<proxy xmlns="http://ws.apache.org/ns/synapse" name="AssetProxyService" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
<target>
<inSequence>
<iterate xmlns:m="http://ws.wso2.org/dataservice" id="iter1" expression="//m:Keys/m:Key">
<target>
<sequence>
<payloadFactory>
<format>
<p:InsertPerson xmlns:p="http://ws.wso2.org/dataservice">
<p:P_Id>?</p:P_Id>
<p:LastName>?</p:LastName>
<p:FirstName>?</p:FirstName>
<p:Address>?</p:Address>
<p:City>?</p:City>
</p:InsertPerson>
</format>
<args>
<arg expression="//P_Id/text()" />
<arg expression="//LastName/text()" />
<arg expression="//FirstName/text()" />
<arg expression="//Address/text()" />
<arg expression="//City/text()" />
</args>
</payloadFactory>
<send>
<endpoint>
<address uri="http://localhost:9765/services/MyFirstDSS/" />
</endpoint>
</send>
</sequence>
</target>
</iterate>
</inSequence>
</target>
<description />
</proxy>
No comments:
Post a Comment