Die ResourceConfig-Instanz enthält keine Stammressourcenklassen

79

Was läuft hier falsch?

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)

Filter:

<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");
  }
}
cmani
quelle
Ist Sie "/singup"statt "/signup"irgendeine Wirkung hier zu haben?
Ken Williams
Es muss ein Servlet sein, kein Filter
Emre Türkiş
Überprüfen Sie, ob Ihr Paketname und andere Parameter korrekt sind.
Gaurav

Antworten:

82

Haben Sie versucht, hinzuzufügen

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

zu Ihrer SpringServlet-Definition? Ersetzen Sie my.package.name offensichtlich durch das Paket, in dem sich AdminUiResource befindet, und stellen Sie sicher, dass es sich im Klassenpfad befindet.

Mike
quelle
3
Für Benutzer, die Spring nicht verwenden: Sie müssen dies init-paramdem com.sun.jersey.spi.container.servlet.ServletContainerServlet hinzufügen .
zb226
33

Ich bin neu in Jersey - ich hatte das gleiche Problem, aber als ich das "/" entfernte und nur den @path ("admin") verwendete, funktionierte es.

@Path("admin")
public class AdminUiResource { ... }
Anver Sadhat
quelle
Ich benutze Spring JAX-RS, Jersey. Diese Lösung funktioniert gut für mich.
So
30

Sie müssen Ihren Paketnamen unter hinzufügen

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

AUCH EINE DUMME SACHE, DIE ICH BEKANNT HABE,
ich muss mein Projekt nach MAVEN BUILD aktualisieren, sonst zeigt es mir den gleichen Fehler.
Bitte kommentieren Wenn Sie wissen, warum wir das Projekt aktualisieren müssen?

VdeX
quelle
2
Du rockst! Es hat richtig funktioniert, wenn ich mein Projekt nach der Maven-Installation aktualisiere! Vielen Dank. :)
Mahan
2
@Tmp danke, das ist wirklich komisch. Nach dem Auffrischen funktioniert es einwandfrei. Plus eins für Sie Hack
Arun
28

Dies bedeutet, dass keine Klasse gefunden werden konnte, die als Jersey RESTful-Webdienst ausgeführt werden kann.

Prüfen:

  • Ob ' com.sun.jersey.config.property.packages' in Ihrer web.xml fehlt.
  • Ob der Wert für ' com.sun.jersey.config.property.packages' param fehlt oder ungültig ist (das erwähnte Paket existiert nicht). Es sollte ein Paket sein, in dem Sie Ihre POJO-Klassen platziert haben, die als Trikotdienste ausgeführt werden.
  • Gibt es mindestens eine POJO-Klasse, deren Methode mit einem @PathAttribut versehen ist ?
Pawan
quelle
Aus irgendeinem Grund hatte ich diese Eigenschaft mit dem Namen jersey.config.server.provider.packages und sie funktionierte unter Glassfish. Nach dem Umbenennen funktioniert es auch in Jetty.
Odysseus
3
Ein paar Zeilen in meiner Konfigurationsdatei verwiesen auf ein leeres Verzeichnis, das diesen Fehler verursachte. <servlet> <servlet-name>Jersey Web Services</servlet-name> <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> <!-- <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> -------><param-value>package.without.any.webservices</param-value> </init-param> --> <load-on-startup>1</load-on-startup> </servlet>
Nielsvh
12

Ihre Ressource Paket sollte mindestens eine pojo enthalten , die mit entweder kommentierte @Pathoder hat mindestens ein Verfahren mit Anmerkungen versehen @Pathoder einer Anfrage Methodendesignator, wie @GET, @PUT, @POST, oder @DELETE. Ressourcenmethoden sind Methoden einer Ressourcenklasse, die mit einem Anforderungsmethodenbezeichner versehen sind. Dies löste mein Problem ...

hakisch
quelle
11

Ich bin auf dieses Problem mit JBOSS EAP 6.1 gestoßen. Ich konnte meinen Code über Eclipse auf dem JBOSS-Server bereitstellen, aber als ich versuchte, die Datei als WAR-Datei für JBOSS bereitzustellen, wurde dieser Fehler angezeigt.

Die Lösung bestand darin, die Datei web.xml so zu konfigurieren, dass sie ordnungsgemäß mit JBOSS zusammenarbeitet, indem beide zusammenarbeiten.

Die folgenden zwei Zeilen wurden in web.xml auskommentiert, damit JBOSS seine eigenen Konfigurationen vornehmen kann

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

Fügen Sie anschließend die folgenden Kontextparameter hinzu

<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>
Antman06
quelle
3
Dieser Vorschlag hat bei Wildfly 8.1 für mich funktioniert. Musste den <context-param/>Abschnitt allerdings nicht hinzufügen . Musste nur den <param-name>com.sun.jersey.config.property.packages</param-name> <init-param/>Abschnitt entfernen .
Donovan Müller
3
Auch für mich. Nur kommentieren / entfernen Sie das <init-param>Problem, das in Wildly 8.2.0 behoben wurde. Ich hatte jedoch andere Probleme, so dass die App, die ich bereitstellte, nicht mit Jersey on Wildly ausgeführt werden konnte. Jersey (von GlassFish verwendet) und RestEasy (von Wildfly verwendet) haben unterschiedliche Konfigurationen.
Lantrix
2
Ich hatte mehrere Stunden lang Probleme. Das hat mir wirklich geholfen!
Blaa
10

Grundsätzlich habe ich es wie unten korrigiert und alles hat gut funktioniert.

<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>
cmani
quelle
9

Ich erhalte diese Ausnahme aufgrund einer fehlenden ResourseConfig in Web.xml.

Hinzufügen:

<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>

Serviceklasse bedeutet: Klasse, die Services enthält wie: @Path("/orders")

TechSunil
quelle
7

Ich hatte das gleiche Problem beim Versuch, die Webanwendung von einem Eclipse-Projekt aus auszuführen. Sobald ich die .class-Dateien kopiert habe, hat /WEB-INF/classeses perfekt funktioniert.

Rodrigo Asensio
quelle
Ja, Sie haben Recht ... Aufgrund eines Fehlers in meinem Java-Code werden Klassendateien nicht ordnungsgemäß generiert. Daher ist der obige Fehler bei mir aufgetreten. Diese Java-Fehler wurden behoben, der Code wurde bereinigt und es wurden neue Klassen generiert. Nach der Generierung der Klassendatei wurde der obige Fehler für mich behoben. Vielen Dank, dass Sie Rodrigo Asensio ..
Sie müssen es also so einrichten, dass die erstellten .class-Dateien dorthin gehen? Das ist seltsam, dass Eclipse oder etwas es nicht automatisch macht
Dukeatcoding
6

Ich hatte das gleiche Problem, testete eine Reihe verschiedener Beispiele und probierte alle möglichen Lösungen aus. Was es schließlich für mich zum Laufen brachte, war, als ich ein @Path("")Over-the-Class-Line hinzufügte , das hatte ich weggelassen.

Holstadius
quelle
5

Hatte das gleiche Problem und fand heraus, dass es ein Problem mit der Art und Weise war, wie ich meinen Quellcode bereitstellte. Wie die Fehlermeldung sagt : "...does not contain any root resource classes". Daher konnten im konfigurierten Paket keine Ressourcenklassen gefunden werden. Ich habe die Klassen nur falsch eingesetzt - deshalb hat es sie nicht aufgegriffen.

Ich habe vergessen, meine Klassendateien im Verzeichnis / WEB-INF / classes der WAR bereitzustellen - anfangs hatte ich sie nur direkt im Stammverzeichnis der WAR-Datei. Bei der Suche nach Ressourcenklassen wurden diese nicht gefunden, da sie an einem anderen (falschen) Ort vorhanden waren.

NS du Toit
quelle
4

Gleiches Problem - web.xml sah folgendermaßen aus:

<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>
...

Das Bereitstellen einer benutzerdefinierten Anwendung überschreibt jede XML-konfigurierte automatische Erkennung von Klassen. Sie müssen die richtigen Methoden implementieren, um Ihren eigenen Code zu schreiben und die Klassen zu verkabeln. Siehe die Javadocs.

Dustin Getz
quelle
3

Eine weitere mögliche Ursache für diesen Fehler ist, dass Sie vergessen haben, die bereits im /WEBINF/libOrdner enthaltenen Bibliotheken zum Erstellungspfad hinzuzufügen (z. B. beim Importieren einer .war-Datei und nicht beim Überprüfen der Bibliotheken, wenn Sie im Assistenten dazu aufgefordert werden). Ist mir gerade passiert.

bmurauer
quelle
3

Es ist mir passiert, als ich meine main.jar bereitgestellt habe, ohne das Kontrollkästchen Verzeichniseinträge hinzufügen im Menü export export jar in Eclipse zu aktivieren .

serj
quelle
2

Nun, es ist etwas spät zu antworten. Ich hatte das gleiche Problem und meine Google-Suche war vergebens. Es gelang mir jedoch herauszufinden, wo das Problem lag. Es kann viele Gründe geben, diesen Fehler zu erhalten, aber ich habe den Fehler aus folgenden Gründen erhalten und wollte ihn mit meinen Mitentwicklern teilen.

  1. Ich habe zuvor Jersey 1.3 verwendet und diesen Fehler erhalten. Als ich die Gläser auf die neueste Version von Jersey aufrüstete, wurde dieses Problem behoben.
  2. Ein anderer Fall, in dem ich diesen Fehler bekam, war, als ich versuchte, meinen Dienst durch Erstellen einer Kriegsdatei in JBoss bereitzustellen. Ich habe den Fehler gemacht, die Java-Dateien anstelle von Java-Klassen in die .war-Datei aufzunehmen.
Nikhil
quelle
2

Ich musste am Ende von @path einen abschließenden Schrägstrich einfügen

@Path ("/admin/") 
MobileMon
quelle
2

Ok ... Für mich funktioniert es gut, nur die "Servlet-Klasse" com.sum.jersey.spi.container.servlet.ServletContainer zuzuweisen. Ich verwende 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>

Aus irgendeinem Grund musste ich meinen Computer neu starten, um in meinem lokalen Host arbeiten zu können. Wenn immer noch nicht funktioniert? Sie müssen diesen Code in Ihrer web.xml zwischen dem "Servlet" -Tag hinzufügen.

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

"the.package.name" ist der Paketname, in dem Sie Ihre Klassen haben. Wenn Sie IDE verwenden, aktualisieren Sie das Projekt und führen Sie es erneut in Tomcat aus. immer noch nicht arbeiten? Starten Sie Ihren Computer neu und es wird funktionieren.

user3945851
quelle
2

Eine andere zu überprüfende Sache ist eine Kombination von vorherigen Einträgen

Sie können Folgendes in Ihrer web.xml-Datei haben:

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

und du kannst haben

<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>

aber Sie können nicht beide haben oder Sie bekommen diese Art von Fehler. Die Lösung in diesem Fall wäre, das eine oder andere auskommentieren (wahrscheinlich würde das erste Code-Snippet auskommentiert).

Demongolem
quelle
1

Ja, das Hinzufügen des Init-Parameters für com.sun.jersey.config.property.packages hat dieses Problem für mich behoben.

hat einen Trikot-Rest-Service in eine maven-basierte Frühjahrsanwendung zusammengeführt und diesen Fehler erhalten.

Harinath
quelle
1

Ich habe auch diese Art von Fehler bekommen, bitte kümmern Sie sich um die Konfigurationen in XML.

Ich schrieb com.sun.jersey.comfig.property.packages

Anstatt com.sun.jersey.config.property.packages

Nach der Korrektur funktioniert es.

Ravi Thapa
quelle
1

Dieses Problem ist darauf zurückzuführen, dass Jersey kein angegebenes Abhängigkeitspaket für Ihren Restdienst finden kann

Überprüfen Sie die Verteilung Ihres Projektpakets und stellen Sie sicher, dass dies Ihrem Parameterwert web.xml entspricht

Jose Luis Garcia
quelle
1

Wahrscheinlich zu spät, aber so habe ich diesen Fehler behoben.

Wenn diese Lösung nicht funktioniert,

<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>

In der Sonnenfinsternis:

Klicken Sie mit der rechten Maustaste auf Ihr Projekt oder wählen Sie Projekt aus und drücken Sie Alt + Eingabetaste. Suchen Sie auf der linken Seite des geöffneten Fensters den Java-Erstellungspfad

Wählen Sie auf der rechten Registerkarte Bibliotheken aus: Wenn etwas beschädigt ist oder eine Kreuzmarkierung oben auf den Gläsern angezeigt wird, entfernen Sie dasselbe Glas und fügen Sie es erneut hinzu

Übernehmen und schließen

Erstellen Sie Ihr Projekt neu

Sufiyan Ansari
quelle
0

In meinem Fall habe ich die Gläser nach dem Import aus dem Krieg zweimal im Build-Pfad hinzugefügt. Es funktionierte einwandfrei, nachdem die zusätzlichen Gläser entfernt wurden, auf denen die Fehlerseiten des Fehlerbereitstellungsdeskriptors angezeigt wurden

Hinzufügen

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

Auch kam über dieses Problem zweimal aus verschiedenen Gründen. Das erste Mal habe ich vergessen, aufzunehmen

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

Wie in den vorherigen Kommentaren beschrieben, und als ich das tat, fing es an zu funktionieren.

Noch ... an einem anderen Tag startete ich Eclipse in der Erwartung, dort fortzufahren, wo ich aufgehört hatte, und anstatt mein Programm zum Laufen zu bringen, zeigte es wieder denselben Fehler. Ich begann zu überprüfen, ob ich versehentlich einige Änderungen vorgenommen und eine beschädigte Datei gespeichert hatte, konnte jedoch keinen solchen Fehler finden, und die Datei sah genauso aus wie die Beispiele, die ich habe, alles in Ordnung. Da es am Tag zuvor nach anfänglicher Suche funktioniert hat, dachte ich, vielleicht ist es eine Eclipse- oder Tomcat-Panne oder so, also versuchen wir einfach, einige Änderungen vorzunehmen und zu sehen, ob es reagiert. Also habe ich ein Leerzeichen + Rücktaste in der Datei web.xml erstellt, um Eclipse zu täuschen, dass die Datei geändert wurde, und sie dann gespeichert. Der nächste Schritt war ein Neustart des Tomcat-Servers (von Eclipse IDE) und voila, es funktioniert wieder!

Vielleicht könnte jemand mit umfassenderer Erfahrung erklären, was das Problem wirklich hinter all dem steckt?

Gishas
quelle
-1

Hauptursache für diese Ausnahme ist:

Sie haben nicht den richtigen Paketnamen angegeben, unter dem Sie die @PathDatei web.xml / Configuration verwendet haben oder deren Konfiguration vergessen haben (Rest API Class File Paketname, Ihr Klassenpaketname).

Überprüfen Sie diese Konfiguration im Inneren <init-param>

Abhijit Patra
quelle
@jfeferman Dies ist eindeutig ein Versuch, eine Antwort auf die Frage zu geben. Bitte seien Sie beim Überprüfen in der LQP-Warteschlange vorsichtiger.
TylerH