Dexter
Dexter

Reputation: 1421

REST app with Jersey 2 ClassNotFoundException : com.sun.jersey.spi.container.servlet.ServletContainer

POM:

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>${jersey.version}</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>${jersey.version}</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-moxy</artifactId>
    <version>${jersey.version}</version>
</dependency>

where jersey.version=2.5.

I use the embedded jetty (maven-jetty-plugin) to start the REST application. When mvn jetty:run is executed, the following exception occurs.

2015-10-21 00:21:32.883:INFO::jetty-6.1.26
2015-10-21 00:21:33.478:WARN::Failed startup of context org.mortbay.jetty.plugin.Jetty6PluginWebAppContext@782a4fff{/promat,C:\wses\promat\src\main\webapp}
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:244)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:230)
    at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:401)
...
...

So long as I was using 1.8 dependency for jersey - there was no issue. This is the dependency for which there was no issue.

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.8</version>
</dependency>

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>1.8</version>
</dependency>

What is the missing artifact? Jersey-server with 1.8 had ServletContainer class.

Upvotes: 2

Views: 765

Answers (1)

Matthew Madson
Matthew Madson

Reputation: 1743

Looks like the class has been moved to:

org.glassfish.jersey.servlet.ServletContainer

Though I haven't verified if they have the same semantics, so there may be additional migration steps necessary.

Upvotes: 2

Related Questions