2010-12-10 112 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再次

應用和關閉

重建項目