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");
}
}
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>
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.
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 { ... }
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?
Cela signifie, qu'il n'a trouvé aucune classe pouvant être exécutée en tant que service Web REST jersey.
Vérifier:
com.Sun.jersey.config.property.packages
' est manquant dans votre fichier Web.xml. 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.@Path
?.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 ..
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>
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")
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é.
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.
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.
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.
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.
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 .
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é)
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.
J'ai dû ajouter une barre oblique à la fin de @path
@Path ("/admin/")
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.
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.
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
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.
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>
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
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?