Экземпляр 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");
  }
}
cmani
источник
Является ли ваш "/singup"вместо "/signup"имея никакого эффекта здесь?
Кен Уильямс
это должен быть сервлет, а не фильтр
Emre Türkiş
проверьте правильность имени вашего пакета и других параметров.
Gaurav

Ответы:

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 («admin»), это сработало.

@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, иначе он покажет мне ту же ошибку.
Прокомментируйте, пожалуйста. Если вы знаете причину, по которой нам нужно обновить проект?

VdeX
источник
2
Ты жжешь! Он работал правильно, когда я обновлял свой проект после установки Maven! Благодарю. :)
Махан
2
@Tmp, спасибо, это действительно странно. После обновления работает нормально. Плюс один для тебя взлом
Арун
28

Это означает, что он не смог найти ни одного класса, который можно было бы выполнить как веб-службу RESTful для джерси.

Проверьте:

  • com.sun.jersey.config.property.packagesОтсутствует ли " " в вашем web.xml.
  • com.sun.jersey.config.property.packagesОтсутствует или недопустимо значение параметра ' ' (указанный пакет не существует). Это должен быть пакет, в который вы поместили свои классы POJO, которые работают как службы jersey.
  • Существует ли хотя бы один класс POJO, у которого есть метод, помеченный @Pathатрибутом.
Pawan
источник
По какой-то причине у меня было это свойство с именем jersey.config.server.provider.packages, и оно работало под Glassfish. После переименования работает и в Jetty.
Odysseus
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>
Antman06
источник
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; однако у меня были и другие неприятности, такие как приложение, которое я развертывал, не работало с Jersey на Wildly. Jersey (используется GlassFish) и RestEasy (используется Wildfly) имеют разные конфигурации.
lantrix
2
Я боролся несколько часов. Это мне очень помогло!
blaa 07
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>
cmani
источник
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")

TechSunil
источник
7

У меня была такая же проблема с попыткой запустить веб-приложение из проекта eclipse. Как только я скопировал файлы .class, /WEB-INF/classesон работал отлично.

Родриго Асенсио
источник
да .. вы правы ... Из-за некоторой ошибки в моем java-коде файлы классов не генерируются должным образом. Следовательно, указанная выше ошибка произошла для меня. Исправлены те ошибки java, очищен код и создан новый класс. После создания файла класса вышеупомянутая ошибка исправлена ​​для меня. Спасибо, Родриго Асенсио ..
так что вы должны настроить его, чтобы туда помещались созданные файлы .class? Странно, что eclipse или что-то в этом роде не делает это автоматически
Dukeatcoding
6

У меня была такая же проблема, я тестировал кучу разных примеров и пробовал все возможные решения. Что, наконец, заставило меня работать, так это когда я добавил @Path("")строку над классом, я оставил это.

Холстадиус
источник
5

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

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

NS du Toit
источник
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-файла и не проверять библиотеки при запросе в мастере). Просто случилось со мной.

Bmurauer
источник
3

Это случилось со мной, когда я развернул свой main.jar, не установив флажок добавления записей в каталог в меню экспорта jar в Eclipse .

serj
источник
2

Что ж, уже поздно отвечать. Я столкнулся с той же проблемой, и мои поиски в Google были напрасными. Однако мне удалось выяснить, в чем проблема. Причин появления этой ошибки может быть много, но я получил ошибку из-за следующего, и я хотел поделиться этим со своими коллегами-разработчиками.

  1. Раньше я использовал Jersey 1.3 и получал эту ошибку. Но когда я обновил jar-файлы до последней версии Jersey, эта проблема была решена.
  2. Другой случай, когда я получил эту ошибку, был, когда я пытался развернуть свой сервис в JBoss, создав файл войны. Я сделал ошибку, включив файлы Java в .war вместо классов java.
Нихил
источник
2

Мне пришлось добавить косую черту в конце @path

@Path ("/admin/") 
MobileMon
источник
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 этот код между тегом "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" - это имя пакета, в котором у вас есть классы. Если вы используете IDE, обновите проект и снова запустите в Tomcat. все еще не работает? перезагрузите компьютер и будет работать.

user3945851
источник
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, я решил эту проблему.

объединял службы отдыха трикотажа в приложение Spring на основе 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.

Выберите библиотеки на правой панели вкладок: если есть что-то, что повреждено или показывает крестик поверх банок, удалите и снова добавьте ту же банку.

Применить и закрыть

Восстановите свой проект

Суфиян Ансари
источник
0

В моем случае я дважды добавил банки в путь сборки после импорта из войны. Он работал нормально после удаления дополнительных jar-файлов, на которых отображались страницы ошибок дескриптора развертывания ошибок.

добавление

<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, или что-то в этом роде, поэтому давайте просто попробуем внести некоторые изменения и посмотреть, отреагирует ли он. Итак, я сделал пробел + backspace в файле web.xml, просто чтобы обмануть Eclipse, что файл был изменен, и затем сохранил его. Следующим шагом был перезапуск сервера Tomcat (из Eclipse IDE) и вуаля, он снова работает!

Может быть, кто-нибудь с более широким опытом объяснит, в чем на самом деле проблема?

Гиши
источник
-1

Основная причина этого исключения:

Вы не указали правильное имя пакета, в котором вы использовали @Pathили забыли настроить, в файле web.xml / конфигурации (имя пакета Rest API Class File, ваше имя пакета класса)

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

Абхиджит Патра
источник
@jfeferman Это явно попытка дать ответ на вопрос. Пожалуйста, будьте осторожны при просмотре в очереди LQP.
TylerH