Ik heb een ClassNotFoundException gekregen met org.glassfish.jersey.servlet.ServletContainer
maar het begon eigenaardig gisteravond toen ik probeerde mijn Tomcat-server (v7) te starten/herstarten met Eclipse Juno .
Ik weet niet zeker wat er aan de hand is. Wat bizar is, is dat het gisteravond pas begon, terwijl het daarvoor perfect werkte.
Hier is de 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 is mijn 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>
Ik heb ervoor gezorgd dat de jar-bestanden voor jersey nog steeds aanwezig waren in WEB-INF/lib:
Antwoord 1, autoriteit 100%
Het probleem:
java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
geeft aan dat u de Jersey 2.x servlet probeert te gebruiken, maar dat u de Jersey 1.x bibliotheken aanlevert.
Voor Jersey 1.x moet je het als volgt doen:
<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>
Bekijk voor meer informatie de Jersey 1.x-documentatie.
Als je in plaats daarvan Jersey 2.x wilt gebruiken, dan moet je de Jersey 2.x bibliotheken aanleveren. In een op maven gebaseerd project kunt u het volgende gebruiken:
<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>
Voor Jersey 2.x hoeft u niets in uw web.xml
in te stellen, het is voldoende om een klasse als deze aan te leveren:
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("rest")
public class ApplicationConfig extends Application {
}
Bekijk voor meer informatie de Jersey-documentatie.
Zie ook:
- java.lang.ClassNotFoundException: com.sun .jersey.spi.container.servlet.ServletContainer
- Jersey Services met Tomcat en Eclipse
- ClassNotFoundException bij het starten van tomcat
Antwoord 2, autoriteit 27%
Het is een probleem met de eclipsconfiguratie, geen Jersey-probleem.
Uit deze thread ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
Klik met de rechtermuisknop op uw eclipse-project Eigenschappen -> Implementatie Assemblage -> Voeg -> toe Java Build Path-invoeren -> Gradle-afhankelijkheden -> Voltooien.
Dus Eclipse gebruikte de Gradle-afhankelijkheden niet toen Apache begon.
Antwoord 3, autoriteit 13%
Als u Jersey 2.x gebruikt, gebruik dan de volgende afhankelijkheid:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.XX</version>
</dependency>
Waar XX
elke bepaalde versie kan zijn waarnaar u op zoek bent. Jersey-containers.
Antwoord 4, autoriteit 7%
Ik ga akkoord met het geaccepteerde antwoord. Maar voor mij was het probleem niet dat, in plaats daarvan moest ik mijn Servlet-Class-naam wijzigen van:-
<servlet-class>org.glassfish.jersey.servlet.ServletContainer.class</servlet-class>
Aan:
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
Dus het verwijderen van .class werkte in mijn geval prima. Ik hoop dat het iemand zal helpen!
Antwoord 5, autoriteit 6%
Onderstaande code werkt voor mij in web.xml-bestand
<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>
Antwoord 6
De jersey-container-servlet
gebruikt in feite de afhankelijkheid jersey-container-servlet-core
. Maar als je maven gebruikt, maakt dat niet zoveel uit. Als u alleen het gebruik van jersey-container-servlet
definieert, wordt de afhankelijkheid ook automatisch gedownload.
Maar voor degenen die jar-bestanden handmatig aan hun project toevoegen (d.w.z. zonder maven) Het is belangrijk om te weten dat je eigenlijk beide jar-bestanden nodig hebt. De klasse org.glassfish.jersey.servlet.ServletContainer
maakt eigenlijk deel uit van de kernafhankelijkheid.
Antwoord 7
Als je maven niet gebruikt, probeer dan je jars op WEB-INF/lib te zetten, het werkte voor mij.
Antwoord 8
Stel dat je Jersey 2.25.1 gebruikt, dit werkte voor mij – ik gebruik de 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: Vervang versie door de versie die u gebruikt
Antwoord 9
Ik had hetzelfde probleem met eclipse, de WA-oplossing was om de bibliotheken naar WEB-INF/lib te kopiëren