Insert excerpt | ||||||
---|---|---|---|---|---|---|
|
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 | ||||
---|---|---|---|---|
| ||||
<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 | ||
---|---|---|
| ||
<jsonObject> <getQuote> <request> <symbol>WSO2</symbol> </request> </getQuote> </jsonObject> |
...
Code Block | ||
---|---|---|
| ||
<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.