Resolving ClassNotFoundException: ServletContainer Due to Jersey Version Mismatch

Nov 23, 2025 · Programming · 8 views · 7.8

Keywords: Jersey | ClassNotFoundException | ServletContainer

Abstract: This article provides an in-depth analysis of the java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer error commonly encountered when developing RESTful services with the Jersey framework. It explains the root cause stemming from version mismatches between Jersey 1.x and 2.x, detailing differences in package structures and configurations. Solutions include correct web.xml setups and dependency management for both versions, aiding developers in quickly diagnosing and fixing this prevalent issue.

Problem Background and Error Analysis

When developing RESTful services using the Jersey framework, many developers encounter the java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer exception. This error typically arises from a version mismatch in the Jersey framework. Specifically, if a developer downloads Jersey 2.x but configures the web.xml with the Servlet class path from Jersey 1.x, the application server fails to locate the corresponding class, resulting in this exception.

Jersey Version Differences Explained

Jersey, as the reference implementation for the JAX-RS standard, underwent significant package restructuring between versions 1.x and 2.x. Jersey 1.x uses com.sun.jersey as the base package name, whereas Jersey 2.x switched to org.glassfish.jersey. This change renders many existing configurations invalid. For instance, in Jersey 1.x, the Servlet container class is com.sun.jersey.spi.container.servlet.ServletContainer, while in Jersey 2.x, it is org.glassfish.jersey.servlet.ServletContainer.

Solutions and Configuration Adjustments

To address this issue, developers must adjust the web.xml configuration based on the Jersey version used. If using Jersey 1.x, ensure the dependency includes jersey-bundle-1.17.1.jar (or another 1.x version) and configure web.xml as follows:

<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.test.myproject</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

For Jersey 2.x, modify the Servlet class path and initialization parameters:

<servlet>
    <servlet-name>myrest</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>your.package.path</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

Dependency Management and Best Practices

To avoid version conflicts, it is recommended to use build tools like Maven or Gradle for managing Jersey dependencies. For Jersey 1.x, add the following dependency:

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-bundle</artifactId>
    <version>1.17.1</version>
</dependency>

For Jersey 2.x, use:

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

When managing JAR files manually, always download the complete package from official sources and ensure all relevant JARs are placed in the WEB-INF/lib directory.

Conclusion and Extensions

By understanding the package structure changes in Jersey versions, developers can quickly diagnose and resolve ClassNotFoundException errors. When upgrading the framework, always refer to official documentation for configuration updates and leverage community resources such as blogs and forums for the latest information. Adhering to these practices will significantly enhance development efficiency and application stability.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.