Links: Table of Contents | Single HTML

Chapter 2. Modules and dependencies

2.1. Java SE Compatibility

2.x branch:

  • Until version 2.6, Jersey was compiled with Java SE 6. This has changed in Jersey 2.7.

  • Up to version 2.25.x almost all Jersey components are compiled with Java SE 7 target. It means, that you will need at least Java SE 7 to be able to compile and run your application that is using latest Jersey. Only core-common and core-client modules are still compiled with Java class version runnable with Java SE 6.

  • Since Jersey 2.26, all modules are build using Java SE 8 and there is no support for running it on older Java SE distributions.

  • Since Jersey 2.29, all modules can be built using Java SE 11 and all distributed modules provide support for Java SE 8 and 11.

  • Since Jersey 2.30, Jersey adds support for JDK 12 and 13. Since Jersey 2.31, Jersey adds support for JDK 14 and 15. Since Jersey 2.33, Jersey adds support for JDK 16. Since Jersey 2.35, Jersey adds support for JDK 17. Since Jersey 2.36 Jersey adds support for JDK 18 and 19. Since Jersey 2.38, Jersey adds support for JDK 20. Since Jersey 2.40, Jersey supports JDK 21. Since Jersey 2.41, Jersey supports JDK 22.

2.1.1. Virtual Threads and Thread Factories

With JDK 21 and above, Jersey (since 2.44) has the ability to use virtual threads instead of the CachedThreadPool in the internal ExecutorServices. Jersey also has the ability to specify the backing ThreadFactory for the default ExecutorServices (the default ExecutorServices can be overridden by the ExecutorServiceProvider SPI).

To enable virtual threads and/or specify the ThreadFactory, use CommonProperties.USE_VIRTUAL_THREADS and/or CommonProperties.THREAD_FACTORY properties, respectively. See also the Section A.1, “Common (client/server) configuration properties” in appendix for property details.

2.2. Introduction to Jersey dependencies

Jersey is built, assembled and installed using Apache Maven. Non-snapshot Jersey releases are deployed to the Central Maven Repository. Jersey is also being deployed to Sonatype Maven repositories, which contain also Jersey SNAPSHOT versions. In case you would want to test the latest development builds check out the Sonatype Snapshots Maven repository.

An application that uses Jersey and depends on Jersey modules is in turn required to also include in the application dependencies the set of 3rd party modules that Jersey modules depend on. Jersey is designed as a pluggable component architecture and different applications can therefore require different sets of Jersey modules. This also means that the set of external Jersey dependencies required to be included in the application dependencies may vary in each application based on the Jersey modules that are being used by the application.

Developers using Maven or a Maven-aware build system in their projects are likely to find it easier to include and manage dependencies of their applications compared to developers using ant or other build systems that are not compatible with Maven. This document will explain to both maven and non-maven developers how to depend on Jersey modules in their application. Ant developers are likely to find the Ant Tasks for Maven very useful.

2.3. Common Jersey Use Cases

2.3.1. Servlet based application on Glassfish

If you are using Glassfish application server, you don't need to package anything with your application, everything is already included. You just need to declare (provided) dependency on JAX-RS API to be able to compile your application.

<dependency>
    <groupId>jakarta.ws.rs</groupId>
    <artifactId>jakarta.ws.rs-api</artifactId>
    <version>2.1.6</version>
    <scope>provided</scope>
</dependency>

If you are using any Jersey specific feature, you will need to depend on Jersey directly.

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.46</version>
    <scope>provided</scope>
</dependency>
<!-- if you are using Jersey client specific features without the server side -->
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>2.46</version>
    <scope>provided</scope>
</dependency>
            

2.3.2. Servlet based server-side application

Following dependencies apply to application server (servlet containers) without any integrated JAX-RS implementation. Then application needs to include JAX-RS API and Jersey implementation in deployed application.

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <!-- if your container implements Servlet API older than 3.0, use "jersey-container-servlet-core"  -->
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.46</version>
</dependency>
<!-- Required only when you are using JAX-RS Client -->
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>2.46</version>
</dependency>

2.3.3. Client application on JDK

Applications running on plain JDK using only client part of JAX-RS specification need to depend only on client. There are various additional modules which can be added, like for example grizzly or apache or jetty connector (see dependencies snipped below). Jersey client runs by default with plain JDK (using HttpUrlConnection). See Chapter 5, Client API. for more details.

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>2.46</version>
</dependency>
            

Currently available connectors:

<dependency>
    <groupId>org.glassfish.jersey.connectors</groupId>
    <artifactId>jersey-grizzly-connector</artifactId>
    <version>2.46</version>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.connectors</groupId>
    <artifactId>jersey-apache-connector</artifactId>
    <version>2.46</version>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.connectors</groupId>
    <artifactId>jersey-jetty-connector</artifactId>
    <version>2.46</version>
</dependency>

2.3.4. Server-side application on supported containers

Apart for a standard JAX-RS Servlet-based deployment that works with any Servlet container that supports Servlet 2.5 and higher, Jersey provides support for programmatic deployment to the following containers: Grizzly 2 (HTTP and Servlet), JDK Http server, Simple Http server and Jetty Http server. This chapter presents only required maven dependencies, more information can be found in Chapter 4, Application Deployment and Runtime Environments.

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-grizzly2-http</artifactId>
    <version>2.46</version>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-grizzly2-servlet</artifactId>
    <version>2.46</version>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-jdk-http</artifactId>
    <version>2.46</version>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-simple-http</artifactId>
    <version>2.46</version>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-jetty-http</artifactId>
    <version>2.46</version>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-jetty-servlet</artifactId>
    <version>2.46</version>
</dependency>

2.4. List of modules

The following chapters provide an overview of all Jersey modules and their dependencies with links to the respective binaries (follow a link on a module name to get complete set of downloadable dependencies).

Table 2.1. Jersey Core

Jersey Core
jersey-client Jersey core client implementation
jersey-common Jersey core common packages
jersey-server Jersey core server implementation

Table 2.2. Jersey Containers

Jersey Containers
jersey-container-grizzly2-http Grizzly 2 Http Container.
jersey-container-grizzly2-servlet Grizzly 2 Servlet Container.
jersey-container-jdk-http JDK Http Container
jersey-container-jetty-http Jetty Http Container
jersey-container-jetty-http2 Jetty HTTP/2 Container
jersey-container-jetty-servlet Jetty Servlet Container
jersey-container-netty-http Netty Http Container.
jersey-container-servlet Jersey core Servlet 3.x implementation
jersey-container-servlet-core Jersey core Servlet 2.x implementation
jersey-container-simple-http Simple Http Container
jersey-gf-ejb Jersey EJB for GlassFish integration

Table 2.3. Jersey Connectors

Jersey Connectors
jersey-apache5-connector Jersey Client Transport via Apache 5
jersey-apache-connector Jersey Client Transport via Apache
jersey-grizzly-connector Jersey Client Transport via Grizzly
jersey-helidon-connector Jersey Client Transport via Helidon
jersey-jdk-connector Jersey Client Transport via JDK connector
jersey-jetty-connector Jersey Client Transport via Jetty
jersey-jetty-http2-connector Jersey Client Transport via Jetty with HTTP/2 support
jersey-netty-connector Jersey Client Transport via Netty

Table 2.4. Jersey Media

Jersey Media
jersey-media-jaxb JAX-RS features based upon JAX-B.
jersey-media-json-binding Jersey JSON-B support module.
jersey-media-json-jackson Jersey JSON Jackson (2.x) entity providers support module.
jersey-media-json-jackson1 Jersey JSON Jackson (1.x) entity providers support module.
jersey-media-json-jettison Jersey JSON Jettison entity providers support module.
jersey-media-json-processing Jersey JSON-P (JSR 353) entity providers support proxy module.
jersey-media-kryo Jersey/JAX-RS Message Body Writer and Reader using Kryo serialization framework
jersey-media-moxy Jersey JSON entity providers support module based on EclipseLink MOXy.
jersey-media-multipart Jersey Multipart entity providers support module.
jersey-media-sse Jersey Server Sent Events entity providers support module.

Table 2.5. Jersey Extensions

Jersey Extensions
jersey-bean-validation Jersey extension module providing support for Bean Validation (JSR-349) API.
jersey-cdi1x Jersey CDI 1.1 integration
jersey-cdi1x-ban-custom-hk2-binding Jersey CDI integration - this module disables custom HK2 bindings
jersey-cdi1x-servlet Jersey CDI 1.x Servlet Support
jersey-cdi1x-transaction Jersey CDI 1.x Transactional Support
jersey-cdi1x-validation Jersey CDI 1.x Bean Validation Support
jersey-declarative-linking Jersey support for declarative hyperlinking.
jersey-entity-filtering Jersey extension module providing support for Entity Data Filtering.
jersey-metainf-services Jersey extension module enabling automatic registration of JAX-RS providers (MBW/MBR/EM) via META-INF/services mechanism.
jersey-micrometer Jersey extension module providing support for Micrometer.
jersey-mp-config Jersey extension module providing support for MicroProfile Configuration.
jersey-mp-rest-client Jersey extension module providing support for MicroProfile REST Client.
jersey-mvc Jersey extension module providing support for MVC.
jersey-mvc-bean-validation Jersey extension module providing support for Bean Validation in MVC.
jersey-mvc-freemarker Jersey extension module providing support for Freemarker templates.
jersey-mvc-jsp Jersey extension module providing support for JSP templates.
jersey-mvc-mustache Jersey extension module providing support for Mustache templates.
jersey-proxy-client Jersey extension module providing support for (proxy-based) high-level client API.
jersey-rx-client-guava Jersey Reactive Client - Guava (ListenableFuture) provider.
jersey-rx-client-rxjava Jersey Reactive Client - RxJava (Observable) provider.
jersey-rx-client-rxjava2 Jersey Reactive Client - RxJava2 (Flowable) provider.
jersey-servlet-portability Library that enables writing web applications that run with both Jersey 1.x and Jersey 2.x servlet containers.
jersey-spring4 Jersey extension module providing support for Spring 4 integration.
jersey-spring5 Jersey extension module providing support for Spring 5 integration.
jersey-wadl-doclet A doclet that generates a resourcedoc xml file: this file contains the javadoc documentation of resource classes, so that this can be used for extending generated wadl with useful documentation.
jersey-weld2-se WELD 2.x SE support

Table 2.6. Jersey Test Framework

Jersey Test Framework
container-runner-maven-plugin The container runner maven plugin provides means to start and stop a container (currently, Weblogic, Tomcat and Glassfish4 are supported). To deploy an application to this container or to repetitively redeploy and test an application in the container.
custom-enforcer-rules Jersey test framework Maven projects
jersey-test-framework-core Jersey Test Framework Core
jersey-test-framework-provider-bundle Jersey Test Framework Providers Bundle
jersey-test-framework-provider-external Jersey Test Framework - External container
jersey-test-framework-provider-grizzly2 Jersey Test Framework - Grizzly2 container
jersey-test-framework-provider-inmemory Jersey Test Framework - InMemory container
jersey-test-framework-provider-jdk-http Jersey Test Framework - JDK HTTP container
jersey-test-framework-provider-jetty Jersey Test Framework - Jetty HTTP container
jersey-test-framework-provider-netty Jersey Test Framework - Netty container
jersey-test-framework-provider-simple Jersey Test Framework - Simple HTTP container
jersey-test-framework-util Jersey Test Framework Utils
memleak-test-common Jersey test framework umbrella project

Table 2.7. Jersey Test Framework Providers

Jersey Test Framework Providers
jersey-test-framework-provider-bundle Jersey Test Framework Providers Bundle
jersey-test-framework-provider-external Jersey Test Framework - External container
jersey-test-framework-provider-grizzly2 Jersey Test Framework - Grizzly2 container
jersey-test-framework-provider-inmemory Jersey Test Framework - InMemory container
jersey-test-framework-provider-jdk-http Jersey Test Framework - JDK HTTP container
jersey-test-framework-provider-jetty Jersey Test Framework - Jetty HTTP container
jersey-test-framework-provider-netty Jersey Test Framework - Netty container
jersey-test-framework-provider-simple Jersey Test Framework - Simple HTTP container

Table 2.8. Jersey Glassfish Bundles

Jersey Glassfish Bundles
jersey-gf-ejb Jersey EJB for GlassFish integration

Table 2.9. Security

Security
oauth1-client Module that adds an OAuth 1 support to Jersey client.
oauth1-server Module that adds an OAuth 1 support to Jersey server
oauth1-signature OAuth1 signature module
oauth2-client Module that adds an OAuth 2 support to Jersey client

Table 2.10. Jersey Examples

Jersey Examples
additional-bundle OSGi Helloworld Webapp - additional bundle
alternate-version-bundle OSGi Helloworld Webapp - alternate version bundle
assemblies Jersey examples shared assembly types.
bean-validation-webapp Jersey Bean Validation (JSR-349) example.
bookmark Jersey Bookmark example.
bookmark-em Jersey Bookmark example using EntityManager.
bookstore-webapp Jersey MVC Bookstore example.
bundle OSGi HttpService example bundle
cdi-webapp Jersey CDI example.
clipboard Jersey clipboard example.
clipboard-programmatic Jersey programmatic resource API clipboard example.
declarative-linking Declarative Hyperlinking - Jersey Sample
entity-filtering Jersey Entity Data Filtering Example.
entity-filtering-security Jersey Entity Data Filtering Security Example.
entity-filtering-selectable Jersey Entity Data Filtering Selectable Example.
exception-mapping Jersey example showing exception mappers in action.
extended-wadl-webapp Extended WADL example.
feed-combiner-java8-webapp Jersey Web Application (Servlet) examples parent POM.
flight-management-webapp Jersey Flight Management Demo Web Application Example
freemarker-webapp Jersey Freemarker example.
functional-test Jersey examples
functional-test OSGi HttpService example
groovy Groovy Jersey
helloworld Jersey annotated resource class "Hello world" example.
helloworld-benchmark Jersey "Hello World" benchmark example.
helloworld-cdi2-se Jersey "Hello world" example with CDI 2 SE.
helloworld-netty Jersey "Hello world" example on Netty container.
helloworld-programmatic Jersey programmatic resource API "Hello world" example.
helloworld-pure-jax-rs Example using only the standard JAX-RS API's and the lightweight HTTP server bundled in JDK.
helloworld-spring-annotations Spring 4 Integration Jersey Example
helloworld-spring-webapp Spring 4 Integration Jersey Example
helloworld-webapp Jersey annotated resource class "Hello world" example.
helloworld-weld Jersey annotated resource class "Hello world" example with Weld support.
http-patch Jersey example for implementing generic PATCH support via JAX-RS reader interceptor. Taken from Gerard Davison's blog entry: http://kingsfleet.blogspot.co.uk/2014/02/transparent-patch-support-in-jax-rs-20.html
http-trace Jersey HTTP TRACE support example.
https-clientserver-grizzly Jersey HTTPS Client/Server example on Grizzly.
https-server-glassfish Jersey HTTPS server on GlassFish example.
java8-webapp Java 8 Types WebApp Example.
jaxb Jersey JAXB example.
jaxrs-types-injection Jersey JAX-RS types injection example.
jersey-ejb Jersey Web Application (Servlet) examples parent POM.
json-binding-webapp Jersey JSON Binding example.
json-jackson Jersey JSON with Jackson example.
json-jackson1 Jersey JSON with Jackson 1.x example.
json-jettison Jersey JSON with Jettison JAXB example.
json-moxy Jersey JSON with MOXy example.
json-processing-webapp Jersey JSON-P (JSR 353) example.
json-with-padding Jersey JSON with Padding example.
lib-bundle OSGi Helloworld Webapp - lib bundle
managed-beans-webapp Jersey Managed Beans Web Application Example.
managed-client Jersey managed client example.
managed-client-simple-webapp Jersey Web Application (Servlet) examples parent POM.
managed-client-webapp Jersey managed client web application example.
monitoring-webapp Jersey Web Application (Servlet) examples parent POM.
multipart-webapp Jersey Multipart example.
oauth-client-twitter Twitter client using OAuth 1 support for Jersey that retrieves Tweets from the home timeline of a registered Twitter account.
oauth2-client-google-webapp Google API data retrieving example using OAuth2 for authentication and authorization
open-tracing Jersey OpenTracing example
osgi-helloworld-webapp Jersey examples
osgi-http-service OSGi HttpService example
reload Jersey resource configuration reload example.
rx-client-webapp Jersey Reactive Client WebApp Example.
server-async Jersey JAX-RS asynchronous server-side example.
server-async-managed Jersey JAX-RS asynchronous server-side example with custom Jersey executor providers.
server-async-standalone Standalone Jersey JAX-RS asynchronous server-side processing example.
server-async-standalone-client Standalone Jersey JAX-RS asynchronous server-side processing example client.
server-async-standalone-webapp Standalone Jersey JAX-RS asynchronous server-side processing example web application.
server-sent-events-jaxrs Jersey JAX-RS 2.1 Server-Sent Events example.
server-sent-events-jersey Jersey Server-Sent Events example.
servlet3-webapp Jersey Servlet 3 example with missing servlet-class in the web.xml file
shortener-webapp Jersey Shortener Webapp (MVC + Bean Validation).
simple-console Jersey Simple Console example
sparklines Jersey examples
sse-item-store-jaxrs-webapp Jersey JAX-RS 2.1 SSE API-based item store example.
sse-item-store-jersey-webapp Jersey SSE API-based item store example.
sse-twitter-aggregator Jersey SSE Twitter Message Aggregator Example.
system-properties-example Jersey system properties example.
tone-generator Jersey examples
war-bundle OSGi Helloworld Webapp WAR bundle
webapp-example-parent Jersey Web Application (Servlet) examples parent POM.
xml-moxy Jersey XML MOXy example.