eclipse - java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer





google-app-engine java-ee jersey-2.0 (15)


Der gleiche Fehler und verschwendet 2+ Stunden Debugging und alle Optionen auszuprobieren. Ich habe Maven / POM nicht benutzt, daher konnte ich die von wenigen gegebene Lösung nicht nutzen.

Letztendlich wurde es wie folgt gelöst: Die jars wurden direkt in den Ordner tomcat / lib (NICHT WEB-INF \ lib) hinzugefügt und der Tomcat neu gestartet.

Ich versuche, eine einfache Hallo-Welt-Anwendung für zwei Tage mit Jersey + Google App-Engine zu bauen. Für ein einfaches AppEngine-Projekt habe ich diese Tutorials verfolgt und beide funktionieren einfach 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 diesem Tutorial http://www.vogella.com/articles/REST/article.html folgen.

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 here 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 mehrere Male auf Google gesucht und anscheinend haben Leute, die Maven benutzen, es irgendwie gelöst, aber ich benutze Maven nicht, noch tat der Typ, der dieses Tutorial schrieb.

Nur um zu überprüfen, ob sogar com.sun.jersey.spi.container.servlet.ServletContainer in importierten Jersey jars Ich habe versucht, diesen vollständig qualifizierten Namen in Java zu schreiben und die Intellisense Namen zu beenden, aber ich konnte kein IntelliSense nach com.sun.je also meine letzte Vermutung ist, dass es einige com.sun im letzten Jersey-Build gegeben hat und jersey nicht mehr in com.sun . Ich bin erschöpft und ich würde jede Art von Hilfe schätzen.




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>



Sie haben Jersey 2 heruntergeladen (welches RI von JAX-RS 2). Das Tutorial, auf das du dich beziehst, verwendet Jersey 1. Download Jersey 1.17.1 von ( here ), sollte für dich ausreichend sein.

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

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

Bearbeiten

Die Registrierung von Ressourcen und Anbietern in Jersey 2 enthält zusätzliche Informationen zur Registrierung von Klassen / Instanzen in Jersey 2.




Eine einfache Problemumgehung ist, ob Sie Abhängigkeiten oder Bibliotheken in der Deployment-Assembly von eclipse.probably haben. Wenn Sie Tomcat verwenden, hat der Server die von uns verwendeten Bibliotheken möglicherweise nicht identifiziert. In diesem Fall geben Sie dies explizit in der Bereitstellungsassembly an.




Versuche dies :

org.glassfish.jersey.servlet.ServletContainer

auf Servlet-Klasse




Ich hatte das gleiche Problem wie du, obwohl ich einem anderen Führer 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 den Versionen (1.x gegen 2.x) haben sollte, denn nach der Anleitung verwenden Sie das Trikot 1.8.x auf pom.xml und in der web.xml Sie verweisen auf eine Klasse ( com.sun.jersey.spi.container.servlet.ServletContainer ) wie zuvor in der 1.x-Version. Also, wie ich schließen kann, sollte das funktionieren.

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

Nachdem ich versucht habe, mit den Antworten vor mir zu lösen, hat es nicht geholfen, ich habe Änderungen an der pom.xml und in der web.xml der Fehler geändert in: java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

Was angeblich existieren sollte!

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

Mit Maven (Archetypen), generiere ein Jersey-Projekt, gefällt das:

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

Und es hat für mich funktioniert! :)




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

Von diesem Thread ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer

Klicken Sie mit der rechten Maustaste auf Ihr Eclipse-Projekt Eigenschaften -> Deployment-Assembly -> Hinzufügen -> Java-Build-Pfad-Einträge -> Gradle-Abhängigkeiten -> Fertig stellen.

Daher verwendete Eclipse beim Start von Apache nicht die Gradle-Abhängigkeiten.




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>

Dies ist Jersey 2.x verwendet org.glassfish.jersey Pakete anstelle von com.sun.jersey (die 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 zu JAX-RS 2.0 und Jersey 2.x migrieren

Wenn du zu irgendeinem Zeitpunkt maven verwendest, wäre deine pom.xml das:

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

Ersetzen Sie 2.X für Ihre Wunschversion, zB 2.15




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>




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>



Wir erhalten diesen Fehler aufgrund eines Build-Pfad-Problems. Sie sollten " Server Runtime " -Bibliotheken in Build Path hinzufügen.

"java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer"

Bitte befolgen Sie die folgenden Schritte, um die Ausnahme "Klasse nicht gefunden" zu beheben.

Klicken Sie mit der rechten Maustaste auf project --> Build Path --> Java Build Path --> Add Library --> Server Runtime --> Apache Tomcat v7.0




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

Wie oben bereits erwähnt, wurde die ServletContainer-Klasse in der Version JAX 2.x in das Paket org.glassfish.jersey.servlet.ServletContainer verschoben. Das verwandte jar ist jersey-container-servlet-core.jar, das in der jaxrs-ri-2.2.1.zip

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

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




Ich hatte auch ein ähnliches Problem. Das Problem wurde behoben, indem Sie die Schritt-Schritt-Anleitung vom folgenden Link aus durchgehen.

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

  • Die Hauptsache ist, dass die Trikotbibliotheken korrekt im Ordner TOMCAT WEB-INF / lib platziert werden. Dies geschieht automatisch durch die oben genannten Eclipse-Einstellungen. Es wird eine WAR-Datei mit den abhängigen JAR-Dateien erstellt. Sonst werden Sie Probleme mit ClassNotFound Exception bekommen.

apache-tomcat-7.0.56-windows-x64 \ apache -tomcat-7.0.56 \ webapps \ JerseyJSONExample \ WEB-INF \ lib

"23.11.2014 12:06 130.458 Trikot-Client-1.9.jar

11/23/2014 12:06 458,739 Jersey-Core-1.9.jar

11/23/2014 12:06 147,952 jersey-json-1.9.jar

11/23/2014 12:06 713,089 jersey-server-1.9.jar "4 Datei (en) 1.450.238 bytes

  • Das zweite Tutorial erklärt, wie Sie einen Webservice erstellen, der JSON-Ausgaben erzeugt und konsumiert.

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

Beide Links geben ein gutes Bild davon, wie die Dinge funktionieren und sparen viel Zeit.




Wenn jemand versucht, eine Hallo-Welt-Anwendung mit Jersey zu bauen, denke ich, eine der einfachsten Möglichkeiten ist, Jersey Dokumentation zu folgen.

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

Wenn Sie Maven bereits verwenden, dauert es nur ein paar Minuten, bis Sie das Ergebnis sehen.

Ich habe unten verwendet.

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



count = modelname.all(keys_only=True).count(some_upper_limit)

Nur um den früheren Beitrag von dar hinzuzufügen, muss 'some_upper_limit' angegeben werden. Wenn nicht, ist die Standardanzahl immer noch maximal 1000.





eclipse google-app-engine java-ee jersey jersey-2.0