This site contains the documentation that is relevant to older WSO2 product versions and offerings.
For the latest WSO2 documentation, visit https://wso2.com/documentation/.

Sample 441: Exposing a SOAP Service Over JSON

Objective: Demonstrate the ability to switch between JSON and XML/SOAP content interchange formats by using JSONStreamBuilder and JSONStreamFormatter message builder/formatter pair for JSON.

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>

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

2. Modify the message builder and the message formatter for application/json content type in the /repository/conf/axis2/axis2.xml file.

  • To change the message builder,
    Locate the messageBuilders  section and disable the existing message builder for application/json and enable org.apache.axis2.json.JSONStreamBuilder message builder
  • To change the message formatter,
    Locate the messageFormatters  section and disable the existing message formatter for application/json and enable org.apache.axis2.json.JSONStreamFormatter message formatter

3. Replace the configuration of Sample 441 (found in ESB_HOME/repository/samples/synapse_sample_441.xml) with the configuration shown above.

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

Invoke the proxy service as follows

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

If the invocation was successful, you must see a reply similar to the following

Response
< HTTP/1.1 200 OK
< Content-Type: application/json
< Date: Wed, 07 Aug 2013 06:34:47 GMT
< Server: WSO2-PassThrough-HTTP
< Transfer-Encoding: chunked
< 
* Connection #0 to host localhost left intact
* Closing connection #0
{"Quote" : {"Current" : {"High" : -61.53602401623976, "Last" : 62.32682938796667}, "Code" : "WSO2", "Price" : 62.32682938796667}, "Status" : "NOT-OK"}

 

 

Â