J'essaie de créer une application simple Hello World pendant deux jours à l'aide du moteur d'applications Jersey + Google. Pour un projet AppEngine simple, j'ai suivi ces didacticiels et les deux fonctionnent parfaitement https://developers.google.com/appengine/docs/Java/gettingstarted/creatinghttps: // développeurs. google.com/appengine/docs/Java/webtoolsplatform
Mais maintenant, j'essaie d'ajouter Jersey et de suivre ce tutoriel http://www.vogella.com/articles/REST/article.html .
Mais le serveur continue à 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 de ici et j'ai ajouté tous les fichiers jar dans le dossier WEB-INF/lib
comme décrit dans le didacticiel. Et même après deux jours, rien ne fonctionne. J'ai effectué plusieurs recherches sur Google et, apparemment, les utilisateurs de Maven l'ont résolu, mais je n'utilise pas Maven, pas plus que celui qui a écrit ce didacticiel.
Juste pour vérifier si même com.Sun.jersey.spi.container.servlet.ServletContainer
existe dans Jersey jars
importé, j'ai essayé d'écrire ce nom pleinement qualifié en Java et laisser l'intellisense terminer les noms, mais je n'ai pas pu obtenir d'intellisense après com.Sun.je
. Ma dernière hypothèse est qu'il y a eu quelques paquetages. réarrangement dans la dernière version de Jersey et jersey
n'est plus dans com.Sun
. Je suis épuisé et j'apprécierais toute aide.
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écharger Jersey 1.17.1 à partir de ( ici ) devrait vous suffire.
Jersey 1 utilise com.Sun.jersey
et Jersey 2 utilise org.glassfish.jersey
, d'où l'exception.
Notez également que init-param
commençant par com.Sun.jersey
ne sera pas reconnu par Jersey 2.
Enregistrement de ressources et de fournisseurs dans Jersey 2 contient des informations supplémentaires sur la procédure d’enregistrement de classes/instances dans Jersey 2.
Si vous utilisez jersey 2.x, vous aurez besoin d'une configuration différente dans web.xml, car la classe de servlet est modifiée. vous pouvez mettre à jour votre fichier 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 ceci en 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 de configuration Eclipse, pas un problème de Jersey.
A partir de ce fil ClassNotFoundException: com.Sun.jersey.spi.container.servlet.ServletContainer
Cliquez avec le bouton droit de la souris sur vos propriétés de projet Eclipse -> Assemblage de déploiement -> Ajouter -> Entrées du chemin de construction Java -> Dépendances Gradle -> Terminer.
Eclipse n'utilisait donc pas les dépendances Gradle au démarrage d'Apache.
essaye ça :
org.glassfish.jersey.servlet.ServletContainer
sur la classe de servlet
J'ai également fait face à un problème similaire. Résolu le problème en parcourant le didacticiel étape par é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 00:06 AM 130,458 jersey-client-1.9.jar
23/11/2014 00:06 458 739 jersey-core-1.9.jar
23/11/2014 00:06 AM 147,952 jersey-json-1.9.jar
23/11/2014 00:06 713,089 jersey-server-1.9.jar " 4 Fichier (s) 1,450,238 octets
http://examples.javacodegeeks.com/enterprise-Java/rest/jersey/json-example-with-jersey-jackson/
Les deux liens donnent une bonne idée de la façon dont les choses fonctionnent et permettent de gagner beaucoup de temps.
J'ai eu le même problème que vous mais j'ai suivi un guide différent: http://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example/
Ce qui est étrange, c’est que, dans ce guide que j’ai utilisé, je n’ai aucun problème de compatibilité entre les versions (1.x par rapport à 2.x), car si vous suivez ce guide, vous utilisez le maillot 1.8.x sur pom.xml
et dans web.xml
vous faites référence. une classe (com.Sun.jersey.spi.container.servlet.ServletContainer
) comme dit auparavant de la version 1.x. Donc, comme je peux en déduire, cela devrait fonctionner.
Je suppose, c'est parce que j'utilise JDK 1.7 que cette classe n'existe plus.
Après, j'ai essayé de résoudre avec les réponses avant le mien, n'a pas aidé, j'ai apporté des modifications sur le pom.xml
et sur le web.xml
l'erreur est passée à: Java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
Ce qui devrait être exister!
À la suite de 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, aime ceci:
mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.0
Et ça a fonctionné pour moi! :)
Nous avons cette erreur à cause d'un problème de chemin de construction. Vous devez ajouter les bibliothèques " Server Runtime " au chemin de construction.
"Java.lang.ClassNotFoundException: com.Sun.jersey.spi.container.servlet.ServletContainer"
Veuillez suivre les étapes ci-dessous pour résoudre l’exception de classe non trouvée.
Faites un 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 alors que j'utilisais Jersey 1.x et que j'avais les bons pots dans mon classpath. Pour ceux qui souhaitent suivre le didacticiel vogella à la lettre et utiliser les fichiers 1.x, vous devez ajouter les bibliothèques de maillots au dossier WEB-INF/lib. Cela va certainement résoudre le problème.
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 même erreur et plus de 2 heures perdues à déboguer et à essayer toutes les options. Je n'utilisais pas le Maven/POM, je ne pouvais donc pas tirer parti de la solution proposée par quelques-uns.
Enfin, les éléments suivants l’ont résolu: Ajout des fichiers jar directement dans le dossier Tomcat/lib (NOT WEB-INF\lib) et redémarrage de Tomcat.
Si quelqu'un essaie de créer une application Hello World avec Jersey, je pense qu'une des manières les plus simples est de suivre la documentation de Jersey.
https://jersey.github.io/download.html
Si vous utilisez déjà Maven, le résultat ne prendra que quelques minutes.
J'ai utilisé ci-dessous.
mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.26
Revenons au problème initial - 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 pot correspondant est jersey-container-servlet-core.jar qui vient emballé dans le jaxrs-ri-2.2.1.Zip
JAX RS peut être travaillé sans mvn en copiant manuellement tous les fichiers JAR contenus dans le fichier Zip jaxrs-ri-2.2.1.Zip (j’ai utilisé cette version, fonctionnerait avec n’importe quelle version 2.x) vers WEB-INF dossier/lib. Copier les bibliothèques dans le bon dossier les rend disponibles au moment de l'exécution.
Cela est nécessaire si vous utilisez Eclipse pour générer et déployer votre projet.
Cela dépend essentiellement de la version du maillot que vous utilisez. Si vous utilisez Jersey ver.1.X.X, vous devez ajouter
Jersey 1 utilise " com.Sun.jersey ", et Jersey 2 utilise org.glassfish . sur la balise de classe servlet. Notez également que même 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
Dans le fichier pom.xml, nous devons ajouter
<dependency>
<groupId>com.Sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.8</version>
</dependency>
Une solution simple consiste à vérifier si vous avez des dépendances ou des bibliothèques dans Assembly de déploiement d'Eclipse. 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 Assembly de déploiement.
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 ça:
<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>
jersey 2.x utilise les packages org.glassfish.jersey à la place de com.Sun.jersey (utilisé par Jersey 1.x) et constitue donc une exception. Notez que même 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, à un moment quelconque, vous utilisez maven, votre fichier pom.xml serait le suivant:
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.X</version>
</dependency>
remplacez 2.X pour la version de votre choix, par exemple 2,15