<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Generated by Apache Maven Doxia at Apr 17, 2012 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Apache Axis2 - 


</title>
    <style type="text/css" media="all">
      @import url("../css/maven-base.css");
      @import url("../css/maven-theme.css");
      @import url("../css/site.css");
    </style>
    <link rel="stylesheet" href="../css/print.css" type="text/css" media="print" />
    <meta name="Date-Revision-yyyymmdd" content="20120417" />
    <meta http-equiv="Content-Language" content="en" />
        <meta name="generator" content="HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" /><meta http-equiv="content-type" content="text/html; charset=us-ascii" /><meta name="AUTHOR" content="Isuru Suriarachchi" /><meta name="CREATED" content="20070203;331600" /><meta name="CHANGEDBY" content="Isuru Suriarachchi" /><meta name="CHANGED" content="20070208;12031400" /><style type="text/css"></style>
  </head>
  <body class="composite">
    <div id="banner">
                  <a href="http://www.apache.org/" id="bannerLeft">
                                        <img src="http://www.apache.org/images/asf_logo_wide.png" alt="Apache Axis2" />
                </a>
                        <a href="" id="bannerRight">
                                                <img src="../images/axis.jpg" alt="Apache Axis2" />
                </a>
            <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="breadcrumbs">
            
        
                <div class="xleft">
        <span id="publishDate">Last Published: 2012-04-17</span>
                  &nbsp;| <span id="projectVersion">Version: 1.6.2</span>
                      </div>
            <div class="xright">                    <a href="../index.html" title="Axis2/Java">Axis2/Java</a>
            |
                        <a href="http://www.apache.org" class="externalLink" title="Apache">Apache</a>
              
        
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="leftColumn">
      <div id="navcolumn">
             
        
                                <h5>Axis2/Java</h5>
                  <ul>
                  <li class="none">
                          <a href="../index.html" title="Home">Home</a>
            </li>
          </ul>
                       <h5>Downloads</h5>
                  <ul>
                  <li class="none">
                          <a href="../download.cgi" title="Releases">Releases</a>
            </li>
                  <li class="none">
                          <a href="../modules/index.html" title="Modules">Modules</a>
            </li>
                  <li class="none">
                          <a href="../tools/index.html" title="Tools">Tools</a>
            </li>
          </ul>
                       <h5>Documentation</h5>
                  <ul>
                  <li class="none">
                          <a href="../docs/toc.html" title="Table of Contents">Table of Contents</a>
            </li>
                  <li class="none">
                          <a href="../docs/installationguide.html" title="Installation Guide">Installation Guide</a>
            </li>
                  <li class="none">
                          <a href="../docs/quickstartguide.html" title="QuickStart Guide">QuickStart Guide</a>
            </li>
                  <li class="none">
                          <a href="../docs/userguide.html" title="User Guide">User Guide</a>
            </li>
                  <li class="none">
                          <a href="../docs/jaxws-guide.html" title="JAXWS Guide">JAXWS Guide</a>
            </li>
                  <li class="none">
                          <a href="../docs/pojoguide.html" title="POJO Guide">POJO Guide</a>
            </li>
                  <li class="none">
                          <a href="../docs/spring.html" title="Spring Guide">Spring Guide</a>
            </li>
                  <li class="none">
                          <a href="../docs/webadminguide.html" title="Web Administrator's Guide">Web Administrator's Guide</a>
            </li>
                  <li class="none">
                          <a href="../docs/migration.html" title="Migration Guide (from Axis1)">Migration Guide (from Axis1)</a>
            </li>
          </ul>
                       <h5>Resources</h5>
                  <ul>
                  <li class="none">
                          <a href="../faq.html" title="FAQ">FAQ</a>
            </li>
                  <li class="none">
                          <a href="../articles.html" title="Articles">Articles</a>
            </li>
                  <li class="none">
                          <a href="http://wiki.apache.org/ws/FrontPage/Axis2/" class="externalLink" title="Wiki">Wiki</a>
            </li>
                  <li class="none">
                          <a href="../refLib.html" title="Reference Library">Reference Library</a>
            </li>
                  <li class="none">
                          <a href="../api/index.html" title="Online Java Docs">Online Java Docs</a>
            </li>
          </ul>
                       <h5>Get Involved</h5>
                  <ul>
                  <li class="none">
                          <a href="../overview.html" title="Overview">Overview</a>
            </li>
                  <li class="none">
                          <a href="../svn.html" title="Checkout the Source">Checkout the Source</a>
            </li>
                  <li class="none">
                          <a href="../mail-lists.html" title="Mailing Lists">Mailing Lists</a>
            </li>
                  <li class="none">
                          <a href="../release-process.html" title="Release Process">Release Process</a>
            </li>
                  <li class="none">
                          <a href="../guidelines.html" title="Developer Guidelines">Developer Guidelines</a>
            </li>
                  <li class="none">
                          <a href="../siteHowTo.html" title="Build the Site">Build the Site</a>
            </li>
          </ul>
                       <h5>Project Information</h5>
                  <ul>
                  <li class="none">
                          <a href="../team-list.html" title="Project Team">Project Team</a>
            </li>
                  <li class="none">
                          <a href="../issue-tracking.html" title="Issue Tracking">Issue Tracking</a>
            </li>
                  <li class="none">
                          <a href="http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/" class="externalLink" title="Source Code">Source Code</a>
            </li>
                  <li class="none">
                          <a href="../thanks.html" title="Acknowledgements">Acknowledgements</a>
            </li>
                  <li class="none">
                          <a href="http://www.apache.org/licenses/LICENSE-2.0.html" class="externalLink" title="License">License</a>
            </li>
                  <li class="none">
                          <a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsorship">Sponsorship</a>
            </li>
                  <li class="none">
                          <a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks">Thanks</a>
            </li>
                  <li class="none">
                          <a href="http://www.apache.org/security/" class="externalLink" title="Security">Security</a>
            </li>
          </ul>
                             <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
        <img class="poweredBy" alt="Built by Maven" src="../images/logos/maven-feather.png" />
      </a>
                   
        
            </div>
    </div>
    <div id="bodyColumn">
      <div id="contentBox">
        <!-- ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements. See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership. The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License. You may obtain a copy of the License at
  ~
  ~ http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied. See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License. --><html xmlns="http://www.w3.org/1999/xhtml">

<h1 class="title">JSON Support in Axis2</h1>
<p>This document explains the JSON support implementation in Axis2.
It includes an introduction to JSON, an outline as to why JSON
support is useful to Axis2 and how it should be used. This document
also provides details on test cases and samples.</p>
<div class="section"><h3>What is JSON?<a name="What_is_JSON"></a></h3>
<p><a class="externalLink" href="http://www.json.org/">JSON</a> (Java Script Object
Notation) is another data exchangeable format like XML, but more
lightweight and easily readable. It is based on a subset of the
JavaScript language. Therefore, JavaScript can understand JSON, and
it can make JavaScript objects by using JSON strings. JSON is based
on key-value pairs and it uses colons to separate keys and values.
JSON doesn't use end tags, and it uses braces (curly brackets) to
enclose JSON Objects.</p>
<p><font size="3">e.g. <font size="2">&lt;root&gt;&lt;test&gt;json
object&lt;/test&gt;&lt;/root&gt; ==
{{json object}}</font></font></p>
<p>When it comes to converting XML to JSON and vice versa, there
are two major conventions, one named &quot;<a class="externalLink" href="http://www.sklar.com/badgerfish/">Badgerfish</a>&quot; and the other,
Mapped. The main difference
between these two conventions exists in the way they map XML
namespaces into JSON.</p>
<p><font size="3">e.g. <font size="2">&lt;xsl:root
xmlns:xsl=&quot;http://foo.com&quot;&gt;&lt;data&gt;my json
string&lt;/data&gt;&lt;/xsl:root&gt;</font></font></p>
<p>This XML string can be converted into JSON as follows.</p>
<p><b>Using Badgerfish</b></p>
<p><font size="2">{&quot;xsl:root&quot;:{&quot;@xmlns&quot;:{&quot;xsl&quot;:&quot;http://foo.com&quot;},&quot;data&quot;:{&quot;$&quot;:&quot;my
json string&quot;}}}</font></p>
<p><b>Using Mapped</b></p>
<p>If we use the namespace mapping as http://foo.com -&gt; foo</p>
<p><font size="2">{&quot;foo.root&quot;:{&quot;data&quot;:&quot;my json string&quot;}}</font></p>
<p>JSON support is a new feature in <a href="../index.html">Apache Axis2/Java</a>. It will become
a crucial improvement in the future with applications like
JavaScript Web services.</p>
</div><div class="section"><h2>Why JSON Support for Axis2?<a name="Why_JSON_Support_for_Axis2"></a></h2>
<p><a href="../index.html">Apache Axis2</a> is a Web
services stack that delivers incoming messages into target
applications. In most cases, these messages are SOAP messages. In
addition, it is also possible to send REST messages through Axis2.
Both types of messages use XML as their data exchangeable format.
So if we can use XML as a format, why use JSON as another
format?</p>
<p>There are many advantages of implementing JSON support in Axis2.
Mainly, it helps the JavaScript users (services and clients written
in JavaScript) to deal with Axis2. When the service or the client
is in JavaScript, it can use the JSON string and directly build
JavaScript objects to retrieve information, without having to build
the object model (OMElement in Axis2). Also, JavaScript services
can return the response through Axis2, just as a JSON string can be
shipped in a JSONDataSource.</p>
<p>Other than for that, there are some extra advantages of using
JSON in comparison to XML. Although the conversation
XML or JSON? is still a hot topic,
many people accept the fact that JSON can be passed and built more
easily by machines than XML.</p>
<p>For more details of this implementation architecture, refer to
the article <a class="externalLink" href="http://wso2.org/library/768">&quot;JSON Support for
Apache Axis2&quot;</a></p>
<div class="section"><h2>How to use JSON in Axis2<a name="How_to_use_JSON_in_Axis2"></a></h2>
<p>At the moment JSON doesn't have a standard and unique content
type. application/json (this is
the content type which is approved in the <a class="externalLink" href="http://www.ietf.org/rfc/rfc4627.txt?number=4627">JSON RFC</a> ),
text/javascript and
text/json are some of the commonly
used content types of JSON. Due to this problem, in Axis2, the user
has been given the freedom of selecting the content type.</p>
<div class="section"><h3>Step 1<a name="Step_1"></a></h3>
<p>Map the appropriate MessageFormatter and OMBuilder with the
content type you are using in the axis2.xml file.</p>
<p>e.g.1: If you are using the
Mapped convention with the content
type application/json</p>
<div><pre>
        &lt;messageFormatters&gt;        
                &lt;messageFormatter contentType=&quot;application/json&quot;
                                 class=&quot;org.apache.axis2.json.JSONMessageFormatter&quot;/&gt;
                &lt;!-- more message formatters --&gt;
        &lt;/messageFormatters&gt;   
    
        &lt;messageBuilders&gt;
                &lt;messageBuilder contentType=&quot;application/json&quot;
                                 class=&quot;org.apache.axis2.json.JSONOMBuilder&quot;/&gt;
                &lt;!-- more message builders --&gt;
        &lt;/messageBuilders&gt;
</pre></div>
<p>e.g.2: If you are using the
Badgerfish convention with the
content type text/javascript</p>
<div><pre>
        &lt;messageFormatters&gt;        
                &lt;messageFormatter contentType=&quot;text/javascript&quot;
                                 class=&quot;org.apache.axis2.json.JSONBadgerfishMessageFormatter&quot;/&gt;
                &lt;!-- more message formatters --&gt;
        &lt;/messageFormatters&gt; 

        &lt;messageBuilders&gt;
                &lt;messageBuilder contentType=&quot;text/javascript&quot;
                                 class=&quot;org.apache.axis2.json.JSONBadgerfishOMBuilder&quot;/&gt;
                &lt;!-- more message builders --&gt;
        &lt;/messageBuilders&gt;
</pre></div>
</div><div class="section"><h3>Step 2<a name="Step_2"></a></h3>
<p>On the client side, make the ConfigurationContext by reading the
axis2.xml in which the correct mappings are given.</p>
<p>e.g.</p>
<div><pre>
        File configFile = new File(&quot;test-resources/axis2.xml&quot;);
        configurationContext = ConfigurationContextFactory
                        .createConfigurationContextFromFileSystem(null, configFile.getAbsolutePath());
        ..........        
        ServiceClient sender = new ServiceClient(configurationContext, null);
</pre></div>
</div><div class="section"><h3>Step 3<a name="Step_3"></a></h3>
<p>Set the <i>MESSAGE_TYPE</i> option with exactly the same content
type you used in the axis2.xml.</p>
<p>e.g. If you use the content type
application/json,</p>
<div><pre>
        Options options = new Options();        
        options.setProperty(Constants.Configuration.MESSAGE_TYPE, application/json);
        //more options
        //...................        

        ServiceClient sender = new ServiceClient(configurationContext, null);        
        sender.setOptions(options);
</pre></div>
<p>If you are sending a request to a remote service, you have to
know the exact JSON content type that is used by that service, and
you have to use that content type in your client as well.</p>
<p>HTTP POST is used as the default method to send JSON messages
through Axis2, if the HTTP method is not explicitly set by the
user. But if you want to send JSON in HTTP GET method as a
parameter, you can do that by just setting an option on the client
side.</p>
<p>e.g.
<tt>options.setProperty(Constants.Configuration.HTTP_METHOD,
Constants.Configuration.HTTP_METHOD_GET);</tt></p>
<p>Here, the Axis2 receiving side (JSONOMBuilder) builds the
OMElement by reading the JSON string which is sent as a parameter.
The request can be made even through the browser.</p>
<p>e.g. Sample JSON request through HTTP GET. The JSON message is
encoded and sent.</p>
<p><tt>GET
/axis2/services/EchoXMLService/echoOM?query=%7B%22echoOM%22:%7B%22data%22:%5B%22my%20json%20string%22,%22my%20second%20json%20string%22%5D%7D%7D
HTTP/1.1</tt></p>
</div><div class="section"><h2>Tests and Samples<a name="Tests_and_Samples"></a></h2>
<div class="section"><h3>Integration Test<a name="Integration_Test"></a></h3>
<p>The JSON integration test is available under
test in the
json module of Axis2. It uses the
SimpleHTTPServer to deploy the service. A simple echo service is
used to return the incoming OMSourcedElementImpl object, which
contains the JSONDataSource. There are two test cases for two
different conventions and another one test case to send the request
in GET.</p>
</div><div class="section"><h3>Yahoo-JSON Sample<a name="Yahoo-JSON_Sample"></a></h3>
<p>This sample is available in the
samples module of Axis2. It is a
client which calls the Yahoo search API using the GET method, with
the parameter output=json. The
Yahoo search service sends the response as a
formatted JSON string with
the content type text/javascript.
This content type is mapped with the JSONOMBuilder in the
axis2.xml. All the results are shown in a GUI. To run the sample,
execute the ant script.</p>
<p>These two applications provide good examples of using JSON
within Axis2. By reviewing these samples, you will be able to
better understand Axis2's JSON support implementation.</p>
</div>
</html>
      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">Copyright &#169;                    2004-2012
                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
            All Rights Reserved.      
        
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
  </body>
</html>
