Ich versuche, mit der Jersey + Google App Engine zwei Tage lang eine einfache Hallo-Welt-Anwendung zu erstellen. Für ein einfaches AppEngine-Projekt habe ich diese Tutorials befolgt und beide funktionieren einwandfrei https://developers.google.com/appengine/docs/java/gettingstarted/creating https://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 immer wieder
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 WEB-INF/lib
Ordner 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 Maven nicht und der Typ, der dieses Tutorial geschrieben hat, auch nicht.
Um zu überprüfen, ob es überhaupt com.sun.jersey.spi.container.servlet.ServletContainer
importierte Namen gibt, habe Jersey jars
ich versucht, diesen vollständig qualifizierten Namen in Java zu schreiben und die Intellisense-Namen beenden zu lassen, aber ich konnte danach keine Intellisense mehr erhalten. com.sun.je
Meine letzte Vermutung ist, dass es im neuesten Jersey-Build einige Paketumstellungen gegeben hat und jersey
ist nicht mehr drinnen com.sun
. Ich bin erschöpft und würde mich über jede Hilfe freuen.
quelle
Antworten:
Sie haben Jersey 2 (welches RI von JAX-RS 2) heruntergeladen. Das Tutorial, auf das Sie sich beziehen, verwendet Jersey 1. Das Herunterladen von Jersey 1.17.1 von ( hier ) sollte für Sie ausreichen.
Jersey 1 verwendet
com.sun.jersey
, und Jersey 2 verwendetorg.glassfish.jersey
daher die Ausnahme.Beachten Sie auch, dass auch das
init-param
Beginnen mitcom.sun.jersey
von Jersey 2 nicht erkannt wird.Bearbeiten
Das Registrieren von Ressourcen und Anbietern in Jersey 2 enthält zusätzliche Informationen zum Registrieren von Klassen / Instanzen in Jersey 2.
quelle
Wenn Sie jersey 2.x verwenden, benötigen Sie eine andere Konfiguration in web.xml, da die Servlet-Klasse darin geändert wird. Sie können Ihre web.xml mit der folgenden Konfiguration aktualisieren.
quelle
Fügen Sie dies in pom hinzu
quelle
Es handelt sich um ein Eclipse-Setup-Problem, nicht um ein Jersey-Problem.
Von diesem Thread ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
Klicken Sie mit der rechten Maustaste auf die Eigenschaften Ihres Eclipse-Projekts -> Bereitstellungsassembly -> Hinzufügen -> Java-Erstellungspfadeinträge -> Gradle-Abhängigkeiten -> Fertig stellen.
Daher verwendete Eclipse die Gradle-Abhängigkeiten nicht, als Apache gestartet wurde.
quelle
Versuche dies :
auf Servlet-Klasse
quelle
Ich hatte das gleiche Problem wie Sie, obwohl ich einem anderen Leitfaden gefolgt bin: http://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example/
Der seltsame Teil ist, dass ich in diesem Handbuch, das ich verwendet habe, kein Problem mit der Kompatibilität zwischen Versionen (1.x gegen 2.x) haben sollte, da Sie gemäß dem Handbuch das Trikot 1.8.x auf
pom.xml
und in dem verwendenweb.xml
, auf das Sie sich beziehen eine Klasse (com.sun.jersey.spi.container.servlet.ServletContainer
) wie zuvor von 1.x Version gesagt. Wie ich daraus schließen kann, sollte dies funktionieren.Ich vermute, weil ich JDK 1.7 verwende, existiert diese Klasse nicht mehr.
Nachdem ich versucht habe, mit den Antworten vor meinen zu lösen, hat mir nicht geholfen, ich habe Änderungen am
pom.xml
und am vorgenommenweb.xml
Fehler vorgenommen, geändert in:java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
Was angeblich existieren soll!
Aufgrund 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/
Generieren Sie mit Maven (Archetypen) ein Trikotprojekt wie folgt:
Und es hat bei mir funktioniert! :) :)
quelle
Ich hatte auch ein ähnliches Problem. Das Problem wurde behoben, indem Sie das Schritt-Schritt-Tutorial über den folgenden Link durchgingen.
http://examples.javacodegeeks.com/enterprise-java/rest/jersey/jersey-hello-world-example/
apache-tomcat-7.0.56-windows-x64 \ apache -tomcat-7.0.56 \ webapps \ JerseyJSONExample \ WEB-INF \ lib
"23.11.2014 00:06 130.458 jersey-client-1.9.jar
23.11.2014 00:06 458.739 jersey-core-1.9.jar
23.11.2014 00:06 147.952 jersey-json-1.9.jar
23.11.2014 00:06 713.089 jersey-server-1.9.jar "4 Datei (en) 1.450.238 Byte
http://examples.javacodegeeks.com/enterprise-java/rest/jersey/json-example-with-jersey-jackson/
Beide Links gaben ein gutes Bild davon, wie die Dinge funktionieren und sparen viel Zeit.
quelle
Wir erhalten diesen Fehler aufgrund eines Problems mit dem Erstellungspfad. Sie sollten " Server Runtime " -Bibliotheken in Build Path hinzufügen .
Führen Sie die folgenden Schritte aus, um die Ausnahme "Klasse nicht gefunden" zu beheben.
Rechtsklick auf
project --> Build Path --> Java Build Path --> Add Library --> Server Runtime --> Apache Tomcat v7.0
quelle
Ich bin heute auf denselben Fehler gestoßen, obwohl ich Jersey 1.x verwendet habe und die richtigen Gläser in meinem Klassenpfad hatte. Für diejenigen, die dem Vogella-Tutorial zum Brief folgen und die 1.x-Gläser verwenden möchten, müssen Sie die Trikotbibliotheken zum Ordner WEB-INF / lib hinzufügen. Dies wird das Problem sicherlich lösen.
quelle
Sie müssen
jersey-bundle-1.17.1.jar
zur 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>
quelle
Sie müssen in Ihrer web.xml ersetzen:
dafür:
Dies ist Jersey 2.x 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, von Jersey 2.x nicht erkannt wird, sobald Sie auf JAX-RS 2.0 und Jersey 2.x migrieren
Wenn Sie zu irgendeinem Zeitpunkt maven verwenden, lautet Ihre pom.xml wie folgt:
Ersetzen Sie 2.X durch Ihre gewünschte Version, z. B. 2.15
quelle
Eine einfache Problemumgehung besteht darin, zu überprüfen, ob Abhängigkeiten oder Bibliotheken in der Bereitstellungsassembly von eclipse vorhanden sind. Wenn Sie Tomcat verwenden, hat der Server möglicherweise die von uns verwendeten Bibliotheken möglicherweise nicht identifiziert. In diesem Fall geben Sie dies explizit in der Bereitstellungsassembly an.
quelle
Zurück zum ursprünglichen Problem - java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
Wie oben zu Recht erwähnt, wurde in der JAX 2.x-Version die ServletContainer-Klasse in das Paket org.glassfish.jersey.servlet.ServletContainer verschoben. Das dazugehörige Glas ist jersey-container-servlet-core.jar, das im Lieferumfang enthalten ist jaxrs-ri-2.2.1.zip enthalten ist
JAX RS kann ohne MVN ausgearbeitet werden, indem alle in der Zip-Datei jaxrs-ri-2.2.1.zip enthaltenen Jars manuell kopiert werden (ich habe diese Version verwendet, würde mit jeder 2.x-Version funktionieren) Ordner WEB-INF / lib kopiert werden. Durch das Kopieren von Bibliotheken in den richtigen Ordner werden sie zur Laufzeit verfügbar.
Dies ist erforderlich, wenn Sie Eclipse zum Erstellen und Bereitstellen Ihres Projekts verwenden.
quelle
In der Datei pom.xml müssen wir hinzufügen
quelle
Der gleiche Fehler und mehr als 2 Stunden Debuggen und Ausprobieren aller Optionen. Ich habe den Maven / POM nicht verwendet, daher konnte ich die von wenigen gegebene Lösung nicht nutzen.
Schließlich wurde Folgendes behoben: Hinzufügen der Jars direkt zum Ordner tomcat / lib (NICHT WEB-INF \ lib) und Neustart des Tomcat.
quelle
Wenn jemand versucht, eine Hallo-Welt-Anwendung mit Jersey zu erstellen, ist es meiner Meinung nach eine der einfachsten Möglichkeiten, der Jersey-Dokumentation zu folgen.
https://jersey.github.io/download.html
Wenn Sie maven bereits verwenden, dauert es nur wenige Minuten, bis das Ergebnis angezeigt wird.
Ich habe unten verwendet.
quelle
Es hängt im Wesentlichen davon ab, welche Version Trikot Sie verwenden. Wenn Sie Jersey Version 1.XX verwenden, müssen Sie hinzufügen
Jersey 1 verwendet " com.sun.jersey " und Jersey 2 verwendet org.glassfish . auf Servlet-Klassen-Tag. Beachten Sie außerdem, dass auch init-param, das mit com.sun.jersey beginnt, von Jersey 2 nicht erkannt wird.
Und fügen Sie die gesamte JAR-Datei in den Ordner WEB-INF lib ein
quelle