Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Insert excerpt
ESB Profile Samples
ESB Profile Samples
nopaneltrue

Objective: Demonstrate the ability to expose a SOAP service over JSON by switching between JSON and XML/SOAP message formats using the XSLT mediator and Enrich Mediator /wiki/spaces/EI6xx/pages/49612631 and /wiki/spaces/EI6xx/pages/49612585.

Code Block
languagehtml/xml
linenumberstrue
<definitions xmlns="http://ws.apache.org/ns/synapse"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://ws.apache.org/ns/synapse http://synapse.apache.org/ns/2010/04/configuration/synapse_config.xsd">

    <proxy name="JSONProxy" transports="http https">
        <target>
            <endpoint>
                <address uri="http://localhost:9000/services/SimpleStockQuoteService" format="soap11"/>
            </endpoint>
            <inSequence>
                <log level="full"/>
                <xslt key="in_transform"/>
                <property name="messageType" scope="axis2" value="text/xml"/>
                <header name="Action" scope="default" value="urn:getQuote"/>
                <enrich>
                   <source xmlns:m0="http://services.samples" clone="true" xpath="//m0:getQuote"/>
                   <target type="body"/>
                </enrich>
            </inSequence>
            <outSequence>
                <log level="full"/>
                <xslt key="out_transform"/>
                <property name="messageType" scope="axis2" value="application/json"/>
                <send/>
            </outSequence>
        </target>
    </proxy>

    <localEntry key="in_transform">
        <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                        xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
                        xmlns:m0="http://services.samples" version="2.0" exclude-result-prefixes="m0 fn">
            <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
            <xsl:template match="*">
                <xsl:element name="{local-name()}" namespace="http://services.samples">
                    <xsl:copy-of select="attribute::*"/>
                    <xsl:apply-templates/>
                </xsl:element>
            </xsl:template>
        </xsl:stylesheet>
    </localEntry>

    <localEntry key="out_transform">
        <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
            <xsl:output method="xml" version="1.0" encoding="UTF-8"/>
            <xsl:template match="*">
                <xsl:element name="{local-name()}">
                    <xsl:apply-templates/>
                </xsl:element>
            </xsl:template>
        </xsl:stylesheet>
    </localEntry>

</definitions>

1. Deploy the SimpleStockQuoteService in sample Axis2 server and start it on port 9000.

2. Create the above configuration and deploy it in the WSO2 EI profile, seeĀ Working with WSO2 Integration Studio).

...

This request gets the following XML representation when it gets built in the ESB: (Take a look at the XML representation of JSON payloads /wiki/spaces/EI6xx/pages/49612355 within the ESB)

Code Block
languagehtml/xml
<jsonObject>
    <getQuote>
        <request>
            <symbol>WSO2</symbol>
        </request>
    </getQuote>
</jsonObject>

...

Code Block
languagehtml/xml
<jsonObject xmlns="http://services.samples">
    <getQuote>
        <request>
            <symbol>WSO2</symbol>
        </request>
    </getQuote>
</jsonObject>

Finally the Enrich Mediator /wiki/spaces/EI6xx/pages/49612585 extracts the getQuote element from the above payload and attaches it as the first child of the current payload so that the final SOAP request that is sent to the service has the following format.

...

For more information about using JSON with the ESB, see Working with JSON Message Payloads /wiki/spaces/EI6xx/pages/49612355. For an example of how to convert JSON to XML using using JavaScript instead of XSLT, see Sample 441: Converting JSON to XML Using JavaScript.