Java.lang.ClassNotFoundException: com.soleil.Jersey.le spi.conteneur.servlet.ServletContainer
j'essaie de construire une application hello world simple pour deux jours en utilisant Jersey + Google app engine. Pour le projet Simple AppEngine j'ai suivi ces tutoriels et les deux fonctionne très bien https://developers.google.com/appengine/docs/java/gettingstarted/creating https://developers.google.com/appengine/docs/java/webtoolsplatform
mais maintenant j'essaie D'ajouter Jersey et en suivant ce tutoriel http://www.vogella.com/articles/REST/article.html .
mais le serveur continue de me donner
de java.lang.ClassNotFoundException: com.soleil.Jersey.le spi.le conteneur.servlet.ServletContainer
quand j'ajoute ces lignes dans 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>
J'ai téléchargé Jersey JAX-RS 2.1 RI bundle
de ici et j'ai ajouté tous les fichiers jar dans le dossier WEB-INF/lib
comme décrit dans le tutoriel. Et même après deux jours, rien ne fonctionne. J'ai cherché plusieurs fois sur Google et apparemment les gens qui utilisent Maven l'ont résolu d'une façon ou d'une autre, mais je n'utilise pas Maven non plus le gars qui a écrit ce tutoriel.
juste pour vérifier si même com.sun.jersey.spi.container.servlet.ServletContainer
existe dans importé Jersey jars
j'ai essayé d'écrire ce nom pleinement qualifié en Java et laisser les noms de finition intellisense mais je ne pouvais pas obtenir intellisense après com.sun.je
donc ma dernière supposition est qu'il ya eu quelque package rearrangement dans la dernière Construction De Jersey et jersey
n'est plus à l'intérieur de com.sun
. Je suis épuisée et j'apprécierais toute aide.
17 réponses
vous avez téléchargé Jersey 2 (Quel RI de JAX-RS 2). Le tutoriel auquel vous faites référence utilise Jersey 1. Téléchargez Jersey 1.17.1 de ( ici ), devrait être suffisant pour vous.
Jersey 1 utilise com.sun.jersey
, et Jersey 2 utilise org.glassfish.jersey
d'où l'exception.
notez aussi que init-param
commençant par com.sun.jersey
ne sera pas reconnu par Jersey 2.
Modifier
enregistrer les ressources et les fournisseurs à Jersey 2 contient des informations supplémentaires sur la façon d'enregistrer les classes/instances à Jersey 2.
si vous utilisez jersey 2.x alors vous avez besoin de configuration différente dans web.xml en tant que classe de servlet est le changement. vous pouvez mettre à jour votre site web.xml avec la configuration suivante.
<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>
ajouter dans pom
<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>
c'est un problème d'éclipse, pas un problème De Jersey.
de cette classe de threadnotfoundexception: com.soleil.Jersey.le spi.conteneur.servlet.ServletContainer
cliquez avec le bouton droit de la souris sur les propriétés du projet eclipse -> Deployment Assembly -> Add -> Java Build Path Entries -> Grad Dependencies -> Finish.
donc Eclipse n'utilisait pas les dépendances de Gradle quand Apache commençait .
essayez ce qui suit :
org.glassfish.Jersey.servlet.ServletContainer
sur servlet-class
j'ai eu le même problème que vous bien que j'ai suivi un guide différent: http://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example /
la partie étrange est que, dans ce guide que j'ai utilisé, Je ne devrais pas avoir de problème avec la compatibilité entre les versions (1.x contre 2.x) Car en suivant le guide vous utilisez le jersey 1.8.x sur pom.xml
et dans le web.xml
vous vous référez à une classe ( com.sun.jersey.spi.container.servlet.ServletContainer
) comme dit avant de 1.x version. Donc, comme je peux le déduire, ça devrait marcher.
My guess est parce que j'utilise JDK 1.7 cette classe n'existe plus.
après, j'ai essayé de résoudre avec les réponses avant la mienne, n'a pas aidé, j'ai fait des changements sur le pom.xml
et sur le web.xml
l'erreur a changé en: java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
qui devrait exister!
suite à cette erreur, j'ai trouvé une "nouvelle" solution: http://marek.potociar.net/2013/06/13/jax-rs-2-0-and-jersey-2-0-released /
Avec Maven (archétypes), créer un maillot de projet, aime ceci:
mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.0
et ça a marché pour moi! :)
j'ai aussi été confronté à un problème similaire. Résolu le problème en passant par l'étape étape tutoriel à partir du lien ci-dessous.
http://examples.javacodegeeks.com/enterprise-java/rest/jersey/jersey-hello-world-example /
- la principale chose à noter est que les bibliothèques de jersey doivent être placées correctement dans le dossier TOMCAT WEB-INF/lib. Il est fait automatiquement par les paramètres D'éclipse mentionnés dans le lien ci-dessus. Il va créer un fichier WAR avec les fichiers JAR dépendants. Sinon, vous allez rencontrer des problèmes avec ClassNotFound Exception.
apache-tomcat-7.0.56-windows-x64\apache - tomcat-7.0.56\webapps\JerseyJSONExample\WEB-INF\lib
" 11/23/2014 12:06 AM 130,458 jersey-client-1.9.jar
11/23/2014 12:06 AM 458,739 jersey-core-1.9.jar
11/23/2014 12:06 AM 147,952 jersey-json-1.9.jar
11/23/2014 12:06 AM 713,089 jersey-server-1.9.pot" 4 Fichier (s) 1,450,238 octets
- le second tutoriel explique comment créer un service Web qui produit et consomme la sortie JSON.
http://examples.javacodegeeks.com/enterprise-java/rest/jersey/json-example-with-jersey-jackson /
les deux les liens donnent une bonne image de la façon dont les choses fonctionnent et économisent beaucoup de temps.
nous obtenons cette erreur à cause du problème de chemin de compilation. Vous devez ajouter " Server Runtime " les bibliothèques dans le Build Path.
"java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer"
s'il vous Plaît suivez les étapes ci-dessous pour résoudre classe ne trouve pas exception à la règle.
clic droit sur project --> Build Path --> Java Build Path --> Add Library --> Server Runtime --> Apache Tomcat v7.0
j'ai rencontré la même erreur aujourd'hui bien que J'utilisais Jersey 1.x, et j'avais les bons pots dans mon cours. Pour ceux qui souhaitent suivre le tutoriel vogella à la lettre, et utiliser le 1.x jars, vous devez ajouter les bibliothèques jersey au dossier WEB-INF/lib. Cela résoudra certainement le problème.
vous devez ajouter jersey-bundle-1.17.1.jar
à la liste du projet
<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>
vous devez remplacer dans votre web.xml:
<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>
pour ceci:
<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>
ici Jersey 2.x utilise org.glassfish.jersey packages au lieu de com.soleil.jersey (qui est utilisé par Jersey 1.x), et donc l'exception. Notez que aussi init-param à partir de com.soleil.jersey ne sera pas reconnu par Jersey 2.x Une fois que vous migrez vers JAX-RS 2.0 et Jersey 2.x
si à tout moment vous utilisez maven, votre pom.xml serait ceci:
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.X</version>
</dependency>
remplacer 2.X pour votre version desire, p.ex. 2.15
une solution simple est de vérifier si vous avez des dépendances ou des libs dans l'assemblage de déploiement d'eclipse.probablement, si vous utilisez tomcat , le serveur peut ne pas avoir identifié les libs que nous utilisons . dans ce cas précisez-le explicitement dans l'assemblage de déploiement.
pour revenir au problème original - java.lang.ClassNotFoundException: com.soleil.Jersey.le spi.conteneur.servlet.ServletContainer
comme il a été dit à juste titre ci-dessus, dans JAX 2.version x, la classe ServletContainer a été déplacée dans le paquet - org.glassfish.jersey.servlet.ServletContainer. La relative pot est jersey-conteneur de servlet-core.jar qui est livré dans le jaxrs-ri-2.2.1.zip
JAX RS peut être réalisé sans mvn en copiant manuellement tous les bocaux contenus dans le fichier zip jaxrs-ri-2.2.1.zip (j'ai utilisé cette version, fonctionnerait avec n'importe quel 2.X version) au dossier WEB-INF/lib. La copie de libs vers le bon dossier les rend disponibles à l'exécution.
Ceci est nécessaire si vous utilisez eclipse pour construire et déployer votre projet.
Dans le pom.fichier xml, nous devons ajouter
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.8</version>
</dependency>
la même erreur et gaspillé 2+ heures de débogage et d'essayer toutes les options. Je n'utilisais pas le Maven/POM, donc je ne pouvais pas tirer parti de cette solution donnée par quelques-uns.
enfin, la question suivante a été résolue: ajouter les bocaux directement dans le dossier tomcat/lib (pas WEB-INF\lib) et redémarrer le tomcat.
si quelqu'un essaye de construire une application hello world en utilisant Jersey, je pense que l'un des moyens les plus faciles est de suivre la documentation De Jersey.
https://jersey.github.io/download.html
si vous utilisez déjà maven, cela ne prendra que quelques minutes pour voir le résultat.
j'ai utilisé ci-dessous.
mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.26
cela dépend essentiellement de la version jersey que vous utilisez. Si vous utilisez Jersey ver.1.X. X vous devez ajouter
Maillot 1 utilise " com.soleil.jersey ", et Jersey 2 utilise org.glassfish . sur l'étiquette de classe servlet. En outre, notez que aussi init-param à partir de com.soleil.jersey ne sera pas reconnu par Jersey 2.
et ajouter tout le fichier jar dans le dossier WEB-INF lib