Jersey java.lang.ClassNotFoundException: com.sun.j

2020-07-09 10:03发布

问题:

I'm trying to make a web-service with Tomcat and Eclipse using jersey library. This is my service class:

package com.gontuseries.university;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;


@Path("/university")
public class UniversityRestWs {

    @GET
    @Produces(MediaType.TEXT_HTML)
    public String getHtmlUniversityInfo(){
        return "<html><body>test</body></html>";
    }

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getTextUniversityInfo(){
        return "test";
    }
}

And this is file web.xml

 <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.gontuseries.university</param-value>
 </init-param>
 </servlet>
 <servlet-mapping>
 <servlet-name>Jersey REST Service</servlet-name>
 <url-pattern>/rest/*</url-pattern>
 </servlet-mapping>

When i test my service i get java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer I downloaded jersey from https://jersey.java.net/download.html

Can someone help me? Thanks

回答1:

For me the problem was that the server had no jars in the lib folder. Make sure it has access to all dependencies in: project -> properties -> development assembly -> add -> java build path entries.



回答2:

We need to use provide build path to Eclipse. That must resolve issue.

Make sure it has access to all dependencies in: project -> properties -> development assembly -> add -> java build path entries --> maven dependency

jersey bundle dependency

<dependency>
   <groupId>com.sun.jersey</groupId>
   <artifactId>jersey-servlet</artifactId>
   <version>1.17</version>
<dependency>

If you are using maven, best few simple steps will work your application



回答3:

Man, I had the same problem. I solve id adding the jersey-servlet-1.18.jar to the WEB-INF/lib. Then, this folder saw like this:


Remember, add all this jars to yout build-path



回答4:

Are you using Jersey 2.x? If so, the ServletContainer class has been moved to another package. This article has some good info on how to change your web.xml when migrating from Jersey 1.7 to 2.x: https://java.net/projects/jersey/lists/users/archive/2013-06/message/91.



回答5:

The com.sun.jersey.spi.container.servlet.ServletContainer class is contained in the "jersey-servlet.jar" so you should put it to WEB-INF/lib along with the "jersey-server.jar".



回答6:

I got the same error -"java.lang.ClassNotFoundException : com.sun.jersey.spi.container.servlet.ServletContainer", while trying to execute restful jersey web service in tomcat from eclipse.

Following steps helped me to resolve the issue :

  • Correct the maven dependency to right version of dependent jars

         <dependency>
         <groupId>com.sun.jersey</groupId>
         <artifactId>jersey-server</artifactId>
         <version>1.19</version>
         </dependency>
         <dependency>
         <groupId>com.sun.jersey</groupId>
         <artifactId>jersey-servlet</artifactId>
         <version>1.19</version>
         </dependency>
    
  • Right click on the eclipse project -> Maven -> Update Project

  • Ensure in eclipse properties development assembly is configured correctly. Right click on project - Properties -> development assembly -> Add -> java build path entries -> maven dependency



回答7:

If you are using JERSEY-jaxrs-ri-2.9 version zip, Use the given below in WEB.XML file.

<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
  <param-name>jersey.config.server.provider.packages</param-name>
   ......
</init-param>


回答8:

I was getting this error in an Eclipse project that had previously worked fine, running on Tomcat 7.0. Eventually I solved it by removing the project from Tomcat and adding it back again.



回答9:

Above provided solutions are correct but even after making these changes i was getting this error. So what I did was removed all the maven downloaded Jersey jars and update Project again with new maven dependency and that resolved my issue



回答10:

We get this error because of build path issue and outdated dependency names.Latest one's start from org.glassfish and not com.sun.After replacing with latest dependencies for 2.0, You should add "Server Runtime" libraries in Build Path.

"java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer"

Please follow below steps to resolve class not found exception.

Right click on project --> Build Path --> Build Path --> Add Library --> Server Runtime --> Apache Tomcat v7.0

Thanks, Sachin G N