Wystąpienie ResourceConfig nie zawiera żadnych głównych klas zasobów


79

Co tu się dzieje?

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)

Filtr:

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

Kod:

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

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

Czy "/singup"zamiast "/signup"mieć tu jakiś efekt?
Ken Williams

to musi być serwlet, a nie filtr
Emre Türkiş

sprawdź, czy nazwa pakietu i inne parametry są poprawne.
Gaurav

Odpowiedzi:


82

Czy próbowałeś dodać

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

do Twojej definicji SpringServlet? Oczywiście zamień my.package.name na pakiet, w którym znajduje się AdminUiResource, i upewnij się, że znajduje się on w ścieżce klas.


3
Dla osób, które nie używają Springa: musisz dodać to init-paramdo com.sun.jersey.spi.container.servlet.ServletContainerserwletu.
zb226

33

Jestem nowy na Jersey - miałem ten sam problem, ale kiedy usunąłem „/” i po prostu użyłem @path („admin”), zadziałało.

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

Używam Spring JAX-RS, Jersey. To rozwiązanie działa dobrze dla mnie.
Niedziela,

30

MUSISZ DODAĆ NAZWĘ PAKIETU NA STRONIE

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

TAKŻE GŁUPA RZECZY, KTÓRE ZWRÓCIŁEM SIĘ,
Muszę odświeżyć projekt po MAVEN BUILD, bo inaczej pokazuje mi ten sam błąd.
Proszę o komentarz Jeśli wiesz, dlaczego musimy odświeżyć projekt?


2
Rządzisz! Działało poprawnie, gdy odświeżam projekt po instalacji Maven! Dzięki. :)
Mahan

2
@Tmp dzięki, to naprawdę dziwne. Po odświeżeniu działa dobrze. Plus jeden za hakowanie
Arun

28

Oznacza to, że nie mógł znaleźć żadnej klasy, która może być wykonana jako usługa sieciowa RESTful koszulki.

Czek:

  • Czy com.sun.jersey.config.property.packagesw pliku web.xml brakuje elementu „”.
  • Brak wartości com.sun.jersey.config.property.packagesparametru „ ” lub jest on nieprawidłowy (wspomniany pakiet nie istnieje). Powinien to być pakiet, w którym umieściłeś swoje klasy POJO, które działają jako usługi koszulki.
  • Czy istnieje przynajmniej jedna klasa POJO, która ma metodę z adnotacją z @Pathatrybutem.

Z jakiegoś powodu miałem tę właściwość o nazwie jersey.config.server.provider.packages i działała pod Glassfish. Po zmianie nazwy działa również w Jetty.
Odyseusz

3
Kilka wierszy w moim pliku konfiguracyjnym odnosiło się do pustego katalogu, który powodował ten błąd. <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

Twój pakiet zasobów powinna zawierać co najmniej jeden POJO który jest albo z uwagami @Pathlub mają co najmniej jedną metodę z uwagami @Pathlub żądanie desygnatorze metody, takie jak @GET, @PUT, @POST, lub @DELETE. Metody zasobów to metody klasy zasobów z adnotacją z oznaczeniem metody żądania. To rozwiązało mój problem ...


11

Natknąłem się na ten problem z JBOSS EAP 6.1. Udało mi się wdrożyć kod przez eclipse na serwerze JBOSS, ale gdy próbowałem wdrożyć plik jako plik WAR w JBOSS, zacząłem otrzymywać ten błąd.

Rozwiązaniem było skonfigurowanie pliku web.xml do poprawnej współpracy z JBOSS poprzez umożliwienie im współpracy.

Poniższe dwie linie zostały zakomentowane w pliku web.xml, aby umożliwić JBOSS wykonywanie własnych konfiguracji

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

A następnie dodaj następujące parametry kontekstu po

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

3
Ta sugestia zadziałała dla mnie w Wildfly 8.1. Nie musiałem jednak dodawać <context-param/>sekcji. Musiałem tylko usunąć <param-name>com.sun.jersey.config.property.packages</param-name> <init-param/>sekcję.
Donovan Muller

3
Dla mnie to samo. Wystarczy skomentować / usunąć <init-param>naprawiony problem w Wildly 8.2.0; Jednak miałem inne problemy, takie jak aplikacja, którą wdrażałem, nie działała z Jersey na Wildly. Jersey (używany przez GlassFish) i RestEasy (używany przez Wildfly) mają różne konfiguracje.
lantrix

2
Walczyłem przez kilka godzin. To naprawdę mi pomogło!
blaa

10

Zasadniczo poprawiłem to jak poniżej i wszystko działało dobrze.

<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

Otrzymuję ten wyjątek z powodu braku elementu ResourseConfig w pliku Web.xml.

Dodaj:

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

Klasa usług oznacza: klasę, która zawiera usługi takie jak: @Path("/orders")


7

Miałem ten sam problem z próbą uruchomienia aplikacji internetowej z projektu zaćmienia. Jak tylko skopiowałem pliki .class /WEB-INF/classes, działało idealnie.


tak… masz rację ... Z powodu błędu w moim kodzie java pliki klas nie są poprawnie generowane. Stąd powyższy błąd wystąpił u mnie .. Naprawiono te błędy java, wyczyściłem kod i nowa klasa została wygenerowana. Po wygenerowaniu pliku zajęć powyższy błąd został naprawiony. Dziękuję Rodrigo Asensio ..

więc musisz skonfigurować to tak, aby skompilowane pliki .class tam trafiały? To dziwne, że zaćmienie lub coś nie robi tego automatycznie
Dukeatcoding,

6

Miałem ten sam problem, testując kilka różnych przykładów i wypróbowałem wszystkie możliwe rozwiązania. To, co w końcu @Path("")sprawiło, że zadziałało dla mnie, to kiedy dodałem linię ponad klasową, pominąłem to.


5

Miałem ten sam problem i okazało się, że jest to problem związany ze sposobem wdrażania kodu źródłowego. Jako komunikat o błędzie mówi: "...does not contain any root resource classes". Dlatego nie mógł znaleźć żadnych klas zasobów w skonfigurowanym pakiecie. Po prostu źle rozmieściłem klasy - dlatego ich nie odebrałem.

Zapomniałem wdrożyć pliki moich klas w katalogu / WEB-INF / classes w WAR - początkowo miałem je bezpośrednio w katalogu głównym pliku WAR. Więc kiedy szukał klas zasobów, nie znalazł ich - ponieważ istniały w innej (niewłaściwej) lokalizacji.


4

Ten sam problem - plik web.xml wyglądał tak:

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

Udostępnienie aplikacji niestandardowej zastępuje wszelkie skonfigurowane w XML automatyczne wykrywanie klas. Musisz zaimplementować odpowiednie metody, aby napisać własny kod, aby połączyć klasy. Zobacz javadocs.


3

Inną możliwą przyczyną tego błędu jest to, że zapomniałeś dodać biblioteki, które są już w /WEBINF/libfolderze do ścieżki budowania (np. Podczas importowania .war-pliku i nie sprawdzania bibliotek, gdy zostaniesz o to poproszony w kreatorze). Po prostu mi się przydarzyło.


3

Zdarzyło mi się to, gdy wdrożyłem plik main.jar, bez zaznaczania pola dodawania wpisów katalogu w menu eksportu jar w Eclipse .


2

Cóż, trochę za późno na odpowiedź. Napotkałem ten sam problem i moje wyszukiwania w Google poszły na marne. Jednak udało mi się znaleźć problem. Może istnieć wiele powodów, dla których pojawia się ten błąd, ale otrzymałem błąd z następujących powodów i chciałem się nim podzielić z innymi programistami.

  1. Wcześniej używałem Jersey 1.3 i otrzymywałem ten błąd. Ale kiedy zaktualizowałem słoiki do najnowszej wersji Jersey, problem został rozwiązany.
  2. Innym przypadkiem, w którym otrzymałem ten błąd, była próba wdrożenia mojej usługi w JBoss poprzez utworzenie pliku wojny. Popełniłem błąd, dołączając pliki Java do .war zamiast klas Java.


2

Ok ... Dla mnie działa dobrze, po prostu przypisując "klasę serwletu" do com.sum.jersey.spi.container.servlet.ServletContainer, używam 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>

ale z jakiegoś powodu musiałem zrestartować komputer, aby pracować na moim lokalnym hoście. Jeśli nadal nie działa? Musisz dodać ten kod w swoim web.xml pomiędzy tagiem "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” to nazwa pakietu, w którym znajdują się Twoje klasy. Jeśli używasz IDE, odśwież projekt i uruchom ponownie w Tomcat. nadal nie działa? uruchom ponownie komputer i będzie działać.


2

Kolejną rzeczą do sprawdzenia jest kombinacja poprzednich wpisów

Możesz mieć w swoim pliku web.xml to:

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

i możesz mieć

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

ale nie możesz mieć obu lub otrzymujesz tego rodzaju błąd. Rozwiązaniem w tym przypadku byłoby skomentowanie jednego lub drugiego (prawdopodobnie pierwszy fragment kodu zostałby wykomentowany)


1

tak, dodanie parametru inicjalizacji dla com.sun.jersey.config.property.packages rozwiązało ten problem.

łączył usługi odpoczynku koszulki z aplikacją wiosenną opartą na Maven i otrzymałem ten błąd.


1

Otrzymałem też tego rodzaju błąd, proszę zająć się konfiguracjami w xml.

napisałem com.sun.jersey.comfig.property.packages

Zamiast com.sun.jersey.config.property.packages

Po korekcie działa.


1

ten problem jest spowodowany tym, że jersey nie może znaleźć pakietu zależności dla deklarowanej usługi odpoczynku

Sprawdź dystrybucję pakietu projektu i upewnij się, że jest równa wartości parametru web.xml


1

Prawdopodobnie za późno, ale tak rozwiązałem ten błąd.

Jeśli to rozwiązanie nie działa,

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

W zaćmieniu:

Kliknij prawym przyciskiem myszy swój projekt lub wybierz projekt i naciśnij Alt + Enter Po lewej stronie otwartego okna znajdź ścieżkę budowania Java

Wybierz Biblioteki z prawego panelu zakładek: Jeśli jest coś, co jest uszkodzone lub ma krzyżyk na górze słoików, usuń i dodaj ponownie ten sam słoik

Zastosuj i zamknij

Odbuduj swój projekt


0

W moim przypadku dwukrotnie dodałem słoiki w ścieżce kompilacji po zaimportowaniu z wojny. Działało dobrze po usunięciu dodatkowych plików JAR, które wyświetlały strony błędów deskryptora wdrażania błędów

dodanie

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

0

Również dwukrotnie z różnych powodów napotkaliśmy ten problem. Za pierwszym razem zapomniałem dołączyć

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

jak opisano w poprzednich komentarzach, a kiedy to zrobiłem, zaczęło działać.

Jednak ... innego dnia zacząłem Eclipse, spodziewając się kontynuować od miejsca, w którym przerwałem, i zamiast działać, mój program ponownie pokazał ten sam błąd. Zacząłem sprawdzać, czy przypadkowo nie dokonałem jakichś zmian i zapisałem uszkodzony plik, ale nie mogłem znaleźć takiego błędu i plik wyglądał dokładnie tak, jak przykłady, które mam, wszystko w porządku. Ponieważ zadziałało dzień wcześniej, po wstępnych poszukiwaniach pomyślałem, że może to usterka Eclipse, Tomcat lub coś w tym rodzaju, więc po prostu spróbujmy wprowadzić jakieś zmiany i zobaczmy, czy zareaguje. Zrobiłem więc spację + backspace w pliku web.xml, aby oszukać Eclipse, że plik został zmieniony, i wtedy go zapisałem. Następnym krokiem było ponowne uruchomienie serwera Tomcat (z Eclipse IDE) i voila, znowu działa!

Może ktoś z większym doświadczeniem mógłby wyjaśnić, na czym tak naprawdę polega problem?


-1

Główną przyczyną tego wyjątku jest:

Nie podałeś poprawnej nazwy pakietu, jeśli używasz @Pathlub zapomniałeś skonfigurować w pliku web.xml / Configuration (nazwa pakietu klasy Rest API, nazwa pakietu Twojej klasy)

Sprawdź tę konfigurację w środku <init-param>


@jfeferman To ewidentnie próba udzielenia odpowiedzi na pytanie. Zachowaj większą ostrożność podczas przeglądania w kolejce LQP.
TylerH,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.