Ich habe eine ClassNotFoundException mit org.glassfish.jersey.servlet.ServletContainer
Erhalten, aber diese wurde in der letzten Nacht speziell gestartet, als ich versuchte, meinen Tomcat-Server (Version 7) mit Eclipse Juno zu starten/neu zu starten.
Ich bin nicht sicher, was los ist. Was bizarr ist, ist, dass es erst letzte Nacht angefangen hat, als es vorher perfekt funktionierte.
Hier ist der 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
Hier ist meine 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>
Ich habe dafür gesorgt, dass die jar-Dateien für jersey noch in WEB-INF/lib vorhanden sind:
Das Problem:
Java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
gibt an, dass Sie versuchen, das Jersey 2.x Servlet zu verwenden, aber Sie liefern das Jersey 1.x libs.
Für Jersey 1.x musst du das so machen:
<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>
Weitere Informationen finden Sie in der Jersey 1.x-Dokumentation .
Wenn Sie stattdessen Jersey 2.x verwenden möchten, müssen Sie die Jersey 2.x libs. In einem Maven-basierten Projekt können Sie Folgendes verwenden:
<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>
Für Jersey 2.x brauchen Sie in Ihrem web.xml
Nichts einzurichten, es reicht aus, eine ähnliche Klasse anzugeben :
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("rest")
public class ApplicationConfig extends Application {
}
Weitere Informationen finden Sie in der Jersey-Dokumentation .
Siehe auch:
Es ist ein Eclipse-Setup-Problem, kein Jersey-Problem.
Von diesem Thread ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
Klicken Sie mit der rechten Maustaste auf die Eigenschaften Ihres Eclipse-Projekts -> Bereitstellungsassembly -> Hinzufügen -> Java Build Path Entries -> Gradle Dependencies -> Fertig stellen.
Also verwendete Eclipse die Gradle-Abhängigkeiten nicht, als Apache gestartet wurde.
Wenn Sie Jersey 2.x verwenden, verwenden Sie folgende Abhängigkeit:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.XX</version>
</dependency>
Wobei XX
eine bestimmte Version sein kann, nach der Sie suchen. Jersey Container .
Ich stimme der akzeptierten Antwort zu. Aber für mich war das nicht das Problem, sondern ich musste meinen Servlet-Klassennamen ändern von:
<servlet-class>org.glassfish.jersey.servlet.ServletContainer.class</servlet-class>
Zu:
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
Das Entfernen von .class hat in meinem Fall gut funktioniert. Hoffe es wird jemandem helfen!
Der folgende Code funktioniert für mich in der Datei "web.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>
Das jersey-container-servlet
verwendet tatsächlich das jersey-container-servlet-core
Abhängigkeit. Aber wenn Sie Maven verwenden, ist das eigentlich egal. Wenn Sie nur das jersey-container-servlet
wird die Abhängigkeit ebenfalls automatisch heruntergeladen.
Aber für diejenigen, die JAR-Dateien manuell (d. H. Ohne Maven) zu ihrem Projekt hinzufügen, ist es wichtig zu wissen, dass Sie tatsächlich beide JAR-Dateien benötigen. Das org.glassfish.jersey.servlet.ServletContainer
Klasse ist eigentlich Teil der Kernabhängigkeit.
Wenn Sie maven nicht verwenden, versuchen Sie, Ihre Gläser in WEB-INF/lib zu stellen, es hat bei mir funktioniert.
Ich hatte das gleiche Problem mit Eclipse, die WA-Lösung bestand darin, die Bibliotheken nach WEB-INF/lib zu kopieren
Angenommen, Sie verwenden Jersey 2.25.1. Dies hat bei mir funktioniert. Ich verwende Apache Tomcat-Webcontainer:
<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: Ersetzen Sie die Version durch die Version, die Sie verwenden