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



Answers

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

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.




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




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



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.




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>



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.




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>




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! :)




Related