【问题标题】:The ResourceConfig instance does not contain any root resource classesResourceConfig 实例不包含任何根资源类
【发布时间】:2010-12-10 18:39:14
【问题描述】:

这里出了什么问题?

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"在这里有什么影响吗?
  • 它必须是 servlet,而不是过滤器
  • 检查你的包名和其他参数是否正确。

标签: java jersey


【解决方案1】:

你有没有尝试添加

<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 所在的包,并确保它在类路径中。

【讨论】:

  • 对于不使用 Spring 的人:您需要将此 init-param 添加到 com.sun.jersey.spi.container.servlet.ServletContainer servlet。
【解决方案2】:

我是泽西岛的新手 - 我遇到了同样的问题,但是当我删除“/”并只使用 @path("admin") 时,它起作用了。

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

【讨论】:

  • 我正在使用 Spring JAX-RS,Jersey。这个解决方案对我来说很好。
【解决方案3】:

您需要在

处添加您的包裹名称
<init-param>
  <param-name>com.sun.jersey.config.property.packages</param-name>
  <param-value>your.package.name</param-value>
</init-param>

我还注意到一件愚蠢的事情,
我需要在 MAVEN BUILD 之后刷新我的项目,否则它会显示相同的错误。
如果您知道我们需要刷新项目的原因,请发表评论?

【讨论】:

  • 你摇滚!当我在 Maven 安装后刷新我的项目时,它工作正常!谢谢。 :)
  • @Tmp 谢谢,这真的很奇怪。刷新后工作正常。加一个给你破解
  • 天哪,这是真的:构建后需要刷新。如果您查看“服务器”选项卡,刷新项目后会自动重新发布战争。
【解决方案4】:

这意味着,它找不到任何可以作为 jersey RESTful Web 服务执行的类。

检查:

  • com.sun.jersey.config.property.packages”是否在您的 网页.xml。
  • com.sun.jersey.config.property.packages”的值是否 参数丢失或无效(提到的包不存在)。它应该是一个包,其中放置了作为球衣服务运行的 POJO 类。
  • 是否存在至少一个 POJO 类,该类有一个带有@Path 属性注解的方法。

【讨论】:

  • 出于某种原因,我有一个名为 jersey.config.server.provider.packages 的属性,它在 Glassfish 下工作。重命名后它也可以在 Jetty 中使用。
  • 我的配置文件中有几行引用了一个空目录,这导致了这个错误。 &lt;servlet&gt; &lt;servlet-name&gt;Jersey Web Services&lt;/servlet-name&gt; &lt;servlet-class&gt;com.sun.jersey.spi.spring.container.servlet.SpringServlet&lt;/servlet-class&gt; &lt;!-- &lt;init-param&gt; &lt;param-name&gt;com.sun.jersey.config.property.packages&lt;/param-name&gt; -------&gt;&lt;param-value&gt;package.without.any.webservices&lt;/param-value&gt; &lt;/init-param&gt; --&gt; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt; &lt;/servlet&gt;
【解决方案5】:

您的资源包应包含至少一个 pojo,该 pojo 用 @Path 注释或至少有一个用 @Path 注释的方法或请求方法指示符,例如 @GET@PUT@POST ,或@DELETE。资源方法是使用请求方法指示符注释的资源类的方法。这解决了我的问题...

【讨论】:

    【解决方案6】:

    我在使用 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>
    

    【讨论】:

    • 这个建议在 Wildfly 8.1 上对我有用。不过,不必添加 &lt;context-param/&gt; 部分。只需删除 &lt;param-name&gt;com.sun.jersey.config.property.packages&lt;/param-name&gt; &lt;init-param/&gt; 部分。
    • 对我来说也一样。只需评论/删除 &lt;init-param&gt; 即可在 Wildly 8.2.0 上解决此问题;但是我还有其他麻烦,例如我正在部署的应用程序无法在 Wildly 上与 Jersey 一起运行。 Jersey(由 GlassFish 使用)和 RestEasy(由 Wildfly 使用)具有不同的配置。
    • 我挣扎了好几个小时。这对我很有帮助!
    【解决方案7】:

    基本上我像下面这样更正了它,一切正常。

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

    【讨论】:

      【解决方案8】:

      我收到此异常,因为 Web.xml 中缺少 ResourseConfig。

      添加:

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

      【讨论】:

        【解决方案9】:

        我在尝试从 Eclipse 项目运行 webapp 时遇到了同样的问题。一旦我将 .class 文件复制到/WEB-INF/classes,它就可以完美运行。

        【讨论】:

        • 是的......你是对的......由于我的java代码中的一些错误,类文件没有正确生成。因此,上述错误发生在我身上。修复了那些 java 错误,清理了代码并生成了新类文件。生成类文件后,为我修复了上述错误。谢谢罗德里戈·阿森西奥..
        • 所以你必须将它设置为构建的 .class 文件到那里?奇怪的是 eclipse 或 sometihng 不会自动完成
        【解决方案10】:

        我遇到了同样的问题,测试了一堆不同的示例,并尝试了所有可能的解决方案。最终让它对我有用的是,当我在课程行上添加了 @Path("") 时,我把它省略了。

        【讨论】:

          【解决方案11】:

          遇到了同样的问题,发现是我部署源代码的方式有问题。正如错误消息所说:"...does not contain any root resource classes"。所以它在配置的包中找不到任何资源类。我只是错误地部署了类 - 这就是它没有拾取它的原因。

          我忘记在 WAR 的 /WEB-INF/classes 目录中部署我的类文件 - 最初我只是将它直接放在 WAR 文件的根目录中。因此,当它查找资源类时,它没有找到它们——因为它们存在于不同(错误)的位置。

          【讨论】:

            【解决方案12】:

            同样的问题 - 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。

            【讨论】:

              【解决方案13】:

              此错误的另一个可能原因是您忘记将 /WEBINF/lib 文件夹中已经存在的库添加到构建路径(例如,在导入 .war 文件时,当在向导)。刚刚发生在我身上。

              【讨论】:

                【解决方案14】:

                当我部署我的 main.jar 时发生了这种情况,没有选中 Eclipseexport jar 菜单中的 add directory entries 框.

                【讨论】:

                  【解决方案15】:

                  嗯,现在回复有点晚了。我遇到了同样的问题,我的谷歌搜索是徒劳的。但是,我设法找到了问题所在。收到此错误的原因可能有很多,但由于以下原因,我收到了此错误,我想与我的开发人员分享此错误。

                  1. 我之前使用的是 Jersey 1.3,但我遇到了这个错误。但是当我将 jar 升级到 Jersey 的最新版本时,这个问题就解决了。
                  2. 我收到此错误的另一个实例是当我试图通过构建一个 war 文件将我的服务部署到 JBoss 中时。我错误地将 Java 文件包含在 .war 而不是 java 类中。

                  【讨论】:

                    【解决方案16】:

                    我必须在@path 的末尾添加一个斜杠

                    @Path ("/admin/") 
                    

                    【讨论】:

                      【解决方案17】:

                      好的...对我来说工作正常,只需将“servlet-class”分配给 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 中再次运行。还是不行?重新启动您的计算机即可运行。

                      【讨论】:

                        【解决方案18】:

                        要检查的另一件事是以前条目的组合

                        您可以在您的 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>
                        

                        但你不能同时拥有两者,否则你会遇到这种错误。在这种情况下,解决方法是注释掉一个或另一个(可能第一个代码 sn-p 会被注释掉)

                        【讨论】:

                          【解决方案19】:

                          是的,为 com.sun.jersey.config.property.packages 添加初始化参数为我解决了这个问题。

                          正在将球衣休息服务合并到基于 maven 的 Spring 应用程序中并出现此错误。

                          【讨论】:

                            【解决方案20】:

                            我也遇到这种错误,请注意xml中的配置。

                            我写的 com.sun.jersey.comfig.property.packages

                            而不是 com.sun.jersey.config.property.packages

                            改正后就可以了。

                            【讨论】:

                              【解决方案21】:

                              这个问题是因为 jersey 找不到你休息的依赖包 服务声明

                              检查你的项目包分布并断言它等于你的 web.xml 参数值

                              【讨论】:

                                【解决方案22】:

                                可能为时已晚,但这就是我解决此错误的方法。

                                如果此解决方案不起作用,

                                <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

                                从右侧选项卡面板中选择库:如果 jar 顶部有任何损坏或显示十字标记的内容,请删除并再次添加相同的 jar

                                应用并关闭

                                重建你的项目

                                【讨论】:

                                  【解决方案23】:

                                  在我的情况下,我在从战争导入后在构建路径中添加了两次罐子。 删除显示错误部署描述符错误页面的额外 jar 后,它工作正常

                                  添加

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

                                  【讨论】:

                                    【解决方案24】:

                                    也遇到过这个问题,因为不同的原因两次。第一次忘记加了

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

                                    如之前的 cmets 所述,一旦我这样做了,它就开始工作了。

                                    然而... 另一天我启动了 Eclipse,希望从我停下的地方继续,而不是让我的程序正常工作,它再次显示了同样的错误。我开始检查我是否不小心做了一些更改并保存了损坏的文件,但是找不到这样的错误,并且文件看起来与我的示例完全一样,一切都井井有条。由于它在前一天工作,经过一些初步搜索,我想,好吧,可能是 Eclipse,或者 Tomcat 故障或其他什么,所以让我们尝试进行一些更改,看看它是否有反应。所以,我在 web.xml 文件中做了一个空格 + 退格,只是为了欺骗 Eclipse 文件已更改,然后保存它。下一步是重新启动 Tomcat 服务器(从 Eclipse IDE),瞧,它又可以工作了!

                                    也许有更广泛经验的人可以解释这一切背后的真正问题是什么?

                                    【讨论】:

                                      【解决方案25】:

                                      此异常的主要原因是:

                                      您没有在使用@Path 的位置给出正确的包名称,或者忘记在 web.xml / 配置文件中进行配置(Rest API 类文件包名称,您的类包名称)

                                      检查&lt;init-param&gt;里面的这个配置

                                      【讨论】:

                                      • @jfeferman 这显然是试图提供问题的答案。请在 LQP 队列中审阅时更加小心。
                                      猜你喜欢
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2017-10-12
                                      • 1970-01-01
                                      • 2011-08-31
                                      • 1970-01-01
                                      • 2015-08-31
                                      相关资源
                                      最近更新 更多