Author: hiranya
Date: Mon Aug 23 11:48:29 2010
New Revision: 988090
URL: http://svn.apache.org/viewvc?rev=988090&view=rev
Log:
Completing the JSON sample (sample 440)
Related to SYNAPSE-678
Modified:
synapse/trunk/java/modules/samples/src/main/java/samples/userguide/JSONClient.java
synapse/trunk/java/repository/conf/sample/synapse_sample_440.xml
synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml
synapse/trunk/java/src/site/xdoc/Synapse_Samples_Setup.xml
Modified:
synapse/trunk/java/modules/samples/src/main/java/samples/userguide/JSONClient.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/samples/src/main/java/samples/userguide/JSONClient.java?rev=988090&r1=988089&r2=988090&view=diff
==============================================================================
---
synapse/trunk/java/modules/samples/src/main/java/samples/userguide/JSONClient.java
(original)
+++
synapse/trunk/java/modules/samples/src/main/java/samples/userguide/JSONClient.java
Mon Aug 23 11:48:29 2010
@@ -61,7 +61,7 @@ public class JSONClient {
String trpUrl = getProperty("trpurl", null);
String prxUrl = getProperty("prxurl", null);
String repo = getProperty("repository", "client_repo");
- String symbol = getProperty("symbol", "WSO2");
+ String symbol = getProperty("symbol", "IBM");
if (repo != null && !"null".equals(repo)) {
configContext =
Modified: synapse/trunk/java/repository/conf/sample/synapse_sample_440.xml
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/repository/conf/sample/synapse_sample_440.xml?rev=988090&r1=988089&r2=988090&view=diff
==============================================================================
--- synapse/trunk/java/repository/conf/sample/synapse_sample_440.xml (original)
+++ synapse/trunk/java/repository/conf/sample/synapse_sample_440.xml Mon Aug 23
11:48:29 2010
@@ -28,10 +28,12 @@
<inSequence>
<log level="full"/>
<xslt key="in_transform"/>
+ <property name="messageType" scope="axis2" value="text/xml"/>
</inSequence>
<outSequence>
<log level="full"/>
<xslt key="out_transform"/>
+ <property name="messageType" scope="axis2"
value="application/json"/>
<send/>
</outSequence>
</target>
@@ -43,7 +45,7 @@
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://tools.carbon.wso2.org">
+ <xsl:element name="{local-name()}"
namespace="http://services.samples">
<xsl:copy-of select="attribute::*"/>
<xsl:apply-templates/>
</xsl:element>
Modified: synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml?rev=988090&r1=988089&r2=988090&view=diff
==============================================================================
--- synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml (original)
+++ synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml Mon Aug 23 11:48:29
2010
@@ -299,7 +299,10 @@
<a href="#Callout">Synchronize web service invocation with Callout mediator</a>
<ul>
<li>
-<a href="#Sample430">Sample 430: Simple Callout Mediator for synchronize web
service invocation</a></li></ul></li></ul></li>
+<a href="#Sample430">Sample 430: Simple Callout Mediator for synchronize web
service invocation</a></li>
+<li>
+<a href="#Sample440">Sample 440: Exposing a SOAP service over JSON</a></li>
+</ul></li></ul></li>
<li>
<a href="#Task">Introduction to Eventing</a>
<ul>
@@ -4386,6 +4389,74 @@ Discounted price: 138.77458254967408</pr
<p>In this sample, the callout mediator does the direct service invocation to
the StockQuoteService using the client request, gets the response and sets it
as the first child of the SOAP message body. Then using the send mediator, the
message is sent back to the client. </p>
<p>Invoke the client as follows. </p>
<pre xml:space="preserve">ant stockquote
-Daddurl=http://localhost:9000/services/SimpleStockQuoteService
-Dtrpurl=http://localhost:8280/</pre></div>
+<h2>
+ <a name="Sample440" id="Sample440">Sample 440: Exposing a SOAP Service
Over JSON</a>
+</h2>
+<pre xml:space="preserve"><definitions
xmlns="http://synapse.apache.org/ns/2010/04/configuration">
+
+ <proxy name="JSONProxy" transports="http https">
+ <target>
+ <endpoint>
+ <address
uri="http://localhost:9000/services/SimpleStockQuoteService"/>
+ </endpoint>
+ <inSequence>
+ <log level="full"/>
+ <xslt key="in_transform"/>
+ <property name="messageType" scope="axis2"
value="text/xml"/>
+ </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></pre>
+<div>
+<p>
+<strong>Objective:</strong> Demonstrate the ability to switch between JSON and
XML/SOAP content interchange formats</p>
+<p>
+<strong>Prerequisites:</strong> Deploy the SimpleStockQuoteService in sample
Axis2 server and start it on port 9000.</p>
+<p>Setup Synapse and the sample Axis2 client for JSON (Refer <a
href="Synapse_Samples_Setup.html#json">Synapse Samples Setup Guide</a>
+for details)</p>
+<p>Start Synapse with the sample configuration 440 (i.e. synapse -sample 440).
</p>
+<p>Invoke the JSON client as follows. </p>
+<pre xml:space="preserve">ant jsonclient
-Daddurl=http://localhost:9000/services/SimpleStockQuoteService
-Dtrpurl=http://localhost:8280/services/JSONProxy</pre>
+<p>JSON client will send a stockquote request to Synapse using the JSON
content interchange format. Synapse
+will trnasform it into a SOAP request and forward to the Axis2 server. The
SOAP response from the Axis2 server
+will be converted into a JSON message and sent back to the JSON client.</p>
+<p>You may use a tool like TCPMon to monitor the JSON requests sent over the
wire. A sample JSON request and response
+ is shown below:</p>
+<pre>{"getQuote":{"request":{"symbol":"IBM"}}}</pre>
+<pre>{"getQuoteResponse":{"return":{"change":3.853593376681722,"earnings":12.802850763714854,"high":67.92488310190126,"last":66.14619264746406,"lastTradeTimestamp":"Mon
Aug 23 16:48:40 IST
2010","low":-66.04000424423522,"marketCap":-9334516.42324327,"name":"IBM
Company","open":-64.61950137150009,"peRatio":-19.78600441437058,"percentageChange":5.411779328273005,"prevClose":71.2075112994578,"symbol":"IBM","volume":16842}}}</pre>
+</div>
<h2>
<a name="Sample500" id="Sample500">Sample 500: Simple Eventing Sample</a>
</h2>
Modified: synapse/trunk/java/src/site/xdoc/Synapse_Samples_Setup.xml
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/src/site/xdoc/Synapse_Samples_Setup.xml?rev=988090&r1=988089&r2=988090&view=diff
==============================================================================
--- synapse/trunk/java/src/site/xdoc/Synapse_Samples_Setup.xml (original)
+++ synapse/trunk/java/src/site/xdoc/Synapse_Samples_Setup.xml Mon Aug 23
11:48:29 2010
@@ -781,6 +781,38 @@ synapse.sh -sample <n></pre>
here</a>.
</p>
<p/>
+ <h2 id="json">
+ Configuring Synapse for JSON Support
+ </h2>
+ <p/>
+ <p>
+ <a href="http://json.org">JSON</a> is a lightweight data-interchange
format.
+ It can be used as an alternative to the XML or SOAP. To enable the JSON
support
+ in Synapse, following two jar files should be deployed into the 'lib'
directory
+ of Synapse.
+ </p>
+ <ul>
+ <li><a
href="http://repo1.maven.org/maven2/org/apache/axis2/axis2-saaj">axis2-saaj.jar</a></li>
+ <li><a
href="http://jettison.codehaus.org/Download">jettison.jar</a></li>
+ </ul>
+ <p>
+ Having deployed the necessary libraries you should now register the JSON
message
+ builder and formatter with Synapse. Open up 'repository/conf/axis2.xml'
file
+ of Synapse and add the following two entries under the 'messageBuilders'
and
+ 'messageFormatters' sections respectively.
+ </p>
+ <pre>
+ <messageBuilder contentType="application/json"
+ class="org.apache.axis2.json.JSONOMBuilder"/>
+
+ <messageFormatter contentType="application/json"
+
class="org.apache.axis2.json.JSONMessageFormatter"/>
+ </pre>
+ <p>
+ If you are planning to run sample 440, you should also add the above two
entries
+ to the 'samples/axis2Client/client_repo/conf/axis2.xml' file.
+ </p>
+ <p/>
<h2 id="derby">
Setting up Derby database server
</h2>