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?

1 Answer

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.

Browse Categories

...