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


Ich versuche, eine einfache Hallo-Welt-Anwendung für zwei Tage mit Jersey + Google App-Engine zu bauen. Für das einfache AppEngine-Projekt habe ich diese Tutorials verfolgt und beide funktionieren gut 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 zu folgen 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 hinzufüge web.xml:

<?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 heruntergeladen JAX-RS 2.1 RI bundle von Hier und habe alle JAR-Dateien hinzugefügt WEB-INF/lib Ordner 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 prüfen, ob es gerade ist com.sun.jersey.spi.container.servlet.ServletContainer existiert in importiert Jersey jars Ich habe versucht, diesen vollständig qualifizierten Namen in Java zu schreiben und die Intellisense Namen zu beenden, aber ich konnte keine Intellisense nachher bekommen com.sun.je also meine letzte Vermutung ist, dass es welche gegeben hat Paketumordnung im neuesten Jersey bauen und jersey ist nicht mehr drin com.sun. Ich bin erschöpft und ich würde jede Art von Hilfe schätzen.


75
2017-08-06 17:02


Ursprung


Antworten:


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

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

Beachten Sie das auch init-param beginnen mit com.sun.jersey wird von Jersey 2 nicht anerkannt.

Bearbeiten

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


141
2017-08-07 09:40



Wenn Sie Trikot 2.x verwenden, benötigen Sie eine andere Konfiguration in web.xml, da sich die Servlet-Klasse darin ändert. 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
2017-12-05 10:54



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>

21
2017-10-31 18:24



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.


8
2017-08-04 18:58



Versuche dies :

org.glassfish.jersey.servlet.ServletContainer

auf Servlet-Klasse


3
2018-04-01 22:04



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.xmlund in der web.xmlSie beziehen sich auf eine Klasse (com.sun.jersey.spi.container.servlet.ServletContainer) wie vorher gesagt von 1.x version. Also, wie ich schließen kann, sollte das funktionieren.

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


Nachdem ich versucht habe, mit den Antworten vor mir zu lösen, hat nicht geholfen, ich habe Änderungen an der pom.xmlund auf der web.xml Der Fehler hat sich 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), 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! :)


2
2017-08-27 09:41



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.


2
2017-11-22 19:49



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

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

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

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


1
2017-08-07 22:42



Ich habe heute den gleichen Fehler gefunden, obwohl ich Jersey 1.x verwendet habe und die richtigen Gläser in meinem Klassenpfad hatte. Für diejenigen, die dem Vogelella-Tutorial bis zum Buchstaben folgen und die 1.x-Gläser verwenden möchten, müssten Sie die Trikotbibliotheken zum Ordner WEB-INF / lib hinzufügen. Dies wird das Problem sicherlich lösen.


0
2017-07-06 21:46



Sie müssen hinzufügen jersey-bundle-1.17.1.jar zur lib des Projekts

<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
2017-08-23 06:48



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, z. 2.15


0
2018-01-21 22:31