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.

75
demandé sur M-WaJeEh 2013-08-06 21:02:12

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.

141
répondu Michal Gajdos 2015-07-03 10:02:17

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>
28
répondu p27 2013-12-05 10:54:39

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>
22
répondu user1249655 2013-10-31 18:48:20

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 .

8
répondu Adi 2016-08-04 18:58:45

essayez ce qui suit :

org.glassfish.Jersey.servlet.ServletContainer

sur servlet-class

3
répondu Pichitron 2015-08-23 19:20:28

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

2
répondu Paulo Oliveira 2014-08-27 09:41:57

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.

2
répondu yogishaj 2014-11-22 19:49:16

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

1
répondu Sachin G N 2015-08-08 00:18:18

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.

0
répondu rickygrimes 2014-07-06 21:46:33

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>

0
répondu AhmadReza 2014-08-23 07:50:40

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

0
répondu Juan David Grisales Garzon 2015-01-21 22:31:07

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.

0
répondu shine 2015-09-15 12:06:00

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.

0
répondu Andy1625 2015-09-17 19:14:24

Dans le pom.fichier xml, nous devons ajouter

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.8</version>
</dependency>
0
répondu KARTHIKEYAN.A 2017-08-31 12:05:17

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.

0
répondu Velu 2017-12-13 00:24:45

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
0
répondu Chathuranga Jayamal 2017-12-19 02:26:04

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

0
répondu Arun 2018-01-05 07:56:02