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"有任何这里的影响?
肯·威廉姆斯

它必须是servlet,而不是过滤器
EmreTürkiş17年

检查您的软件包名称和其他参数是否正确。
加拉夫

Answers:


82

您是否尝试过添加

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

你的SpringServlet定义?显然用AdminUiResource所在的包替换my.package.name,并确保它在类路径中。


3
对于不使用Spring的人们:您需要将其添加init-paramcom.sun.jersey.spi.container.servlet.ServletContainerservlet中。
zb226 2015年

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安装后刷新项目时,它可以正常工作!谢谢。:)
Mahan

2
@Tmp谢谢,那真的很奇怪。刷新后工作正常。另外一个是你砍
阿伦

28

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

检查:

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

由于某种原因,我将此属性命名为jersey.config.server.provider.packages,并且在Glassfish下可以正常工作。重命名后,它也可以在Jetty中使用。
奥德修斯2015年

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,2016年

12

您的资源包必须包含至少一个POJO其或者与注解@Path或注释已经与至少一种方法@Path或一个请求方法指示符,例如@GET@PUT@POST,或@DELETE。资源方法是带有请求方法指示符的资源类的方法。这解决了我的问题...


11

我在JBOSS EAP 6.1中遇到了这个问题。我能够通过eclipse将代码部署到JBOSS服务器,但是一旦尝试将文件作为WAR文件部署到JBOSS,我就开始遇到此错误。

解决方案是通过允许web.xml与JBOSS一起工作来配置web.xml。

在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上与Jersey一起运行。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>

服务类是指:包含以下服务的类: @Path("/orders")


7

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


是的..您是正确的...由于我的Java代码中的某些错误,无法正确生成类文件。因此,上面的错误对我来说就发生了。修复了这些Java错误,清理了代码,并生成了新类。在生成类文件之后,以上错误为我修复。谢谢Rodrigo Asensio ..

所以您必须在建立.class文件的位置进行设置?eclipse或sometihng不能自动做到这一点很奇怪
Dukeatcoding

6

我遇到了同样的问题,测试了许多不同的示例,并尝试了所有可能的解决方案。最终使它对我有用的是当我@Path("")在课堂上添加a时,我将其遗漏了。


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-file时,在向导中询问时不检查库)。只是发生在我身上。


3

当我部署main.jar时,在我未选中Eclipseexport jar菜单中的add directory entrys框的情况下,这发生了。


2

好了,现在回复有点晚了。我遇到了同样的问题,我的Google搜索徒劳无功。但是,我设法找到了问题所在。可能有很多原因导致此错误,但由于以下原因而导致出现此错误,因此我想与其他开发人员分享。

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


2

好的,对我来说工作正常,仅将“ servlet类”分配给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>

但是由于某种原因,我必须重新启动计算机才能在本地主机上工作。如果仍然无法正常工作?您必须在“ servlet”标记之间的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

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

当时正在将jersey休息服务合并到基于Maven的Spring应用程序中,并收到此错误。


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

就我而言,从战争中导入后,我在构建路径中两次添加了jar。删除显示错误部署描述符错误页面的多余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的故障等等,所以让我们尝试进行一些更改,看看它是否有反应。因此,我在web.xml文件中做了一个空格+退格键,只是为了使Eclipse知道文件已更改,然后保存了它。下一步是重新启动Tomcat服务器(从Eclipse IDE),瞧,它又能正常工作了!

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


-1

此异常的主要原因是:

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

在内部检查此配置 <init-param>


@jfeferman显然,这是尝试提供问题的答案。在LQP队列中进行检查时,请多加注意。
TylerH '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.