org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException

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:

WEB-INF/lib met jersey potten


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:


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

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes