org.glassfish.Jersey.servlet.ServletContainer ClassNotFoundException

j'ai eu une ClassNotFoundException avec org.glassfish.jersey.servlet.ServletContainer mais elle a démarré singulièrement la nuit dernière quand j'ai essayé de démarrer/redémarrer mon serveur Tomcat (v7) avec Eclipse Juno.

Je ne suis pas sûr de ce qui se passe. Ce qui est bizarre, c'est que ça a commencé hier soir alors que ça fonctionnait parfaitement avant ça.

voici le 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

voici ma toile.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>

j'ai fait en sorte que les fichiers jar pour jersey étaient toujours là dans WEB-INF/lib:

WEB-INF/lib with jersey jars

38
demandé sur ROMANIA_engineer 2014-02-25 21:47:56

9 réponses

le problème:

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

indique que vous essayez d'utiliser le Jersey 2.x servlet, mais vous fournissez le Jersey 1.x libs.

Pour Jersey 1.x vous devez le faire comme ceci:

<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>

pour plus d'information, consultez le Jersey 1.x documentation .



Si vous voulez à la place utiliser Jersey 2.x alors vous devrez fournir le maillot 2.x libs. Dans un projet basé sur maven, vous pouvez utiliser ce qui suit:

<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>

Pour Jersey 2.x vous n'avez pas besoin de configurer quoi que ce soit dans votre web.xml , il suffit de fournir une classe similaire à celle-ci:

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("rest")
public class ApplicationConfig extends Application {

}

pour plus d'informations, consultez le maillot documentation .

voir aussi:

79
répondu unwichtich 2017-05-23 10:31:30

c'est un problème d'éclipse, pas un problème De Jersey.

De ce fil ClassNotFoundException: org.glassfish.Jersey.servlet.ServletContainer

cliquez avec le bouton droit de la souris sur les propriétés du projet eclipse -> Deployment Assembly -> Add -> Java Build Path Entries -> Grad Dependencies -> Finish.

donc Eclipse n'utilisait pas les dépendances de Gradle quand Apache commençait .

19
répondu Adi 2016-08-15 20:22:57

si vous utilisez Jersey 2.x utiliser la dépendance suivante:

<dependency>
   <groupId>org.glassfish.jersey.containers</groupId>
   <artifactId>jersey-container-servlet-core</artifactId>
   <version>2.XX</version>
</dependency>  

XX pourrait être n'importe quelle version particulière que vous recherchez. Jersey Conteneurs .

10
répondu agpt 2014-12-27 16:11:51

ci-dessous code travailler pour moi dans le web.fichier xml

<servlet>
    <servlet-name>WebService</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.example.demo.webservice</param-value>
        //Package
    </init-param>
    <init-param>
        <param-name>unit:WidgetPU</param-name>
        <param-value>persistence/widget</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>WebService</servlet-name>
    <url-pattern>/webservices/*</url-pattern>
</servlet-mapping>
3
répondu Lalit Kale 2015-12-16 07:31:09

je suis d'accord avec la réponse acceptée. Mais pour moi, le problème n'était pas que, au lieu de cela, j'ai dû modifier mon nom de classe Servlet de: -

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

à:

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

Donc, en supprimant .la classe a bien fonctionné dans mon cas. J'espère que ça aidera quelqu'un!

1
répondu Nerdy 2017-11-25 21:18:01

le jersey-container-servlet utilise en fait la dépendance jersey-container-servlet-core . Mais si vous utilisez maven, qui n'a pas vraiment d'importance. Si vous définissez simplement l'usage jersey-container-servlet , il téléchargera automatiquement la dépendance.

mais pour ceux qui ajoutent des fichiers jar à leur projet manuellement (c.-à-d. sans maven), il est important de savoir que vous avez réellement besoin des deux fichiers jar . La classe org.glassfish.jersey.servlet.ServletContainer fait partie de la dépendance de base.

1
répondu bvdb 2018-07-10 15:51:10

si vous n'utilisez pas maven, essayez de mettre vos pots à WEB-INF/lib, ça a marché pour moi.

1
répondu Jordi M. 2018-08-28 15:24:20

supposons que vous êtes usin Jersey 2.25.1, cela a fonctionné pour moi - J'utilise Apache Tomcat conteneur web:

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>2.25.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.25.1</version>
    </dependency>

NB: remplacer la version par la version que vous utilisez

0
répondu Chris J Kikoti 2017-03-14 08:44:42

j'ai eu le même problème avec eclipse, la solution WA était de copier les libs à WEB-INF / lib

0
répondu 15412s 2018-02-01 22:25:04