86 votes

java.lang.ClassNotFoundException: com.soleil.jersey.le spi.le conteneur.servlet.ServletContainer

Je suis en train de construire un simple bonjour tout le monde, la demande pour ces deux jours à l'aide de Jersey + Google app engine. Pour la simple AppEngine projet, 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, je suis en train d'ajouter Jersey et à la suite de ce tutoriel http://www.vogella.com/articles/REST/article.html.

Mais le serveur continue à me donner

java.lang.ClassNotFoundException: com.soleil.jersey.le spi.le conteneur.servlet.ServletContainer

quand j'ai ajouter 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 d' ici et d'avoir ajouté tous les fichiers jar en WEB-INF/lib le dossier 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 sont à l'aide de Maven ont résolu en quelque sorte mais je ne suis pas à l'aide de Maven, ni le mec qui a écrit ce tutoriel.

Juste pour vérifier si même com.sun.jersey.spi.container.servlet.ServletContainer existe dans importés Jersey jars j'ai essayé de l'écrire ce nom pleinement qualifié de Java et de laisser l'intellisense terminer les noms, mais je ne pouvais pas obtenir tout intellisense après com.sun.je ma dernière conjecture est qu'il y a eu quelques package de réarrangement dans le dernier Maillot de construire et d' jersey n'est plus à l'intérieur d' com.sun. Je suis épuisé et j'aimerais avoir de l'aide.

156voto

Michal Gajdos Points 4824

Maillot 2.x (que vous avez téléchargé) est un RI de JAX-RS 2.0. Le tutoriel que vous êtes en se référant à des usages Jersey 1.x. Veuillez voir le bas de la page que vous avez téléchargé Jersey 2.x, il y a un lien vers Jersey 1.17.1 bundle pot (ici) qui devrait être suffisant pour vous.

Le problème auquel vous êtes confronté, c'est que Jersey 2.x utilise org.glassfish.jersey de paquets au lieu d' com.sun.jersey (qui est utilisé par Jersey 1.x), et donc l'exception. Notez qu' init-param commençant par com.sun.jersey ne sera pas reconnu par Jersey 2.x une fois la migration vers de JAX-RS 2.0 et Jersey 2.x.

Modifier

L'enregistrement de Ressources et de Fournisseurs de en Maillot 2 contient des informations supplémentaires sur la façon d'enregistrer les classes/instances en Jersey 2.

34voto

p27 Points 700

Si vous utilisez jersey 2.x alors vous avez besoin d'une configuration différente dans web.xml en tant que classe de servlet est le changement. vous pouvez mettre à jour votre 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>

22voto

user1249655 Points 111

Ajouter ceci dans le 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>

3voto

Pichitron Points 11

essayez ceci :

org.glassfish.jersey.servlet.ServletContainer

sur servlet-class

2voto

Paulo Oliveira Points 395

J'ai eu le même problème que vous mais j'ai suivi un autre guide: http://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example/

La partie étrange, c'est que, dans ce guide, je l'ai utilisé, je ne devrait avoir aucun problème de compatibilité entre les versions (1.x-contre 2.x) parce que suivant le guide, vous utilisez le maillot 1.8.x pom.xmlet de la web.xmlvous référer à une classe (com.sun.jersey.spi.container.servlet.ServletContainer) comme l'a dit avant de 1.x version. De sorte que je peux déduire cela devrait fonctionner.

Ma conjecture est que je suis à l'aide du JDK 1.7 cette classe n'existe plus.


Après, j'ai essayé de régler avec les réponses avant le mien, n'a pas aidé, j'ai fait des changements sur l' pom.xmlet sur l' web.xml l'erreur a changé: java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

Qui est censé devrait être existe pas!

Comme résultat 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), créer un maillot de projet, aime ceci:

mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.0

Et il a travaillé pour moi! :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X