Екземпляр ResourceConfig не містить кореневих класів ресурсів


79

Що тут не так?

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

Код:

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

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

Ваш "/singup"замість того, щоб "/signup"мати якийсь ефект тут?
Кен Вільямс

це повинен бути сервлет, а не фільтр
Emre Türkiş

перевірте, чи правильно вказано ім’я вашого пакета та інші параметри.
Гаурав,

Відповіді:


82

Ви пробували додати

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

до вашого визначення SpringServlet? Очевидно, замініть my.package.name пакетом, в якому знаходиться AdminUiResource, і переконайтеся, що він знаходиться в шляху до класу.


3
Для людей, які не використовують Spring: Вам потрібно додати це init-paramдо com.sun.jersey.spi.container.servlet.ServletContainerсервлету.
zb226

33

Я новачок у Джерсі - у мене була та сама проблема, але коли я видалив "/" і просто використав @path ("адміністратор"), це спрацювало.

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

Я використовую Spring JAX-RS, Джерсі. Це рішення добре працює для мене.
Нд

30

ВАМ ПОТРІБНО ДОДАТИ НАЗВИ ПАКЕТУ НА

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

ТАКЖЕ ОДНЕ ГУРНЕ, ЩО Я ЗАПОЗНАЧАВ,
мені потрібно оновити свій проект після MAVEN BUILD, інакше він покаже мені таку ж помилку.
Будь ласка, коментуйте Якщо ви знаєте причину, чому нам потрібно оновити проект?


2
Ви рок! Це працювало правильно, коли я оновлюю свій проект після встановлення Maven! Дякую. :)
Махан

2
@Tmp дякую, це справді дивно. Після оновлення працює нормально. Плюс один для вас хак
Арун

28

Це означає, що він не зміг знайти жодного класу, який може бути виконаний як веб-сервіс jersey RESTful.

Перевірка:

  • Чи com.sun.jersey.config.property.packagesвідсутнє " " у вашому web.xml.
  • Чи com.sun.jersey.config.property.packagesвідсутнє значення параметра ' ', чи недійсне (згаданий пакет не існує). Це має бути пакет, куди ви поклали свої заняття POJO, які працюють як послуги трикотажу.
  • Чи існує хоча б один клас POJO, який має метод, анотований @Pathатрибутом.

Чомусь у мене було це властивість з назвою jersey.config.server.provider.packages, і воно працювало під управлінням Glassfish. Після перейменування це працює і в Jetty.
Одіссей

3
Кілька рядків у моєму конфігураційному файлі посилалися на порожній каталог, що спричинило цю помилку. <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

Ваш пакет ресурсів повинен містити , по крайней мере , один POJO , який або з анотацією @Pathабо, по крайней мере , один метод з анотацією @Pathабо запиту методу целеуказателем, такі як @GET, @PUT, @POSTабо @DELETE. Методи ресурсів - це методи класу ресурсів, анотовані за допомогою позначення методу запиту. Це вирішило мою проблему ...


11

Я зіткнувся з цією проблемою з JBOSS EAP 6.1. Я зміг розгорнути свій код за допомогою eclipse на сервер JBOSS, але коли я спробував розгорнути файл як файл WAR на JBOSS, я почав отримувати цю помилку.

Рішенням було налаштування web.xml для належної роботи з JBOSS, дозволивши обом працювати разом.

Наступні два рядки були прокоментовані в web.xml, щоб дозволити JBOSS робити власні конфігурації

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

А потім додайте наступні параметри контексту після

<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
Ця пропозиція спрацювала для мене на Wildfly 8.1. Не потрібно було додавати <context-param/>розділ. Треба було лише видалити <param-name>com.sun.jersey.config.property.packages</param-name> <init-param/>розділ.
Донован Мюллер

3
Те саме для мене. Просто коментуючи / видаляючи <init-param>виправлену проблему на Wildly 8.2.0; однак у мене були інші клопоти, такий додаток, який я розгортав, не запускався з Джерсі на Wildly. Джерсі (використовується GlassFish) та RestEasy (використовується Wildfly) мають різні конфігурації.
Лантрикс

2
Я мучився кілька годин. Це мені справді допомогло!
blaa

10

В основному я виправив це, як показано нижче, і все працювало нормально.

<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

Я отримую цей виняток через відсутність ResourseConfig у Web.xml.

Додати:

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

Клас обслуговування означає: клас, який містить такі послуги, як: @Path("/orders")


7

У мене була та ж проблема зі спробою запустити веб-програму з проекту eclipse. Як тільки я скопіював файли .class, /WEB-INF/classesвін працював ідеально.


так..ви маєте рацію ... Через деяку помилку в моєму коді Java файли класів неправильно генеруються. Отже, вищезазначена помилка сталася для мене .. Виправлені ці помилки Java, очищено код і створено новий клас. Після генерації файлу класу для мене виправлена ​​вищевказана помилка. Дякую Родріго Асенсіо ..

отже, вам доведеться налаштувати його таким чином, щоб вбудовані файли .class переходили туди? Це дивно, що затемнення чи якийсь інший спосіб не роблять це автоматично
Dukeatcoding

6

У мене була одна і та ж проблема, я протестував купу різних прикладів і спробував усі можливі рішення. Що, нарешті, змусило мене працювати, це те, що коли я додав @Path("")над рядком класу, я це залишив.


5

Я мав ту саму проблему і виявив, що це проблема з тим, як я розгорнув свій вихідний код. Як сказано в повідомленні про помилку: "...does not contain any root resource classes". Тому він не зміг знайти жодного класу ресурсів у налаштованому пакеті. Я просто розгорнув класи неправильно - ось чому він не підібрав його.

Я забув розгорнути свої файли класів у каталозі / WEB-INF / classes WAR - спочатку я просто мав це безпосередньо в кореневій частині файлу WAR. Тож коли він шукав класи ресурсів, він їх не знаходив - тому що вони існували в іншому (неправильному) місці.


4

Те саме питання - web.xml виглядало так:

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

Надання спеціального додатка замінює будь-яке налаштоване на XML автоматичне виявлення класів. Вам потрібно застосувати правильні методи для написання власного коду для підключення класів. Дивіться javadocs.


3

Ще однією можливою причиною цієї помилки є те, що ви забули додати бібліотеки, які вже є в /WEBINF/libпапці, до шляху збірки (наприклад, під час імпорту .warфайлу -file та не перевірки бібліотек на запит у майстрі). Щойно зі мною сталося.


3

Це трапилося зі мною, коли я розгорнув свій main.jar, не встановивши прапорець додати записи до каталогу в меню експорту jar в Eclipse .


2

Ну, трохи пізно відповідати. Я зіткнувся з тією ж проблемою, і мої пошуки в Google були марними. Однак мені вдалося з’ясувати, в чому проблема. Причин отримання цієї помилки може бути багато, але помилку я отримав через наступне, і я хотів поділитися нею зі своїми колегами-розробниками.

  1. Раніше я використовував Джерсі 1.3 і отримував цю помилку. Але коли я модернізував банки до останньої версії Джерсі, це питання було вирішено.
  2. Ще один випадок, коли я отримав цю помилку, коли я намагався розгорнути свою службу в JBoss, створивши військовий файл. Я зробив помилку, включивши файли Java у .war замість класів Java.

2

Мені довелося додати кінцеву скісну риску в кінці @path

@Path ("/admin/") 

2

Гаразд ... Для мене працює нормально, просто присвоївши "клас сервлетів" com.sum.jersey.spi.container.servlet.ServletContainer, я використовую 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>

але з якихось причин мені довелося перезавантажити комп'ютер, щоб працювати в моєму локальному хості. Якщо все одно не працює? Ви повинні додати у свій web.xml цей код між тегом "сервлет".

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

"the.package.name" - це ім'я пакета, де ви маєте свої класи. Якщо ви використовуєте IDE, оновіть проект і запустіть знову в Tomcat. все ще не працює? перезавантажте комп'ютер і буде працювати.


2

Інша справа, що потрібно перевірити - це поєднання попередніх записів

Ви можете мати у своєму файлі web.xml це:

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

і ти можеш мати

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

але ви не можете мати і те, і інше, або ви отримуєте подібну помилку. Виправлення в цьому випадку полягало б у коментуванні того чи іншого (можливо, перший фрагмент коду буде закомментований)


1

так, додавши параметр init для com.sun.jersey.config.property.packages, ця проблема вирішена для мене.

об'єднав служби відпочинку з трикотажу у весняну програму на основі Maven і отримав цю помилку.


1

У мене також виникла така помилка. Будь ласка, подбайте про конфігурації в xml.

я написав com.sun.jersey.comfig.property.packages

Замість com.sun.jersey.config.property.packages

Після корекції він працює.


1

ця проблема полягає в тому, що джерсі не може знайти декларований пакет залежностей для вашого відпочинку

перевірте розподіл вашого пакету проектів і запевняйте, що дорівнює вашому параметру web.xml


1

Можливо, занадто пізно, але таким чином я вирішив цю помилку.

Якщо це рішення не працює,

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

У затемненні:

Клацніть правою кнопкою миші на своєму проекті або виберіть проект і натисніть Alt + Enter У лівій частині вікна знайдіть Java Build Path

Виберіть Бібліотеки на правій панелі вкладки: Якщо є щось, що пошкоджено або відображає перехресні позначки у верхній частині банок, вийміть і додайте ту ж банку

Застосувати та закрити

Відновіть свій проект


0

У моєму випадку я двічі додавав банки в шлях побудови після імпорту з війни. Це добре працювало після видалення зайвих банок, на яких відображалися сторінки помилок дескриптора розгортання помилок

додавання

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

0

Також із цією проблемою стикався двічі з різних причин. Перший раз я забув включити

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

як описано в попередніх коментарях, і коли я це зробив, він почав працювати.

Тим не менше ... ще одного дня я запустив Eclipse, розраховуючи продовжити там, де я зупинився, і замість того, щоб моя програма працювала, вона знову показала ту саму помилку. Я почав перевіряти, чи випадково вніс якісь зміни та врятував пошкоджений файл, але не знайшов такої помилки, і файл виглядав точно так, як у мене є приклади, все в порядку. Оскільки це спрацювало напередодні, після початкових пошуків, я подумав, ну, можливо, це Eclipse, або глюк Tomcat, або щось подібне, так що давайте просто спробуємо внести деякі зміни і подивитися, чи реагує він. Отже, я зробив пробіл + зворотний простір у файлі web.xml, просто для того, щоб обдурити Eclipse, що файл змінено, і зберег його потім. Наступним кроком був перезапуск сервера Tomcat (з Eclipse IDE) і вуаля, він знову працює!

Можливо, хтось із ширшим досвідом може пояснити, в чому полягає проблема насправді?


-1

Основною причиною цього винятку є:

Ви не вказали належну назву пакета там, де використовуєте @Path або забули налаштувати у файлі web.xml / конфігурації (Ім'я пакета файлу класу Rest API, ім’я вашого пакету класів)

Перевірте цю конфігурацію всередині <init-param>


@jfeferman Це явно спроба дати відповідь на запитання. Будьте обережніші при перегляді в черзі LQP.
TylerH
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.