it-swarm.com.de

java.lang.ClassNotFoundException: com.Sun.jersey.spi.container.servlet.ServletContainer

Ich versuche, eine einfache Hello World-Anwendung für zwei Tage mit Jersey + Google App Engine zu erstellen. Für ein einfaches AppEngine-Projekt habe ich diese Tutorials verwendet und beide funktionieren einwandfrei https://developers.google.com/appengine/docs/Java/gettingstarted/creatinghttps://developers.google.com/appengine/ docs/Java/webtoolsplatform

Aber jetzt versuche ich Jersey hinzuzufügen und folge diesem Tutorial http://www.vogella.com/articles/REST/article.html .

Aber der Server gibt mir weiter

Java.lang.ClassNotFoundException: com.Sun.jersey.spi.container.servlet.ServletContainer

wenn ich diese Zeilen in web.xml hinzufüge:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://Java.Sun.com/xml/ns/javaee" xmlns:web="http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>TestServer</display-name>
<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>com.test.myproject</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>
</web-app>

Ich habe Jersey JAX-RS 2.1 RI bundle von hier heruntergeladen und alle JAR-Dateien im Ordner WEB-INF/lib hinzugefügt, wie im Tutorial beschrieben. Und auch nach zwei Tagen funktioniert nichts. Ich habe mehrmals bei Google gesucht und anscheinend haben Leute, die Maven verwenden, es irgendwie gelöst, aber ich verwende weder Maven noch den, der dieses Tutorial geschrieben hat.

Nur um zu überprüfen, ob in importiertem com.Sun.jersey.spi.container.servlet.ServletContainer sogar Jersey jars vorhanden ist. Ich habe versucht, diesen vollständig qualifizierten Namen in Java zu schreiben und die Intellisense-Ausgabe zu beenden. Nach com.Sun.je konnte ich jedoch keine Intellisense-Ausgabe mehr erhalten. Meine letzte Vermutung ist, dass es einige Paketumlagerung in der neuesten Version von Jersey und jersey ist nicht mehr in com.Sun enthalten. Ich bin erschöpft und würde mich über jede Hilfe freuen.

77
M-WaJeEh

Sie haben Jersey 2 (der RI von JAX-RS 2) heruntergeladen. Das Tutorial, auf das Sie sich beziehen, verwendet Jersey 1. Laden Sie Jersey 1.17.1 von ( hier ) herunter.

Jersey 1 verwendet com.Sun.jersey und Jersey 2 verwendet org.glassfish.jersey, daher die Ausnahme. 

Beachten Sie auch, dass auch init-param, der mit com.Sun.jersey beginnt, von Jersey 2 nicht erkannt wird.

Bearbeiten

Registrieren von Ressourcen und Providern in Jersey 2 enthält zusätzliche Informationen zum Registrieren von Klassen/Instanzen in Jersey 2. 

144
Michal Gajdos

Wenn Sie Jersey 2.x verwenden, benötigen Sie eine andere Konfiguration in web.xml, da die Servlet-Klasse geändert wird. Sie können Ihre web.xml mit folgender Konfiguration aktualisieren.

    <servlet>
    <servlet-name>myrest</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>    
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>your.package.path</param-value>
    </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>myrest</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
28
p27

Fügen Sie dies in pom hinzu

<dependency>
    <groupId>com.Sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.17.1</version>
</dependency>
<dependency>
    <groupId>com.Sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.17.1</version>
</dependency>
<dependency>
    <groupId>com.Sun.jersey</groupId>
    <artifactId>jersey-servlet</artifactId>
    <version>1.17.1</version>
</dependency>
22
user1249655

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

Aus diesem Thread ClassNotFoundException: com.Sun.jersey.spi.container.servlet.ServletContainer

Klicken Sie mit der rechten Maustaste auf Ihr Eclipse-Projekt. Eigenschaften -> Bereitstellungsassembly -> Hinzufügen -> Java-Build-Pfadeinträge -> Abstufungsabhängigkeiten -> Fertig stellen.

Also benutzte Eclipse nicht die Gradle-Abhängigkeiten, als Apache startete.

8
Adi

versuche dies : 

org.glassfish.jersey.servlet.ServletContainer

auf Servlet-Klasse

3
Pichitron

Ich war auch mit einem ähnlichen Problem konfrontiert. Das Problem wurde durch das Schritt-Schritt-Tutorial unter dem folgenden Link gelöst.

http://examples.javacodegeeks.com/enterprise-Java/rest/jersey/jersey-hello-world-example/

  • Die Hauptsache ist, dass die Trikot-Bibliotheken korrekt im Tomcat-Ordner WEB-INF/lib platziert werden. Dies geschieht automatisch mit den Eclipse-Einstellungen, die im obigen Link aufgeführt sind. Es wird eine WAR-Datei mit den abhängigen JAR-Dateien erstellt. Andernfalls treten Probleme mit ClassNotFound Exception auf.

Apache-Tomcat-7.0.56-windows-x64\Apache - Tomcat-7.0.56\webapps\JerseyJSONEexample\WEB-INF\lib

"23.11.2014 12:06 AM 130.458 jersey-client-1.9.jar

23.11.2014 12:06 Uhr 458,739 jersey-core-1.9.jar

23.11.2014 00:06 147,952 jersey-json-1.9.jar

23.11.2014 12:06 AM 713.089 jersey-server-1.9.jar " 4 Datei (en) 1.450.238 Bytes

  • Das zweite Tutorial erläutert, wie Sie einen Webservice erstellen, der JSON-Ausgaben erzeugt und verwendet.

http://examples.javacodegeeks.com/enterprise-Java/rest/jersey/json-example-with-jersey-jackson/

Beide Links geben einen guten Überblick über die Funktionsweise und sparen viel Zeit.

2
yogishaj

Ich hatte das gleiche Problem wie Sie, obwohl ich eine andere Anleitung befolgt habe: http://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example/

Das Merkwürdige ist, dass ich in diesem Handbuch, das ich verwendet habe, kein Problem mit der Kompatibilität zwischen den Versionen haben sollte (1.x gegen 2.x), weil Sie dem Trikot 1.8.x nach pom.xml folgen und sich auf web.xml beziehen eine Klasse (com.Sun.jersey.spi.container.servlet.ServletContainer) wie zuvor in der 1.x-Version angegeben. Ich kann also davon ausgehen, dass dies funktionieren sollte.

Meine Vermutung ist, weil ich JDK 1.7 verwende, diese Klasse existiert nicht mehr.


Nachdem ich versucht hatte, mit den Antworten vor meinen zu klären, hat nicht geholfen, ich habe Änderungen am pom.xml vorgenommen und am web.xml der Fehler geändert in: Java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

Was angeblich existieren sollte!

Als Ergebnis dieses Fehlers habe ich eine "neue" Lösung gefunden: http://marek.potociar.net/2013/06/13/jax-rs-2-0-and-jersey-2-0-released/

Mit Maven (Archetypen) ein Trikotprojekt generieren, gefällt Folgendes:

mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.0

Und es hat für mich funktioniert! :)

2
Paulo Oliveira

Wir erhalten diesen Fehler aufgrund eines Buildpfadproblems. Sie sollten " Server Runtime " Bibliotheken im Build-Pfad hinzufügen.

"Java.lang.ClassNotFoundException: com.Sun.jersey.spi.container.servlet.ServletContainer"

Bitte befolgen Sie die folgenden Schritte, um eine nicht gefundene Ausnahme zu beheben.

Rechtsklick auf project --> Build Path --> Java Build Path --> Add Library --> Server Runtime --> Apache Tomcat v7.0 

1
Sachin G N

Ich habe heute denselben Fehler festgestellt, obwohl ich Jersey 1.x verwendete und die richtigen Gläser in meinem Klassenpfad hatte. Für diejenigen, die dem Vogella-Tutorial folgen und die 1.x-Gläser verwenden möchten, müssen Sie die Trikot-Bibliotheken zum Ordner WEB-INF/lib hinzufügen. Dies wird sicherlich das Problem lösen.

0
rickygrimes

sie müssen jersey-bundle-1.17.1.jar zu lib des Projekts hinzufügen

<servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>com.Sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <!-- <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> --> <init-param> <param-name>com.Sun.jersey.config.property.packages</param-name> <!-- <param-name>jersey.config.server.provider.packages</param-name> --> <param-value>package.package.test</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>

0
AhmadReza

Derselbe Fehler und verschwendeter 2+ Stunden Debugging und Ausprobieren aller Optionen. Ich habe den Maven/POM nicht verwendet, daher konnte ich diese von wenigen angebotene Lösung nicht nutzen. 

Schließlich wurde Folgendes behoben: Hinzufügen der Jars direkt zum Ordner "Tomcat/lib " (NOT WEB-INF\lib) und Neustart des Tomcat.

0
Velu

Wenn jemand versucht, eine Hello World-Anwendung mit Jersey zu erstellen, denke ich, dass eine der einfachsten Methoden darin besteht, der Dokumentation von Jersey zu folgen. 

https://jersey.github.io/download.html

Wenn Sie Maven bereits verwenden, dauert es nur wenige Minuten, um das Ergebnis zu sehen.

Ich habe unten verwendet.

mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.26
0

Zurück zum ursprünglichen Problem - Java.lang.ClassNotFoundException: com.Sun.jersey.spi.container.servlet.ServletContainer

Wie oben richtig gesagt, wurde in der Version JAX 2.x die ServletContainer-Klasse in das Paket org.glassfish.jersey.servlet.ServletContainer verschoben. Das verwandte Glas ist jersey-container-servlet-core.jar welches in jaxrs-ri-2.2.1.Zip enthalten ist

JAX RS kann ohne mvn erarbeitet werden, indem alle in der Zip-Datei jaxrs-ri-2.2.1.Zip (ich habe diese Version verwendet habe, funktioniert mit jeder 2.x-Version) manuell nach WEB-INF kopiert werden/lib Ordner. Das Kopieren von Bibliotheken in den rechten Ordner macht sie zur Laufzeit verfügbar.

Dies ist erforderlich, wenn Sie Eclipse zum Erstellen und Bereitstellen Ihres Projekts verwenden.

0
Andy1625

Es hängt grundsätzlich davon ab, welche Version Sie verwenden. Wenn Sie Jersey ver.1.X.X verwenden, müssen Sie hinzufügen

Jersey 1 verwendet " com.Sun.jersey " und Jersey 2 verwendet org.glassfish . auf Servlet-Klassen-Tag. Beachten Sie auch, dass auch init-param, das mit com.Sun.jersey beginnt, von Jersey 2 nicht erkannt wird.

Fügen Sie alle JAR-Dateien in den Ordner WEB-INF lib ein

0
Arun

In der Datei pom.xml müssen wir hinzufügen

<dependency>
    <groupId>com.Sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.8</version>
</dependency>
0
KARTHIKEYAN.A

Eine einfache Problemumgehung besteht darin, zu prüfen, ob Sie Abhängigkeiten oder Bibliotheken in Deployment Assembly von Eclipse haben. Wenn Sie Tomcat verwenden, kann der Server die von uns verwendeten Bibliotheken möglicherweise nicht identifiziert haben. In diesem Fall geben Sie dies explizit in der Deployment Assembly an.

0
shine

Sie müssen in Ihrer web.xml ersetzen:

<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>com.test.myproject</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

dafür:

<servlet>
    <servlet-name>Jersey REST Service</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.test.myproject</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

hierbei handelt es sich um Jersey 2.x. Es verwendet org.glassfish.jersey-Pakete anstelle von com.Sun.jersey (das von Jersey 1.x verwendet wird) und daher die Ausnahme. Beachten Sie, dass auch init-param, das mit com.Sun.jersey beginnt, nicht von Jersey 2.x erkannt wird, wenn Sie zu JAX-RS 2.0 und Jersey 2.x migrieren

wenn Sie maven verwenden, lautet Ihre pom.xml wie folgt:

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.X</version>
</dependency>

ersetzen Sie 2.X für Ihre Wunschversion, z. 2.15