This documentation is for WSO2 Enterprise Service Bus version 4.8.0 . View documentation for the latest release.

All docs This doc
Skip to end of metadata
Go to start of metadata

Objective: Demonstrate the ability to expose a SOAP service over JSON by switching between JSON and XML/SOAP message formats using JavaScript and the Script mediator.

Sample 441 configuration
<definitions xmlns="http://ws.apache.org/ns/synapse">
    <proxy name="JSONProxy" transports="http https">
        <target>
            <endpoint>
                <address uri="http://localhost:9000/services/SimpleStockQuoteService" format="soap11"/>
            </endpoint>
            <inSequence>
                <!-- transform the custom quote request into a standard quote requst expected by the service -->
                <script language="js"><![CDATA[
                    var symbol = mc.getPayloadJSON().symbol.toString();
                    mc.setPayloadXML(
                        <m:getQuote xmlns:m="http://services.samples">
                            <m:request>
                                <m:symbol>{symbol}</m:symbol>
                            </m:request>
                        </m:getQuote>);
                ]]></script>
                <header name="Action" value="urn:getQuote"/>
            </inSequence>
            <outSequence>
                <script language="js"><![CDATA[
                    var symbol = mc.getPayloadXML()..*::symbol.toString();
                    var price = parseFloat(mc.getPayloadXML()..*::last);
                    mc.setPayloadJSON(
	                    {
                            "Quote" : {
                                "Code" : symbol,
                                "Price" : price,
                                "Current" : {
                                    "High" : parseFloat(mc.getPayloadXML()..*::high),
                                    "Last" : parseFloat(mc.getPayloadXML()..*::last)
                                } 
                            },
                            "Status" : (price >= 100 ? "OK" : "NOT-OK")
                 });]]></script>
                <property name="messageType" scope="axis2" value="application/json"/>
                <send/>
            </outSequence>
        </target>
    </proxy>
</definitions>

The JavaScript specified by the Script mediator found in the inSequence performs the JSON to SOAP (XML) transformation as the SimpleStockQuoteService endpoint accepts SOAP. Similarly, the Script mediator in the outSequece performs the SOAP to JSON transformation.

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

2. Replace the configuration of Sample 441 (found in <ESB_HOME>/repository/samples/synapse_sample_441.xml) with the configuration shown above. We need to perform this step because in the configuration found in the ESB distribution, the header definition to add the SOAP action (see line 18 above) is missing. Therefore we need to manually add that header definition to the configuration.

3. Start WSO2 ESB with the sample configuration 441 (i.e., wso2esb-samples -sn 441).

Invoke the above proxy service with following request:

curl -v -X POST \
    -H "Content-Type:application/json" \
    -d '{"symbol":"WSO2", "ID":"StockQuote"}' \
    "http://localhost:8280/services/JSONProxy"

If the invocation is successful, you will see a response similar to the following:

{
   "Quote":{
      "Current":{
         "High":-61.53602401623976,
         "Last":62.32682938796667
      },
      "Code":"WSO2",
      "Price":62.32682938796667
   },
   "Status":"NOT-OK"
}

For more information about using JSON with the ESB, see JSON Support. To see an example of converting JSON to XML using XSLT instead of JavaScript, see Sample 440: Converting JSON to XML Using XSLT. For additional examples of the Script mediator, see Using Scripts in Mediation (Script Mediator).

 

  • No labels