2014-02-25 11 views
33

Ich habe eine ClassNotFoundException mit org.glassfish.jersey.servlet.ServletContainer bekommen, aber es begann vorgestern letzte Nacht, als ich versuchte, meinen Tomcat-Server (v7) mit Eclipse Juno zu starten/neu zu starten.org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException

Nicht sicher, was vor sich geht. Was bizarr ist, ist, dass es gerade erst letzte Nacht passiert ist, während es vorher sehr gut funktioniert hat. Hier

ist die 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 stellte sicher, dass die JAR-Dateien für Trikot noch gab es in WEB-INF/lib:

WEB-INF/lib with jersey jars

+0

Wenn jemand begegnet das gleiche Problem nach einem Projekt Umbenennung ... 1. Projekt> Sauber zu kopieren war ... 2. Projekt> Build All –

Antwort

64

Das Problem:

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

zeigt an, dass Sie versuchen, die Jersey 2.x Servlet zu verwenden, aber Sie liefern die Jersey 1.x Libs.

Für Jersey 1.x Sie es wie folgt zu tun:

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

Für weitere Informationen überprüfen Sie die Jersey 1.x documentation.

Wenn Sie stattdessen Jersey 2.x verwenden möchten dann werden Sie die Jersey 2.x Libs liefern müssen. In einem Maven-basierten Projekt können Sie die folgende 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 Sie Setup etwas braucht nicht in Ihrem web.xml, genügt es, eine Klasse ähnlich wie diese zu liefern:

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

Siehe auch:

+13

Und was, wenn Sie Jersey 2.x verwenden möchten? – DuKes0mE

+2

Ob Sie Jersey 1 oder 2 verwenden, benötigen Sie immer noch Abhängigkeiten (obwohl die alten sind com.sun ...). Sie zeigen nur eine web.xml für Jersey 1. – Roger

+0

Für Jersey 2 sollte die Servlet-Klasse ' org.glassfish.jersey.servlet.ServletContainer' in web.xml laut docs, aber ich bin mir nicht sicher, was der 'param-name' sein sollte. https://jersey.java.net/documentation/latest/deployment.html. * Update * Ich denke, es ist 'jersey.config.server.provider.packages'. –

8

Wenn Sie Jersey 2.x Verwendung folgende Abhängigkeit verwenden:

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

Wo XX könnte eine bestimmte Version, die Sie suchen. Jersey Containers.

2

Below Code Arbeit für mich in 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> 
14

Es ist ein Eclipse-Setup-Problem, kein Problem Jersey.

Von diesem Thread ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

Recht Ihrer Eclipse-Projekt auf Eigenschaften -> Deployment Assembly -> Add -> Java Build Path-Einträge -> Gradle Abhängigkeiten -> Fertig stellen.

Also verwendete Eclipse die Gradle-Abhängigkeiten nicht, als Apache gestartet wurde.

+0

Was eine einfache und sehr hilfreiche Freundshow mein Problem gelöst hat. Vielen Dank! –

+0

Danke Paulo! glücklich, ich könnte dir helfen. – Adi

+0

Danke @Adi, du hast mir geholfen, meinen Tag zu retten. :) – Rohit

0

Angenommen, Sie 2.25.1 Jersey sind usin, das ist für mich gearbeitet - ich Apache Tomcat Web-Container bin mit:

<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 Version mit der Version, die Sie

1

verwenden ich mit einverstanden die akzeptierte Antwort. Aber für mich war das Problem nicht, dass anstelle hatte ich von meinen Servlet-Klasse Namen zu ändern: -

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

An:

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

So entfernen .class- arbeitete in meinem Fall in Ordnung. Hoffe es wird jemandem helfen!

0

hatte ich das gleiche Problem mit Eclipse, die WA-Lösung die Libs zu WEB-INF/lib