2010-12-10 22 views
74

这里发生了什么问题?ResourceConfig实例不包含任何根资源类

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"); 
    } 
} 
+0

是您'“/ singup“'而不是''/注册”'在这里有什么作用? – 2015-01-29 17:04:31

+0

它必须是一个servlet,而不是一个过滤器 – 2017-07-11 11:07:48

回答

8

基本上我纠正它像下面,一切工作正常。

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

你有没有尝试添加

<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-param'添加到'com.sun.jersey.spi.container.servlet.ServletContainer'的servlet。 – zb226 2015-06-17 15:36:39

2

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

  1. 我以前使用过泽西岛1.3,我得到这个错误。但是当我将瓶子升级到泽西岛的最新版本时,这个问题就解决了。
  2. 另一个我得到这个错误的例子是当我试图通过构建一个war文件将我的服务部署到JBoss中。我错误地将.java文件包含在.war中而不是java类中。
3

有同样的问题,并发现这是我部署我的源代码的方式的问题。正如错误消息所示:"...does not contain any root resource classes"。所以它在配置的软件包中找不到任何资源类。我只是部署了错误的类 - 这就是为什么它没有拿起它。

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

12

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

7

我试图从eclipse项目运行webapp时遇到同样的问题。我很快就将.class文件复制到/WEB-INF/classes,它的工作非常完美。

+0

是的..你是正确的...由于我的java代码中的错误,类文件没有正确生成。因此,上述错误发生在我身上..修正了那些Java错误,清理了代码和新类生成的文件。课堂文件生成后,上述错误为我解决。谢谢Rodrigo Asensio .. – 2012-08-30 07:35:44

+0

所以你必须设置它,建立.class文件去那里?奇怪的是,日食或sometihng不会自动执行 – Dukeatcoding 2013-02-10 19:32:42

26

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

检查:

  • 无论 'com.sun.jersey.config.property.packages' 缺少在 web.xml中。
  • 'com.sun.jersey.config.property.packages' param是否缺失或无效(提到的软件包不存在)。它应该是一个可以让你的POJO类作为运动服的运行包。
  • 是否至少存在一个POJO类,其中有一个注解为@Path属性的方法。
+0

出于某种原因,我有这个属性名为* jersey.config.server.provider.packages *,它在Glassfish下工作。 重命名后,它也可以在Jetty中使用。 – Odysseus 2015-11-07 20:34:10

+3

我的配置文件中有几行引用了一个空目录,导致了这个错误。 ' 新泽西Web服务的com.sun.jersey.spi.spring.container.servlet.SpringServlet <! - - ​​com.sun.jersey.config.property.packages -------> package.without.any.webservices - > <负载导通启动> 1 ' – Nielsvh 2016-01-23 00:59:41

5

我有同样的问题,测试了一堆不同的例子,并尝试了所有可能的解决方案。终于为我工作的是,当我在班级线上添加@Path("")时,我已经把它留下了。

29

我是新来的泽西岛 - 我有同样的问题,但是当我删除了“/”,并只使用@path(“管理员”)它的工作。

@Path("admin") 
public class AdminUiResource { ... } 
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。

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

2

我不得不添加一个尾随正斜杠@path

@Path ("/admin/") 
3

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

3

它发生在我身上时,我部署了我main.jar文件,而不检查添加目录条目在出口罐子菜单Eclipse中

1

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

合并一个泽西休息服务到基于Maven的春天应用程序,并得到了这个错误。

9

我在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> 
+2

这个建议为我上Wildfly 8.1。尽管不需要添加''部分。只需要删除'​​com.sun.jersey.config.property.packages'''部分。 – 2014-09-17 13:50:39

+2

同样适用于我。只是评论/删除''在Wildly 8.2.0上解决了这个问题;不过我还有其他麻烦,比如我部署的应用程序不能在Jersey上运行。 Jersey(由GlassFish使用)和RestEasy(由Wildfly使用)具有不同的配置。 – lantrix 2015-03-27 02:45:08

+1

这个建议对我来说是Wildfly10。 – 2017-04-10 11:02:24

1

我也有这种错误添加以下上下文参数,请注意配置的XML格式。

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

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

修正后它的工作。

26

您需要添加您的套件名称AT

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

ALSO ONE愚蠢的事情我已经注意到,
我需要刷新我的项目后Maven构建否则它告诉我同样的错误。
请评论如果你知道我们需要刷新项目的原因?

+1

你摇滚!在Maven Install之后刷新我的项目时,它工作正常!谢谢。:) – Mants 2017-02-23 06:38:18

+1

@Tmp谢谢,那真的很奇怪。刷新其工作正常后。加一个给你的黑客 – Arun 2017-06-11 16:03:50

1

这个问题是因为球衣找不到dependecy包为您的休息 服务declarated

检查项目包分配,并断言这是等于你的web.xml参数值的方式

2

好......我很好地工作仅仅只有分配“的servlet类”到com.sum.jersey.spi.container.servlet.ServletContainer,我使用的IDE(Eclipse的火星)

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

b出于某种原因,我必须重新启动我的电脑才能在本地主机上工作。如果还不行?你必须在你的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> 

但你不能有或者你得到这种错误。在这种情况下的修复将是注释掉其中一个(可能第一个代码片段将被注释掉)

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>/* Name of Package where your service class exists */</param-value> 
</init-param> 

在Eclipse:

右击在您的项目或选择项目,按Alt + Enter键上的左手侧打开的窗口中找到Java构建路径

选择库从右边选项卡盘EL:如果有什么被损坏或显示在罐子的顶部十字标记,删除和添加同一个jar再次

应用和关闭

重建项目

相关问题