资源配置实例不包含任何根资源类。

81

这里出了什么问题?

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" 在这里有任何影响吗? - Ken Williams
它必须是一个servlet,而不是过滤器。 - Emre Türkiş
请检查您的包名和其他参数是否正确。 - Gaurav
25个回答

83

你尝试过添加

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


4
对于不使用Spring的用户:您需要将此“init-param”添加到“com.sun.jersey.spi.container.servlet.ServletContainer” servlet中。 - zb226

34
我是新手,遇到了同样的问题,在我去掉斜杠并只使用 @path("admin") 时问题得到解决。
@Path("admin")
public class AdminUiResource { ... }

我正在使用Spring JAX-RS和Jersey。这个解决方案对我来说很好用。 - Sun

32

你需要在这里添加你的包名:

<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 Install后刷新我的项目时,它正确地工作了!谢谢 :) - Mahan
2
@Tmp 谢谢,那真的很奇怪。刷新后它正常工作了。给你一个赞。 - Arun
天啊,这是真的:需要在构建后刷新。如果您查看服务器选项卡,在刷新项目后WAR文件会自动重新发布。 - Campa

28

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

请检查:

  • 您的web.xml文件中是否缺少“com.sun.jersey.config.property.packages”。
  • com.sun.jersey.config.property.packages”参数的值是否缺失或无效(所提到的包不存在)。它应该是一个包,您将您的POJO类放在其中以作为Jersey服务运行。
  • 是否存在至少一个POJO类,该类具有使用@Path属性注释的方法。

由于某种原因,我有一个名为jersey.config.server.provider.packages的属性,在Glassfish下工作正常。重命名后,在Jetty中也可以工作。 - Odysseus
3
我的配置文件中有几行引用了一个空目录,导致了这个错误。 Jersey Web Services com.sun.jersey.spi.spring.container.servlet.SpringServlet 没有任何webservices的包名 --> 1 - Nielsvh

12
你的资源包应至少包含一个POJO类,该类要么带有@Path注释,要么至少有一个方法带有@Path注释或请求方法指示符,如@GET、@PUT、@POST或@DELETE。资源方法是带有请求方法指示符注释的资源类的方法。这解决了我的问题...

11

我在使用 JBOSS EAP 6.1 时遇到了这个问题。我能够通过 Eclipse 将我的代码部署到 JBOSS 服务器,但一旦我尝试将文件部署为 WAR 文件到 JBOSS,就开始出现这个错误。

解决方法是配置 web.xml 以使其与 JBOSS 正常配合。

以下两行是被注释掉的,以允许 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/>部分即可。 - Donovan Muller
3
我也有同感。只需注释或删除 <init-param> 就可以解决在 Wildfly 8.2.0 上的此问题;但是,我在部署应用程序时还遇到了其他麻烦,因为我所使用的 Jersey 在 Wildfly 上无法运行。Jersey(由 GlassFish 使用)和 RestEasy(由 Wildfly 使用)具有不同的配置。 - lantrix
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
我遇到了一个异常,因为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>

Service class意味着:包含服务的类,比如:@Path("/orders")


7

我曾经遇到过类似的问题,尝试从Eclipse项目中运行Web应用程序。只要我将.class文件复制到/WEB-INF/classes目录下,它就可以完美地工作了。


是的,你说得对。由于我的Java代码中出现了一些错误,类文件没有被正确生成。因此,我遇到了上述的错误。修复了这些Java错误,整理了代码并生成了新的类文件。在类文件生成后,上述错误就被解决了。谢谢Rodrigo Asensio。 - user915303
所以你必须设置它,使构建的 .class 文件放在那里?很奇怪 Eclipse 或其他工具不会自动完成这个任务。 - Dukeatcoding

6

我遇到了同样的问题,在测试了很多不同的示例并尝试了所有可能的解决方案后,最终让它为我工作的是当我在类行上添加了@Path(“”),我之前忘记加了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接