| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <html> |
| <head> |
| <title>Apache Wink : 7.1 JSON</title> |
| <link rel="stylesheet" href="styles/site.css" type="text/css" /> |
| <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
| </head> |
| |
| <body> |
| <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff"> |
| <tr> |
| <td valign="top" class="pagebody"> |
| <div class="pageheader"> |
| <span class="pagetitle"> |
| Apache Wink : 7.1 JSON |
| </span> |
| </div> |
| <div class="pagesubheading"> |
| This page last changed on Oct 13, 2009 by <font color="#0050B2">michael</font>. |
| </div> |
| |
| <h3><a name="7.1JSON-JSONProviders"></a>JSON Providers</h3> |
| |
| <p>Apache Wink provides a set providers that are capable of serializing a number of data models into JSON representations. There are currently 3 Apache Wink extensions that provide JSON support. Each has unique features that may make one more suitable for your particular application.</p> |
| |
| <h3><a name="7.1JSON-winkjsonprovider%28org.json%29"></a>wink-json-provider (org.json)</h3> |
| |
| <p>The wink-json-provider extension is provided in the binary distribution and uses the <a href="http://json.org">JSON.org</a> classes to provide JSON support. Include the wink-json-provider-<VERSION>.jar in the classpath and the providers will automatically be registered. You will also need the org.json JAR which is provided in the ext/wink-json-provider/lib folder.</p> |
| |
| <h5><a name="7.1JSON-org.apache.wink.providers.json.JsonProvider"></a>org.apache.wink.providers.json.JsonProvider</h5> |
| |
| <p>Handles reading and writing of org.json.JSONObject classes for the application/json and application/javascript media types.</p> |
| |
| |
| <table class='confluenceTable'><tbody> |
| <tr> |
| <th class='confluenceTh'> </th> |
| <th class='confluenceTh'> Supported </th> |
| <th class='confluenceTh'> Media Types <br clear="all" /> </th> |
| <th class='confluenceTh'> Entity <br clear="all" /> </th> |
| </tr> |
| <tr> |
| <td class='confluenceTd'> Read <br clear="all" /> </td> |
| <td class='confluenceTd'> Yes <br clear="all" /> </td> |
| <td class='confluenceTd'> application/json , application/javascript <br clear="all" /> </td> |
| <td class='confluenceTd'> org.json.JSONObject </td> |
| </tr> |
| <tr> |
| <td class='confluenceTd'> Write <br clear="all" /> </td> |
| <td class='confluenceTd'> Yes </td> |
| <td class='confluenceTd'> application/json , application/javascript <br clear="all" /> </td> |
| <td class='confluenceTd'> org.json.JSONObject </td> |
| </tr> |
| </tbody></table> |
| |
| |
| <h5><a name="7.1JSON-org.apache.wink.providers.json.JsonArrayProvider"></a>org.apache.wink.providers.json.JsonArrayProvider</h5> |
| |
| <p>Handles reading and writing of org.json.JSONArray classes for the application/json and application/javascript media types.</p> |
| |
| <table class='confluenceTable'><tbody> |
| <tr> |
| <th class='confluenceTh'> </th> |
| <th class='confluenceTh'> Supported </th> |
| <th class='confluenceTh'> Media Types <br clear="all" /> </th> |
| <th class='confluenceTh'> Entity <br clear="all" /> </th> |
| </tr> |
| <tr> |
| <td class='confluenceTd'> Read <br clear="all" /> </td> |
| <td class='confluenceTd'> Yes <br clear="all" /> </td> |
| <td class='confluenceTd'> application/json , application/javascript <br clear="all" /> </td> |
| <td class='confluenceTd'> org.json.JSONArray </td> |
| </tr> |
| <tr> |
| <td class='confluenceTd'> Write <br clear="all" /> </td> |
| <td class='confluenceTd'> Yes </td> |
| <td class='confluenceTd'> application/json , application/javascript <br clear="all" /> </td> |
| <td class='confluenceTd'> org.json.JSONArray </td> |
| </tr> |
| </tbody></table> |
| |
| |
| <h5><a name="7.1JSON-org.apache.wink.providers.json.JsonJAXBProvider"></a>org.apache.wink.providers.json.JsonJAXBProvider</h5> |
| |
| <p>Handles reading and writing of JAXBElement and JAXB annotated classes for the application/json and application/javascript media types.</p> |
| |
| |
| <table class='confluenceTable'><tbody> |
| <tr> |
| <th class='confluenceTh'> </th> |
| <th class='confluenceTh'> Supported </th> |
| <th class='confluenceTh'> Media Types <br clear="all" /> </th> |
| <th class='confluenceTh'> Entity <br clear="all" /> </th> |
| </tr> |
| <tr> |
| <td class='confluenceTd'> Read <br clear="all" /> </td> |
| <td class='confluenceTd'> Yes <br clear="all" /> </td> |
| <td class='confluenceTd'> application/json , application/javascript <br clear="all" /> </td> |
| <td class='confluenceTd'> JAXB object, <br clear="all" /> |
| JAXBElement<?>>> </td> |
| </tr> |
| <tr> |
| <td class='confluenceTd'> Write <br clear="all" /> </td> |
| <td class='confluenceTd'> Yes </td> |
| <td class='confluenceTd'> application/json , application/javascript <br clear="all" /> </td> |
| <td class='confluenceTd'> JAXB object, <br clear="all" /> |
| JAXBElement<?>>> </td> |
| </tr> |
| </tbody></table> |
| |
| |
| |
| <h3><a name="7.1JSON-ProducingandConsumingJSONExample"></a>Producing and Consuming JSON Example</h3> |
| |
| <p>The following example demonstrates the usage of a JSON provider for reading and writing JSON representations.</p> |
| |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <pre class="code-java">
|
| @GET
|
| @Consumes(MediaType.APPLICATION_JSON)
|
| @Produces(MediaType.APPLICATION_JSON)
|
| <span class="code-keyword">public</span> JSONObject postJSON(JSONObject requestJSON) {
|
| <span class="code-object">String</span> property = requestJSON.getString(<span class="code-quote">"property"</span>);
|
| JSONObject jobj = <span class="code-keyword">new</span> JSONObject();
|
| <span class="code-keyword">return</span> jobj;
|
| }
|
|
|
| /* Book is a JAXB annotated class */
|
|
|
| @GET
|
| @Consumes(MediaType.APPLICATION_JSON)
|
| @Produces(MediaType.APPLICATION_JSON)
|
| <span class="code-keyword">public</span> Book postJSONBook(Book requestBookEntity) {
|
| <span class="code-object">String</span> title = requestBookEntity.getTitle();
|
| /* other code */
|
| Book response = <span class="code-keyword">new</span> Book();
|
| <span class="code-keyword">return</span> response;
|
| }
|
| </pre> |
| </div></div> |
| |
| <h3><a name="7.1JSON-winkjettisonprovider%28org.codehaus.jettison%29"></a>wink-jettison-provider (org.codehaus.jettison)</h3> |
| |
| <p>The wink-jettison-provider extension is provided in the binary distribution and uses the <a href="http://jettison.codehaus.org/">Jettison</a> code to provide JSON support. Include the wink-jettison-provider-<VERSION>.jar in the classpath and the providers will automatically be registered. You will also need the Jettison library JARs which are provided in the ext/wink-jettison-provider/lib folder.</p> |
| |
| <p>By default, reading is currently disabled due to potential issues with the reader. You can enable it by calling setUseAsReader(boolean) on each provider and registering as a singleton in the JAX-RS Application sub-class.</p> |
| |
| <h5><a name="7.1JSON-rg.apache.wink.providers.jettison.JettisonJAX..."></a>org.apache.wink.providers.jettison.JettisonJAXBElementProvider</h5> |
| |
| <p>Handles reading and writing of JAXBElement classes for the application/json media type.</p> |
| |
| <table class='confluenceTable'><tbody> |
| <tr> |
| <th class='confluenceTh'> </th> |
| <th class='confluenceTh'> Supported </th> |
| <th class='confluenceTh'> Media Types <br clear="all" /> </th> |
| <th class='confluenceTh'> Entity <br clear="all" /> </th> |
| </tr> |
| <tr> |
| <td class='confluenceTd'> Read <br clear="all" /> </td> |
| <td class='confluenceTd'> Yes <br clear="all" /> </td> |
| <td class='confluenceTd'> application/json <br clear="all" /> </td> |
| <td class='confluenceTd'> JAXBElement<?>>> </td> |
| </tr> |
| <tr> |
| <td class='confluenceTd'> Write <br clear="all" /> </td> |
| <td class='confluenceTd'> Yes </td> |
| <td class='confluenceTd'> application/json <br clear="all" /> </td> |
| <td class='confluenceTd'> JAXBElement<?>>> </td> |
| </tr> |
| </tbody></table> |
| |
| |
| <h5><a name="7.1JSON-rg.apache.wink.providers.jettison.JettisonJAX..."></a>org.apache.wink.providers.jettison.JettisonJAXBElementProvider</h5> |
| |
| <p>Handles reading and writing of JAXB annotated classes for the application/json media type.</p> |
| |
| <table class='confluenceTable'><tbody> |
| <tr> |
| <th class='confluenceTh'> </th> |
| <th class='confluenceTh'> Supported </th> |
| <th class='confluenceTh'> Media Types <br clear="all" /> </th> |
| <th class='confluenceTh'> Entity <br clear="all" /> </th> |
| </tr> |
| <tr> |
| <td class='confluenceTd'> Read <br clear="all" /> </td> |
| <td class='confluenceTd'> Yes <br clear="all" /> </td> |
| <td class='confluenceTd'> application/json <br clear="all" /> </td> |
| <td class='confluenceTd'> JAXB object </td> |
| </tr> |
| <tr> |
| <td class='confluenceTd'> Write <br clear="all" /> </td> |
| <td class='confluenceTd'> Yes </td> |
| <td class='confluenceTd'> application/json <br clear="all" /> </td> |
| <td class='confluenceTd'> JAXB object </td> |
| </tr> |
| </tbody></table> |
| |
| |
| <h3><a name="7.1JSON-Example"></a>Example</h3> |
| |
| <p>The following examples demonstrates the usage of a Jettison provider for producing and consuming JSON.</p> |
| |
| |
| <h4><a name="7.1JSON-JettisonProviderRegistration"></a>Jettison Provider Registration</h4> |
| |
| |
| <p>The following code example demonstrates the way to register a Jettison provider within a JAX-RS application.</p> |
| |
| |
| |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <pre class="code-java">
|
| <span class="code-keyword">public</span> class MyApp <span class="code-keyword">extends</span> Application {
|
| <span class="code-keyword">public</span> Set getClasses() {
|
| Set s = <span class="code-keyword">new</span> HashSet();
|
| s.add(MyResource.class);
|
| <span class="code-keyword">return</span> s;
|
| }
|
|
|
| <span class="code-keyword">public</span> Set<<span class="code-object">Object</span>> getSingletons() {
|
| Set s = <span class="code-keyword">new</span> HashSet();
|
| JettisonJAXBProvider jaxbProvider = <span class="code-keyword">new</span> JettisonJAXBProvider();
|
| jaxbProvider.setUseAsReader(<span class="code-keyword">true</span>);
|
| <span class="code-keyword">return</span> s;
|
| }
|
| }
|
| </pre> |
| </div></div> |
| |
| <h4><a name="7.1JSON-ProducingandConsumingJSON"></a>Producing and Consuming JSON</h4> |
| |
| <p>The following code example demonstrates the reading and writting of JAXB objects into a JSON representation by using a Jettison provider.</p> |
| |
| |
| |
| <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"> |
| <pre class="code-java">
|
| /* Book is a JAXB annotated class */
|
|
|
| @GET
|
| @Consumes(MediaType.APPLICATION_JSON)
|
| @Produces(MediaType.APPLICATION_JSON)
|
| <span class="code-keyword">public</span> Book postJSONBook(Book requestBookEntity) {
|
| <span class="code-object">String</span> title = requestBookEntity.getTitle();
|
| /* other code */
|
| Book response = <span class="code-keyword">new</span> Book();
|
| <span class="code-keyword">return</span> response;
|
| }
|
| </pre> |
| </div></div> |
| |
| <h4><a name="7.1JSON-JacksonJSONProcessor"></a>Jackson JSON Processor</h4> |
| |
| <p><a href="http://jackson.codehaus.org/">Jackson JSON Processor</a> may also suit your needs and can be used. They provide their own JAX-RS entity provider. See their documentation for more information.</p> |
| |
| |
| </td> |
| </tr> |
| </table> |
| <table border="0" cellpadding="0" cellspacing="0" width="100%"> |
| <tr> |
| <td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td> |
| </tr> |
| <tr> |
| <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td> |
| </tr> |
| </table> |
| </body> |
| </html> |