Intellipaat Back

Explore Courses Blog Tutorials Interview Questions
0 votes
2 views
in Java by (7k points)

I have been getting a ClassNotFoundException with org.glassfish.jersey.servlet.ServletContainer but it peculiarly started when I tried to start/re-start my Tomcat server (v7) with Eclipse Juno.

I am not sure what is going on. Here is the stacktrace:
 

Feb 25, 2014 11:11:19 AM org.apache.catalina.core.ApplicationContext log

INFO: Marking servlet com.att.ucomm.admin.UCommAdminFunctions as unavailable

Feb 25, 2014 11:11:19 AM org.apache.catalina.core.StandardContext loadOnStartup

SEVERE: Servlet /UCommAdminFunctions threw load() exception

java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1671)

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)

at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)

at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)

at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118    )

at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1048)

at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:996)

at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4762)

at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5045)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140)

at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3670)

at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:424)

at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1207)

at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1393)

at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1403)

at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1403)

at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1382)

at java.lang.Thread.run(Unknown Source)

Feb 25, 2014 11:11:19 AM org.apache.catalina.core.StandardContext reload

INFO: Reloading Context with name [/UCommAdminFunctions] is completed

Feb 25, 2014 11:13:33 AM org.apache.catalina.core.StandardWrapperValve invoke

INFO: Servlet com.att.ucomm.admin.UCommAdminFunctions is currently unavailable

Here is my web.xml:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5"

    xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<servlet>

    <servlet-name>com.att.ucomm.admin.UCommAdminFunctions</servlet-name>

    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

    <!-- Register JAX-RS Application, if needed. -->

    <init-param>

        <param-name>com.att.ucomm.admin.UCommAdminFunctions</param-name>

        <param-value>my.package.MyApplication</param-value>

    </init-param>

    <!-- Register resources and providers under my.package. -->

    <init-param>

        <param-name>jersey.config.server.provider.packages</param-name>

        <param-value>com.att.ucomm.admin</param-value>

    </init-param>

    <!-- Register my custom provider (not needed if it's in my.package) AND LoggingFilter. -->

    <init-param>

        <param-name>jersey.config.server.provider.classnames</param-name>

        <param-value>com.att.ucomm.admin.SecurityRequestFilter;org.glassfish.jersey.filter.LoggingFilter</param-value>

    </init-param>

    <!-- Enable Tracing support. -->

    <init-param>

        <param-name>jersey.config.server.tracing</param-name>

        <param-value>ALL</param-value>

    </init-param>

    <load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

    <servlet-name>com.att.ucomm.admin.UCommAdminFunctions</servlet-name>

    <url-pattern>/rest/*</url-pattern>

</servlet-mapping>

<welcome-file-list>

    <welcome-file>index.html</welcome-file>

    <welcome-file>index.htm</welcome-file>

    <welcome-file>index.jsp</welcome-file>

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

    <welcome-file>default.jsp</welcome-file>

</welcome-file-list>

</web-app>

Can somebody help me with this?

2 Answers

0 votes
by (13.1k points)

The problem:
java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

This indicates that you are trying to use the Jersey 2.x servlet, but you are supplying the Jersey 1.x libs.

For Jersey 1.x you have to do like this:

<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>sample.hello.resources</param-value>

  </init-param>

  <load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

  <servlet-name>Jersey REST Service</servlet-name>

  <url-pattern>/rest/*</url-pattern>

</servlet-mapping>

If you want to use the Jersey 2.x then you will have to supply the Jersey 2.x libs. In a maven based project you can use the following:

<dependency>

    <groupId>org.glassfish.jersey.containers</groupId>

    <artifactId>jersey-container-servlet</artifactId>

    <version>2.xx</version>

</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.xx</version>

</dependency>

For Jersey 2.x you don’t need to set up anything in your web.xml, it is sufficient to supply a class similar to this:

import javax.ws.rs.ApplicationPath;

import javax.ws.rs.core.Application;

@ApplicationPath("rest")

public class ApplicationConfig extends Application {

}

Want to learn Java? Check out the core Java certification from Intellipaat.

0 votes
ago by (3.1k points)

The ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer error occurs when the Jersey ServletContainer class is not found in the classpath. This usually happens when the Jersey dependencies are missing in your project. 
 
Solutions 
Add Jersey Dependency in Maven: If you’re using Maven, add the Jersey dependency to your pom.xml: 
 
xml code 
<dependency> 
<groupId>org.glassfish.jersey.containers</groupId> 
<artifactId>jersey-container-servlet</artifactId> 
<version>2.35</version> <!-- or your required version --> 
</dependency> 
Add Jersey JARs Manually: If not using Maven, download the Jersey JARs (e.g., jersey-container-servlet.jar) and include them in your project’s WEB-INF/lib folder. 
 
Check Classpath: Ensure your build path or classpath configuration includes the Jersey dependencies. 

31k questions

32.8k answers

501 comments

693 users

Browse Categories

...