J'essaie de créer une simple application Hello World pendant deux jours à l'aide du moteur d'application Jersey + Google. Pour un projet AppEngine simple, j'ai suivi ces didacticiels et les deux fonctionnent très bien https://developers.google.com/appengine/docs/java/gettingstarted/creating https://developers.google.com/appengine/docs/java/webtoolsplatform
Mais maintenant, j'essaye d'ajouter Jersey et de suivre ce tutoriel http://www.vogella.com/articles/REST/article.html .
Mais le serveur continue de me donner
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.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
partir d' ici et j'ai ajouté tous les fichiers jar dans le WEB-INF/lib
dossier comme décrit dans le didacticiel. 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 manière ou d'une autre, mais je n'utilise pas Maven non plus que le type qui a écrit ce tutoriel.
Juste pour vérifier s'il com.sun.jersey.spi.container.servlet.ServletContainer
existe même dans importé, Jersey jars
j'ai essayé d'écrire ce nom complet en Java et de laisser l'intellisense terminer les noms, mais je n'ai pas pu obtenir d'intellisense après, com.sun.je
donc ma dernière hypothèse est qu'il y a eu un réarrangement de paquet dans la dernière version de Jersey et jersey
n'est plus à l'intérieur com.sun
. Je suis épuisé et j'apprécierais toute sorte d'aide.
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 à partir de ( ici ), devrait vous suffire.
Jersey 1 utilise
com.sun.jersey
, et Jersey 2 utiliseorg.glassfish.jersey
donc l'exception.Notez également que
init-param
commencer parcom.sun.jersey
ne sera pas reconnu par Jersey 2.Éditer
Enregistrer des ressources et des fournisseurs dans Jersey 2 contient des informations supplémentaires sur la façon d'enregistrer des classes / instances dans Jersey 2.
la source
Si vous utilisez jersey 2.x, vous avez besoin d'une configuration différente dans web.xml car la classe de servlet est modifiée. vous pouvez mettre à jour votre web.xml avec la configuration suivante.
la source
Ajouter ceci dans pom
la source
C'est un problème de configuration d'éclipse, pas un problème de Jersey.
À partir de ce thread ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
Cliquez avec le bouton droit sur Propriétés de votre projet eclipse -> Assemblage de déploiement -> Ajouter -> Entrées du chemin de construction Java -> Dépendances Gradle -> Terminer.
Donc, Eclipse n'utilisait pas les dépendances Gradle au démarrage d'Apache.
la source
essaye ça :
sur la classe servlet
la source
J'ai eu le même problème que vous même si 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 avoir aucun problème de compatibilité entre les versions (1.x contre 2.x) car en suivant le guide, vous utilisez le maillot 1.8.x sur
pom.xml
et dans le auquelweb.xml
vous vous référez une classe (com.sun.jersey.spi.container.servlet.ServletContainer
) comme dit précédemment de la version 1.x. Donc, comme je peux en déduire, cela devrait fonctionner.Je suppose que 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 les miennes, je n'ai pas aidé, j'ai apporté des modifications sur
pom.xml
et surweb.xml
l'erreur a changé en:java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
Ce 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), générez un projet de maillot, comme ceci:
Et cela a fonctionné pour moi! :)
la source
J'ai également rencontré un problème similaire. Résolution du problème en suivant le didacticiel de l'étape étape à partir du lien ci-dessous.
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 00h06 130458 jersey-client-1.9.jar
23/11/2014 00:06 458739 jersey-core-1.9.jar
23/11/2014 00h06 147,952 jersey-json-1.9.jar
23/11/2014 00:06 713 089 jersey-server-1.9.jar "4 fichier (s) 1450238 octets
http://examples.javacodegeeks.com/enterprise-java/rest/jersey/json-example-with-jersey-jackson/
Les deux liens ont donné une bonne idée de la façon dont les choses fonctionnent et permettent de gagner beaucoup de temps.
la source
Nous obtenons cette erreur en raison d'un problème de chemin de compilation. Vous devez ajouter des bibliothèques " Server Runtime " dans le chemin de construction.
Veuillez suivre les étapes ci-dessous pour résoudre l'exception de classe introuvable.
Faites un clic droit sur
project --> Build Path --> Java Build Path --> Add Library --> Server Runtime --> Apache Tomcat v7.0
la source
J'ai rencontré la même erreur aujourd'hui alors que j'utilisais Jersey 1.x et que j'avais les bons fichiers jar dans mon classpath. Pour ceux qui aimeraient suivre le tutoriel vogella à la lettre et utiliser les jar 1.x, vous devrez ajouter les bibliothèques de jersey au dossier WEB-INF / lib. Cela résoudra certainement le problème.
la source
vous devez ajouter
jersey-bundle-1.17.1.jar
à la bibliothèque 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>
la source
Vous devez remplacer dans votre web.xml:
pour ça:
ceci est Jersey 2.x utilise les packages org.glassfish.jersey au lieu de com.sun.jersey (qui est utilisé par Jersey 1.x) et donc l'exception. Notez que le paramètre init-param commençant par com.sun.jersey ne sera pas reconnu par Jersey 2.x une fois que vous aurez migré vers JAX-RS 2.0 et Jersey 2.x
si à tout moment vous utilisez maven, votre pom.xml serait ceci:
remplacez 2.X par la version souhaitée, par exemple 2.15
la source
Une solution simple est de vérifier si vous avez des dépendances ou des bibliothèques dans l'assemblage de déploiement d'eclipse. Probablement si vous utilisez tomcat, le serveur n'a peut-être pas identifié les bibliothèques que nous utilisons. dans ce cas, spécifiez-le explicitement dans l'assembly de déploiement.
la source
Revenant au problème d'origine - java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
Comme indiqué à juste titre ci-dessus, dans la version JAX 2.x, la classe ServletContainer a été déplacée vers le package - org.glassfish.jersey.servlet.ServletContainer. Le fichier jar associé est jersey-container-servlet-core.jar qui est fourni dans le fichier jaxrs-ri-2.2.1.zip
JAX RS peut être élaboré sans mvn en copiant manuellement tous les jars contenus dans le fichier zip jaxrs-ri-2.2.1.zip (j'ai utilisé cette version, fonctionnerait avec n'importe quelle version 2.x) dans le dossier WEB-INF / lib. La copie des bibliothèques dans le bon dossier les rend disponibles au moment de l'exécution.
Cela est nécessaire si vous utilisez eclipse pour créer et déployer votre projet.
la source
Dans le fichier pom.xml, nous devons ajouter
la source
La même erreur et gaspillé plus de 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.
Finalement, ce qui suit l'a résolu: Ajout des jars directement dans le dossier tomcat / lib (PAS WEB-INF \ lib) et redémarrage du tomcat.
la source
Si quelqu'un essaie de créer une application hello world en utilisant Jersey, je pense que l'un des moyens les plus simples est de suivre la documentation de Jersey.
https://jersey.github.io/download.html
Si vous utilisez déjà maven, cela ne prendrait que quelques minutes pour voir le résultat.
J'ai utilisé ci-dessous.
la source
Cela dépend essentiellement de la version du maillot que vous utilisez. Si vous utilisez Jersey ver.1.XX, vous devez ajouter
Jersey 1 utilise " com.sun.jersey " et Jersey 2 utilise org.glassfish . sur la balise de classe de servlet. Notez également que le paramètre init-param commençant par com.sun.jersey ne sera pas reconnu par Jersey 2.
Et ajoutez tout le fichier jar dans le dossier lib WEB-INF
la source