Экземпляр 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ş

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


2
Ты жжешь! Он работал правильно, когда я обновлял свой проект после установки Maven! Благодарю. :)
— Махан

2
@Tmp, спасибо, это действительно странно. После обновления работает нормально. Плюс один для тебя взлом
— Арун

28

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

Проверьте:

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

По какой-то причине у меня было это свойство с именем 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>

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>

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? Странно, что eclipse или что-то в этом роде не делает это автоматически
— Dukeatcoding

6

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


5

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

Я забыл развернуть свои файлы классов в каталоге WAR / WEB-INF / classes - изначально он был у меня прямо в корне файла 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-файла и не проверять библиотеки при запросе в мастере). Просто случилось со мной.


3

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


2

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

  1. Раньше я использовал Jersey 1.3 и получал эту ошибку. Но когда я обновил jar-файлы до последней версии Jersey, эта проблема была решена.
  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 этот код между тегом "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. все еще не работает? перезагрузите компьютер и будет работать.


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.