web-dev-qa-db-fra.com

L'instance ResourceConfig ne contient aucune classe de ressources racine

Qu'est-ce qui ne va pas ici?

The ResourceConfig instance does not contain any root resource classes.
Dec 10, 2010 10:21:24 AM com.Sun.jersey.spi.spring.container.servlet.SpringServlet initiate
SEVERE: Exception occurred when intialization
com.Sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.
        at com.Sun.jersey.server.impl.application.RootResourceUriRules.<init>(RootResourceUriRules.Java:103)
        at com.Sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.Java:1182)
        at com.Sun.jersey.server.impl.application.WebApplicationImpl.access$600(WebApplicationImpl.Java:161)
        at com.Sun.jersey.server.impl.application.WebApplicationImpl$12.f(WebApplicationImpl.Java:698)
        at com.Sun.jersey.server.impl.application.WebApplicationImpl$12.f(WebApplicationImpl.Java:695)
        at com.Sun.jersey.spi.inject.Errors.processWithErrors(Errors.Java:197)
        at com.Sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.Java:695)
        at com.Sun.jersey.spi.spring.container.servlet.SpringServlet.initiate(SpringServlet.Java:117)

Filtre:

<filter>
    <filter-name>JerseyFilter</filter-name>
    <filter-class>com.Sun.jersey.spi.spring.container.servlet.SpringServlet</filter-class>

    <init-param>
        <param-name>com.Sun.jersey.config.feature.Redirect</param-name>
        <param-value>true</param-value>
    </init-param>

    <init-param>
        <param-name>com.Sun.jersey.config.property.JSPTemplatesBasePath</param-name>
        <param-value>/views/</param-value>
    </init-param>

    <init-param>
        <param-name>com.Sun.jersey.config.property.WebPageContentRegex</param-name>
        <param-value>/(images|css|jsp)/.*</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>JerseyFilter</filter-name>
    <url-pattern>/myresource/*</url-pattern>
</filter-mapping>

Code:

@Path ("/admin")
public class AdminUiResource {

  @GET
  @Produces ("text/html")
  @Path ("/singup")
  public Viewable getSignUp () {
    return new Viewable("/public/signup", "Test");
  }
}
76
cmani

En gros, je l'ai corrigé comme ci-dessous et tout a bien fonctionné.

<servlet>
    <servlet-name >MyWebApplication</servlet-name>
    <servlet-class>com.Sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.Sun.jersey.config.feature.Redirect</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>com.Sun.jersey.config.property.JSPTemplatesBasePath</param-name>
        <param-value>/views/</param-value>
    </init-param>
    <init-param>
        <param-name>com.Sun.jersey.config.property.WebPageContentRegex</param-name>
        <param-value>/(images|css|jsp)/.*</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>MyWebApplication</servlet-name>
    <url-pattern>/myapp/*</url-pattern>
</servlet-mapping>
9
cmani

Avez-vous essayé d'ajouter 

<init-param>
  <param-name>com.Sun.jersey.config.property.packages</param-name>
  <param-value>my.package.name</param-value>
</init-param>

à votre définition SpringServlet? Évidemment, remplacez my.package.name par le paquet dans lequel se trouve AdminUiResource et assurez-vous qu'il se trouve dans le chemin de classe.

79
Mike

Je suis nouveau à Jersey - j'ai eu le même problème, mais quand j'ai enlevé le "/" et juste utilisé le @path ("admin") cela a fonctionné. 

@Path("admin")
public class AdminUiResource { ... }
30
Anver Sadhat

VOUS DEVEZ AJOUTER LE NOM DE VOTRE FORFAIT AT 

<init-param>
  <param-name>com.Sun.jersey.config.property.packages</param-name>
  <param-value>your.package.name</param-value>
</init-param>

AUSSI UNE SILLY Chose que j'ai notifié,
J'ai besoin d'actualiser mon projet après MAVEN BUILD sinon, il me montre la même erreur.
S'il vous plaît commenter Si vous connaissez la raison pour laquelle nous avons besoin d'actualiser le projet?

27
VdeX

Cela signifie, qu'il n'a trouvé aucune classe pouvant être exécutée en tant que service Web REST jersey.

Vérifier: 

  • Si 'com.Sun.jersey.config.property.packages' est manquant dans votre fichier Web.xml. 
  • Indique si la valeur de 'com.Sun.jersey.config.property.packages' Param est manquante ou non valide (le package mentionné n'existe pas). Il devrait s'agir d'un package dans lequel vous avez mis vos classes POJO en tant que services maillot.
  • Existe-t-il au moins une classe POJO comportant une méthode annotée avec l'attribut @Path?.
26
Pawan

Votre paquet de ressources doit contenir au moins un pojo annoté avec @Path ou avoir au moins une méthode annotée avec @Path ou un indicateur de méthode de requête, tel que @GET, @PUT, @POST ou @DELETE. Les méthodes de ressources sont les méthodes d'une classe de ressources annotée avec un indicateur de méthode de requête. Cela a résolu mon problème ..

12
hakish

J'ai rencontré ce problème avec JBOSS EAP 6.1. J'ai pu déployer mon code via Eclipse sur le serveur JBOSS, mais une fois que j'ai tenté de déployer le fichier sous forme de fichier WAR sur JBOSS, j'ai commencé à avoir cette erreur. 

La solution consistait à configurer le fichier web.xml pour qu'il fonctionne correctement avec JBOSS en permettant aux deux de fonctionner ensemble.

Les deux lignes suivantes ont été commentées dans web.xml pour permettre à JBOSS de faire ses propres configurations.

<!--  
    <init-param>
    <param-name>com.Sun.jersey.config.property.packages</param-name>
    <param-value>com.your.package</param-value>
</init-param> -->

Et puis ajoutez les paramètres de contexte suivants après 

<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan.resources</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan.providers</param-name>
    <param-value>false</param-value>
</context-param>
10
Antman06

Je reçois cette exception à cause d'un ResourseConfig manquant dans Web.xml.

Ajouter:

<init-param>
    <param-name>com.Sun.jersey.config.property.packages</param-name>
    <param-value>/* Name of Package where your service class exists */</param-value>
</init-param>

Classe de service signifie: classe qui contient des services tels que: @Path("/orders")

8
TechSunil

J'ai eu le même problème en essayant d'exécuter l'application Web à partir d'un projet Eclipse. Dès que j'ai copié les fichiers .class dans /WEB-INF/classes cela a parfaitement fonctionné.

7
Rodrigo Asensio

J'ai eu le même problème, en testant de nombreux exemples et en essayant toutes les solutions possibles. Ce qui a finalement fonctionné pour moi, c’est que j’ai omis d’ajouter @Path("") à la ligne de classe.

6
Holstadius

Même problème - web.xml ressemblait à ceci:

<servlet>
    <servlet-name>JerseyServlet</servlet-name>
    <servlet-class>com.Sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.mystuff.web.JerseyApplication</param-value>
    </init-param>
...

La fourniture d'une application personnalisée annule toute détection automatique de classes configurée par XML. Vous devez implémenter les bonnes méthodes pour écrire votre propre code afin de connecter les classes. Voir les javadocs.

4
Dustin Getz

Une autre cause possible de cette erreur est que vous avez oublié d’ajouter les bibliothèques qui se trouvent déjà dans le dossier /WEBINF/lib au chemin de construction (par exemple, lors de l’importation d’un fichier .war- et sans vérification des bibliothèques lorsque l’assistant vous le demande). Vient de m'arriver.

3
bmurauer

Avait le même problème et a découvert que c'était un problème avec la façon dont j'ai déployé mon code source. Comme le message d'erreur le dit: "...does not contain any root resource classes". Donc, il n'a pas pu trouver de classe de ressources dans le paquet configuré. Je viens de déployer les classes de manière erronée - c'est pourquoi cela ne l'a pas compris.

J'ai oublié de déployer mes fichiers de classe dans le répertoire/WEB-INF/classes du fichier WAR. Au début, je l'avais directement à la racine du fichier WAR. Ainsi, lorsqu'il recherchait des classes de ressources, il ne les trouvait pas - car elles existaient dans un autre (mauvais) emplacement.

3
NS du Toit

Cela m'est arrivé lorsque j'ai déployé mon fichier principal.jar, sans vérifier les ajouter les entrées de répertoire dans le export jar menu dans Eclipse .

3
serj

Une autre chose à vérifier est une combinaison d'entrées précédentes

Vous pouvez avoir dans votre fichier web.xml ceci:

<init-param>
        <param-name>com.Sun.jersey.config.property.packages</param-name>
        <param-value>com.acme.rest</param-value>
</init-param>

et vous pouvez avoir

<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan.providers</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan.resources</param-name>
    <param-value>false</param-value>
</context-param>

mais vous ne pouvez pas avoir les deux ou vous obtenez ce genre d'erreur. La solution dans ce cas serait de commenter l'un ou l'autre (probablement le premier extrait de code serait commenté)

2
demongolem

Ok ... Pour moi, je ne fais que très bien assigner la "classe de servlet" à com.sum.jersey.spi.container.servlet.ServletContainer, j’utilise IDE (Eclipse Mars)

<servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>com.Sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/frontend/*</url-pattern>
    </servlet-mapping>

mais pour une raison quelconque, j'ai dû redémarrer mon ordinateur pour pouvoir travailler dans mon hôte local. Si toujours pas travailler? Vous devez ajouter dans votre web.xml ce code entre les balises "servlet". 

<init-param>
  <param-name>com.Sun.jersey.config.property.packages</param-name>
  <param-value>the.package.name</param-value>
</init-param>

"the.package.name" est le nom du paquet dans lequel vous avez vos classes. Si vous utilisez IDE, actualisez le projet et exécutez-le à nouveau dans Tomcat. toujours pas travailler? redémarrez votre ordinateur et va travailler.

2
user3945851

J'ai dû ajouter une barre oblique à la fin de @path

@Path ("/admin/") 
2
MobileMon

Eh bien, il est un peu tard pour répondre. J'ai rencontré le même problème et mes recherches sur Google ont été vaines. Cependant, j'ai réussi à trouver quel était le problème. Il y a peut-être plusieurs raisons pour obtenir cette erreur, mais j'ai eu l'erreur en raison de ce qui suit et je voulais la partager avec mes collègues développeurs.

  1. J'ai déjà utilisé Jersey 1.3 et j'obtenais cette erreur. Mais lorsque j'ai mis à niveau les pots vers la dernière version de Jersey, ce problème a été résolu.
  2. Cette erreur s'est également produite lorsque j'ai essayé de déployer mon service dans JBoss en créant un fichier war. J'ai commis l'erreur d'inclure les fichiers Java dans le fichier .war au lieu des classes Java.
2
Nikhil

J'ai aussi ce genre d'erreur, veuillez vous occuper des configurations en xml.

J'ai écrit com.Sun.jersey.comfig.property.packages

Au lieu de com.Sun.jersey.config.property.packages

Après correction, ça marche.

1
Ravi Thapa

ce problème est dû au fait que jersey ne trouve pas de paquet de dépendance pour votre repos service déclaré

vérifiez la distribution de votre paquet de projet et assurez-vous qu'elle est égale à votre valeur param web.xml

1
Jose Luis Garcia

oui, l'ajout du paramètre init pour com.Sun.jersey.config.property.packages a résolu ce problème pour moi.

fusionnait un service de repos de maillot dans une application de printemps basée sur Maven et a obtenu cette erreur. 

1
Harinath

Dans mon cas, j'ai ajouté les fichiers jar deux fois dans le chemin de génération après l'importation de war . Cela fonctionnait correctement après la suppression des fichiers jar supplémentaires qui montraient des pages d'erreur du descripteur de déploiement d'erreur

ajouter

<init-param>
          <param-name>com.Sun.jersey.config.property.packages</param-name>
          <param-value>service.package.name</param-value>
</init-param>
0
Hema

Probablement trop tard, mais voici comment j'ai résolu cette erreur.

Si cette solution ne fonctionne pas, 

<init-param>
    <param-name>com.Sun.jersey.config.property.packages</param-name>
    <param-value>/* Name of Package where your service class exists */</param-value>
</init-param>

Dans Eclipse: 

RightClick sur votre projet ou sélectionnez Projet et appuyez sur Alt + Entrée Sur le côté gauche de la fenêtre ouverte, recherchez Chemin de construction Java

Sélectionnez Bibliothèques dans le panneau d'onglets de droite: Si quelque chose est corrompu ou porte une croix sur le dessus des bocaux, retirez-le et ajoutez-le à nouveau. 

Appliquer et fermer

Reconstruisez votre projet

0
Sufiyan Ansari

Nous avons également rencontré ce problème, deux fois pour des raisons différentes. La première fois que j'ai oublié d'inclure

<init-param>
<param-name>com.Sun.jersey.config.property.packages</param-name>
<param-value>my.package.name</param-value>
</init-param>

comme décrit dans les commentaires précédents, et une fois que j'ai fait cela, cela a commencé à fonctionner.

Pourtant ... un autre jour, j'ai démarré Eclipse, espérant continuer là où je l'avais laissée, et au lieu de laisser mon programme fonctionner, il a à nouveau affiché la même erreur. J'ai commencé à vérifier si j'avais accidentellement apporté des modifications et sauvegardé le fichier corrompu, mais je ne pouvais trouver aucune erreur de ce type et le fichier ressemblait exactement aux exemples que j'ai, tous en ordre. Comme cela fonctionnait la veille, après quelques recherches initiales, je me suis dit: bon, c’est peut-être un problème d’Eclipse, de Tomcat ou quelque chose du genre, alors essayons simplement d’apporter des changements et de voir s’il réagit. J'ai donc créé un espace + arrière dans le fichier web.xml, juste pour tromper Eclipse que le fichier a été modifié, puis je l’ai sauvegardé. La prochaine étape a été de redémarrer le serveur Tomcat (à partir de Eclipse IDE) et le tour est joué, cela fonctionne à nouveau!

Peut-être que quelqu'un avec une expérience plus large pourrait expliquer ce que le problème était vraiment derrière tout cela? 

0
Gishas