Configure JSON-P in Liberty

We can configure our Liberty environment to use JSON-P by enabling the default jsonp-1.0 feature or by implementing the jsonpContainer-1.0 feature.

In version 21.0.0.1 and later, for information about using JSON-P with Liberty, see the Open Liberty website.

JSON Processing (JSON-P) 1.1 for WebSphere Application Server Liberty is built on the JSON-P reference implementation.

Glassfish JSON is the reference implementation of the JSON-P 1.1 specification, and is the JSON-P implementation that Liberty provides by default when the jsonp-1.1 feature is enabled. It is possible to configure an alternative implementation of JSON-P through the jsonpContainer-1.1 feature.

  • Select the correct JSON-P feature in Liberty. The following features that are offered for JSON-P 1.1 integration with Liberty:

    • jsonp-1.1
    • jsonpContainer-1.0

    The default JSON-P feature is jsonp-1.1, which provides generic JSON-P support and can use any specification-compliant implementation. This feature provides the JSON-P API to applications and features that depend on it. Unless specified otherwise by other features, this feature uses the Glassfish JSON reference implementation included in Liberty.

    The jsonpContainer-1.1 feature provides the JSON-P API and provides JSON-P support using a user supplied JSON-P implementation configured as a BELL (Basic Extension using Liberty Libraries). The <bell> server configuration element is used to configure this implementation as a BELL.

    For example, Apache Johnzon is another JSON-P compliant implementation. In this example, a server is configured to use Johnzon instead of Glassfish:

  • Write features that depend on JSON-P.

    When you write a feature that depends on JSON-P, special design considerations must be made: Instead of obtaining a javax.json.spi.JsonProvider instance using standard mechanisms, such as JsonProvider.provider(), features declare OSGi service dependencies on JsonpProvider, and use these injected services when building objects. The following code is an example:

      @Component( ... )  
      public class ServiceThatRequiresJsonp { 
        @Reference
        private JsonProvider jsonpProvider;
      
        public void doSomethingWithJsonp() {     JsonObject o = jsonpProvider.createObjectBuilder().build();
          // ...
        }
      }