ESB XLST Mediator supports mediates the messages when there are dynamic (not predefined/ not static) request for ESB proxy. The XLST mediator applies specified XLST transformation to a selected element of current message payload.
Working with XSLT Mediator
This blog post explains how XSLT mediator works, with a simple example.
Let's assume we have a simple calculator service which defines to work only for "a" and "b" payloads for all four operations. Assume this service is hosted in WSO2 Application server.
<add>
<a>?</a>
<b>?</b>
</add>
<divide>
<a>?</a>
<b>?</b>
</divide>
<multiply>
<a>?</a>
<b>?</b>
</multiply>
<subtract>
<a>?</a>
<b>?</b>
</subtract>
<a>?</a>
<b>?</b>
</add>
<divide>
<a>?</a>
<b>?</b>
</divide>
<multiply>
<a>?</a>
<b>?</b>
</multiply>
<subtract>
<a>?</a>
<b>?</b>
</subtract>
But what happens if we give payloads as "c" and "d" ? The calculator service won't identify the payloads and give us error response. As a solution for this we can use ESB XSLT mediator.
This is the created XSLT file for solve the above problem and save that in ESB local entries.
<xsl:output method="xml" encoding="utf-8" indent="yes"></xsl:output>
<xsl:template match="p:add">
<p:addition xmlns="http://ws.apache.org/ns/synapse">
<p:c>
<xsl:value-of select="p:a"></xsl:value-of>
</p:c>
<p:d>
<xsl:value-of select="p:b"></xsl:value-of>
</p:d>
</p:addition>
</xsl:template>
</xsl:stylesheet>
Please note this XSLT representation only for "add" operation.
Create a proxy service in ESB by adding XSLT mediator as follows.
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="testR"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<xslt key="xsltNew"/>
<send>
<endpoint>
<address uri="http://localhost:8280/services/Calculator/"/>
</endpoint>
</send>
</inSequence>
<outSequence>
<send/>
</outSequence>
</target>
<publishWSDL uri="http://localhost:9764/services/Calculator?wsdl"/>
<description/>
</proxy>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="testR"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<xslt key="xsltNew"/>
<send>
<endpoint>
<address uri="http://localhost:8280/services/Calculator/"/>
</endpoint>
</send>
</inSequence>
<outSequence>
<send/>
</outSequence>
</target>
<publishWSDL uri="http://localhost:9764/services/Calculator?wsdl"/>
<description/>
</proxy>
Now create a new project in SoapUI by adding the WSDL of the created calculator service.
Invoke the calculator service by sending the payloads as "c" and "d". Now the requests are receiving to ESB as "c" and "d" . The XSLT mediator in ESB proxy converts this to "a"and "b" and send to the Application server where the calculator service is hosted. Inside Application server the calculations are done and the respond is send back to the ESB. Then the XSLT mediator in ESB Proxy service understands that, this is the the response for "c" and "d" and it send the answer to the client.