0

When I deploy my rest api with jersey to a tomcat 7.0 server I get an error that has been discussed on stackoverflow quite often but I haven't been able to resolve it:

java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1892)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:495)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:477)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:113)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1133)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1072)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5362)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5660)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1700)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1690)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Things I have checked:

Avoiding duplicate jersey versions

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>${jersey2.version}</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>${jersey2.version}</version>
</dependency>
<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.1</version>
</dependency>

So, ServletContainer is definitely imported

ServletContainer.class in Maven dependencies

I notice however in the dependency hierarchy that the jersey servlet container is also imported through another library (dropwizard-core -> dropwizard-jersey -> jersey-container-servlet: 2.16) and the versions differ (my version is 2.25.1). But it says omitted for conflict with 2.25.1

jersey servlet container of different version also imported by different lib

Where is Apache Tomcat v7.0 package library

My project was originally a pure Maven project and I added the Dynamic Web Project facet lateron. When I compare to a test project where I successfully tested a jersey rest api, I don't see the Apache Tomcat v7.0 libraries on my build path. In my test project I see

build path of successful rest api project

versus

build path of actual project

WebContent/WEB-INF/lib is empty

As mentioned in this question the jersey libraries should be deployed to my WEB-INF/lib/ folder. I did Project -> Deployment Assembly -> Add -> Java Build Path Entries -> Maven Dependencies -> Finish. But as soon as I do Project -> Maven -> Update the step above is reset (i.e. I don't see Maven Dependencies in the Web Deployment Assembly anymore. Despite this is strange, in the successful test jersey project the lib folder is also empty.

EDIT

There is something more fundamental going wrong. In the successful jersey rest api, I got the subfolder structure

  • target
    +---- generated-sources
    +---- JerseyRestDemo-0.0.1-SNAPSHOT
    +---- m2e-wtp
    +---------- web-resources
    +----------------- META-INF
    +-----------------------maven
    +---- maven-archiver
    +--------- pom.properties
    +---- test-classes
  • WebContent
    +---- META-INF
    +--------- MANIFEST.MF
    +---- WEB-INF
    +--------- lib
    +----------web.xml

However, in my current project I just see

  • target
    +----- generated-sources
    +---------- annotations
    +----- maven-status
    +---------- maven-compiler-plugin
    +--------------- compile
  • WebContent
    +---- META-INF
    +--------- MANIFEST.MF
    +---- WEB-INF
    +--------- lib
    +----------web.xml

Thanks for your help

tenticon
  • 2,639
  • 4
  • 32
  • 76

1 Answers1

0

I converted the project again from maven to webapp following this post and then it worked

tenticon
  • 2,639
  • 4
  • 32
  • 76