JSON Providers

Apache Wink provides a set of providers that are capable of serializing a number of data models into JSON representations. There are currently three Apache Wink extensions that provide JSON support. Each has unique features that may make one more suitable for your particular application.

wink-json-provider (org.json)

The wink-json-provider extension is provided in the binary distribution and uses the JSON.org 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.

org.apache.wink.providers.json.JsonProvider

Handles reading and writing of org.json.JSONObject classes for the application/json and application/javascript media types.

 

Supported

Media Types

Entity

Read

Yes

application/json , application/javascript

org.json.JSONObject

Write

Yes

application/json , application/javascript

org.json.JSONObject

org.apache.wink.providers.json.JsonArrayProvider

Handles reading and writing of org.json.JSONArray classes for the application/json and application/javascript media types.

 

Supported

Media Types

Entity

Read

Yes

application/json , application/javascript

org.json.JSONArray

Write

Yes

application/json , application/javascript

org.json.JSONArray

org.apache.wink.providers.json.JsonJAXBProvider

Handles reading and writing of JAXBElement and JAXB annotated classes for the application/json and application/javascript media types.

 

Supported

Media Types

Entity

Read

Yes

application/json , application/javascript

JAXB object,
JAXBElement<?>>>

Write

Yes

application/json , application/javascript

JAXB object,
JAXBElement<?>>>

Producing and Consuming JSON Example

The following example demonstrates the usage of a JSON provider for reading and writing JSON representations.

    @GET
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public JSONObject postJSON(JSONObject requestJSON) {
        String property = requestJSON.getString("property");
        JSONObject jobj = new JSONObject();
        return jobj;
    }

    /* Book is a JAXB annotated class */

    @GET
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Book postJSONBook(Book requestBookEntity) {
        String title = requestBookEntity.getTitle();
        /* other code */
        Book response = new Book();
        return response;
    }

wink-jettison-provider (org.codehaus.jettison)

The wink-jettison-provider extension is provided in the binary distribution and uses the Jettison 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.

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.

org.apache.wink.providers.jettison.JettisonJAXBElementProvider

Handles reading and writing of JAXBElement classes for the application/json media type.

 

Supported

Media Types

Entity

Read

Yes

application/json

JAXBElement<?>>>

Write

Yes

application/json

JAXBElement<?>>>

org.apache.wink.providers.jettison.JettisonJAXBElementProvider

Handles reading and writing of JAXB annotated classes for the application/json media type.

 

Supported

Media Types

Entity

Read

Yes

application/json

JAXB object

Write

Yes

application/json

JAXB object

Example

The following examples demonstrates the usage of a Jettison provider for producing and consuming JSON.

Jettison Provider Registration

The following code example demonstrates the way to register a Jettison provider within a JAX-RS application.

    public class MyApp extends Application {
        public Set getClasses() {
            Set s = new HashSet();
            s.add(MyResource.class);
            return s;
        }

        public Set<Object> getSingletons() {
            Set s = new HashSet();
            JettisonJAXBProvider jaxbProvider = new JettisonJAXBProvider();
            jaxbProvider.setUseAsReader(true);
            return s;
        }
    }

Producing and Consuming JSON

The following code example demonstrates the reading and writting of JAXB objects into a JSON representation by using a Jettison provider.

    /* Book is a JAXB annotated class */

    @GET
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Book postJSONBook(Book requestBookEntity) {
        String title = requestBookEntity.getTitle();
        /* other code */
        Book response = new Book();
        return response;
    }

Jackson JSON Processor

Jackson JSON Processor may also suit your needs and can be used. They provide their own JAX-RS entity provider. See their documentation for more information.

  • No labels