Cá thể ResourceConfig không chứa bất kỳ lớp tài nguyên gốc nào


79

Có gì sai ở đây?

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)

Bộ lọc:

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

Mã:

@Path ("/admin")
public class AdminUiResource {

  @GET
  @Produces ("text/html")
  @Path ("/singup")
  public Viewable getSignUp () {
    return new Viewable("/public/signup", "Test");
  }
}

Của bạn "/singup"thay vì "/signup"có bất kỳ tác dụng ở đây?
Ken Williams

nó phải là một servlet, không phải là một bộ lọc
Emre TURKIS

kiểm tra xem tên gói và các thông số khác của bạn có đúng không.
Gaurav

Câu trả lời:


82

Bạn đã thử thêm chưa

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

định nghĩa SpringServlet của bạn? Rõ ràng là thay thế my.package.name bằng gói AdminUiResource và đảm bảo rằng nó nằm trong classpath.


3
Đối với những người không sử dụng Spring: Bạn cần thêm cái này init-paramvào com.sun.jersey.spi.container.servlet.ServletContainerservlet.
zb226

33

Tôi là người mới đến Jersey - Tôi đã gặp vấn đề tương tự, Nhưng khi tôi xóa "/" và chỉ sử dụng @path ("admin"), nó đã hoạt động.

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

Tôi đang sử dụng Spring JAX-RS, Jersey. Giải pháp này đang hoạt động tốt đối với tôi.
nhật

30

BẠN CẦN THÊM TÊN GÓI CỦA BẠN TẠI

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

CŨNG CÓ MỘT ĐIỀU TÔI ĐÃ LƯU Ý,
tôi cần phải làm mới dự án của mình sau khi MAVEN BUILD nếu không nó sẽ hiển thị cho tôi một lỗi tương tự.
Hãy bình luận Nếu bạn biết lý do tại sao chúng tôi cần làm mới dự án?


2
Bạn rock! Nó hoạt động chính xác khi tôi làm mới dự án của mình sau khi Cài đặt Maven! Cảm ơn. :)
Mahan

2
@Tmp cảm ơn, điều đó thực sự kỳ lạ. Sau khi làm mới nó hoạt động tốt. Thêm một cho bạn hack
Arun

28

Điều này có nghĩa là, nó không thể tìm thấy bất kỳ lớp nào có thể được thực thi dưới dạng dịch vụ web jersey RESTful.

Kiểm tra:

  • Cho dù ' com.sun.jersey.config.property.packages' bị thiếu trong web.xml của bạn.
  • Giá trị cho tham số ' com.sun.jersey.config.property.packages' có bị thiếu hoặc không hợp lệ hay không (gói được đề cập không tồn tại). Nó phải là một gói mà bạn đã đặt các lớp POJO của mình chạy dưới dạng dịch vụ áo đấu.
  • Cho dù có tồn tại ít nhất một lớp POJO, có một phương thức được chú thích bằng @Paththuộc tính hay không.

Vì lý do nào đó, tôi có thuộc tính này có tên jersey.config.server.provider.packages và nó hoạt động dưới Glassfish. Sau khi đổi tên, nó cũng hoạt động trong Jetty.
Odysseus

3
Một vài dòng trong tệp cấu hình của tôi tham chiếu đến một thư mục trống gây ra lỗi này. <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

12

Gói tài nguyên của bạn nên chứa ít nhất một POJO được một trong hai chú thích với @Pathhoặc có ít nhất một phương pháp chú thích với @Pathhoặc một phương pháp vấn thiết kế theo yêu cầu, chẳng hạn như @GET, @PUT, @POST, hoặc @DELETE. Các phương thức tài nguyên là các phương thức của một lớp tài nguyên được chú thích với một bộ chỉ định phương thức yêu cầu. Điều này đã giải quyết vấn đề của tôi ...


11

Tôi đã gặp sự cố này với JBOSS EAP 6.1. Tôi đã có thể triển khai mã của mình thông qua eclipse tới máy chủ JBOSS nhưng khi tôi cố gắng triển khai tệp dưới dạng tệp WAR cho JBOSS, tôi bắt đầu gặp lỗi này.

Giải pháp là định cấu hình web.xml để hoạt động bình thường với JBOSS bằng cách cho phép cả hai hoạt động cùng nhau.

Hai dòng sau đã được nhận xét trong web.xml để cho phép JBOSS thực hiện các cấu hình riêng của nó

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

Và sau đó thêm các thông số ngữ cảnh sau vào sau

<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
Đề xuất này phù hợp với tôi trên Wildfly 8.1. Tuy nhiên, không cần phải thêm <context-param/>phần. Chỉ có để loại bỏ <param-name>com.sun.jersey.config.property.packages</param-name> <init-param/>phần.
Donovan Muller

3
Tương tự cho tôi. Chỉ cần bình luận / loại bỏ đã <init-param>khắc phục sự cố này trên Wildly 8.2.0; tuy nhiên, tôi có những rắc rối khác như ứng dụng tôi đang triển khai sẽ không chạy với Jersey trên Wildly. Jersey (được GlassFish sử dụng) và RestEasy (được Wildfly sử dụng) có cấu hình khác nhau.
đèn lồng vào

2
Tôi đã vật lộn trong vài giờ. Điều này thực sự đã giúp tôi!
blaa

10

Về cơ bản tôi đã sửa nó như bên dưới và mọi thứ hoạt động tốt.

<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

Tôi nhận được ngoại lệ này, vì thiếu ResourseConfig trong Web.xml.

Thêm vào:

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

Lớp dịch vụ có nghĩa là: lớp chứa các dịch vụ như: @Path("/orders")


7

Tôi đã gặp vấn đề tương tự khi cố gắng chạy ứng dụng web từ một dự án nhật thực. Ngay sau khi tôi sao chép các tệp .class vào /WEB-INF/classesnó đã hoạt động hoàn hảo.


vâng..bạn nói đúng ... Do một số lỗi trong mã java của tôi, các tệp lớp không được tạo đúng cách. Do đó lỗi ở trên xảy ra với tôi .. Đã sửa các lỗi java đó, xóa mã và lớp mới là các tệp được tạo. Sau khi tạo tệp lớp, lỗi trên đã được sửa cho tôi. Cảm ơn bạn Rodrigo Asensio ..

vì vậy bạn phải thiết lập nó trong đó các tệp .class được xây dựng ở đó? Thats lạ mà nhật thực hoặc sometihng doesnt làm điều đó tự động
Dukeatcoding

6

Tôi đã gặp vấn đề tương tự, thử nghiệm một loạt các ví dụ khác nhau và thử tất cả các giải pháp khả thi. Điều cuối cùng khiến nó hoạt động với tôi là khi tôi thêm một @Path("")dòng bên trên lớp, tôi đã bỏ nó đi.


5

Gặp vấn đề tương tự và phát hiện ra rằng đó là vấn đề với cách tôi triển khai mã nguồn của mình. Như thông báo lỗi nói: "...does not contain any root resource classes". Vì vậy, nó không thể tìm thấy bất kỳ lớp tài nguyên nào trong gói đã cấu hình. Tôi chỉ triển khai các lớp sai - đó là lý do tại sao nó không nhận.

Tôi đã quên triển khai tệp lớp của mình trong thư mục / WEB-INF / lớp của WAR - ban đầu tôi chỉ có nó trực tiếp trong thư mục gốc của tệp WAR. Vì vậy, khi nó tìm kiếm các lớp tài nguyên, nó đã không tìm thấy chúng - bởi vì chúng tồn tại ở một vị trí khác (sai).


4

Vấn đề tương tự - web.xml trông như thế này:

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

Việc cung cấp một ứng dụng tùy chỉnh sẽ ghi đè lên mọi lớp tự động phát hiện được cấu hình XML. Bạn cần triển khai các phương pháp phù hợp để viết mã của riêng bạn để kết nối các lớp. Xem javadocs.


3

Một nguyên nhân khác có thể gây ra lỗi này là bạn đã quên thêm các thư viện đã có trong /WEBINF/libthư mục vào đường dẫn xây dựng (ví dụ: khi nhập .war-tệp và không kiểm tra thư viện khi được hỏi trong trình hướng dẫn). Chỉ xảy ra với tôi.


3

Điều đó đã xảy ra với tôi khi tôi triển khai main.jar của mình mà không chọn hộp thêm mục nhập thư mục trong menu jar xuất trong Eclipse .


2

Vâng, hơi muộn để trả lời. Tôi đã gặp phải vấn đề tương tự và các tìm kiếm trên Google của tôi đều vô ích. Tuy nhiên, tôi đã cố gắng tìm ra vấn đề là gì. Có thể có nhiều lý do dẫn đến lỗi này nhưng tôi gặp lỗi do những điều sau và tôi muốn chia sẻ điều này với các nhà phát triển đồng nghiệp của mình.

  1. Trước đây tôi đã sử dụng Jersey 1.3 và gặp lỗi này. Nhưng khi tôi nâng cấp các bình lên phiên bản Jersey mới nhất, vấn đề này đã được giải quyết.
  2. Một trường hợp khác mà tôi gặp lỗi này là khi tôi đang cố gắng triển khai dịch vụ của mình vào JBoss bằng cách xây dựng một tệp chiến tranh. Tôi đã mắc lỗi khi đưa các tệp Java vào .war thay vì các lớp java.

2

Tôi đã phải thêm một dấu gạch chéo về phía trước vào cuối @path

@Path ("/admin/") 

2

Ok ... Đối với tôi, chỉ cần gán "lớp servlet" cho com.sum.jersey.spi.container.servlet.ServletContainer, tôi đang sử dụng 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>

nhưng vì một số lý do, tôi phải khởi động lại máy tính của mình để hoạt động trong máy chủ cục bộ của mình. Nếu vẫn không hoạt động? Bạn phải thêm mã này vào web.xml của mình giữa thẻ "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" là tên gói mà bạn có các lớp của mình. Nếu bạn đang sử dụng IDE, hãy làm mới dự án và chạy lại trong Tomcat. vẫn không hoạt động? khởi động lại máy tính của bạn và sẽ hoạt động.


2

Một điều khác cần kiểm tra là sự kết hợp của các mục nhập trước đó

Bạn có thể có trong tệp web.xml của mình như sau:

<init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.acme.rest</param-value>
</init-param>

và bạn có thể có

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

nhưng bạn không thể có cả hai hoặc bạn gặp loại lỗi này. Cách khắc phục trong trường hợp này là nhận xét cái này hay cái kia (có thể là đoạn mã đầu tiên sẽ được nhận xét)


1

vâng, thêm init param cho com.sun.jersey.config.property.packages đã khắc phục sự cố này cho tôi.

đã hợp nhất các dịch vụ nghỉ ngơi trên áo vào ứng dụng mùa xuân dựa trên maven và gặp lỗi này.


1

Tôi cũng gặp lỗi kiểu này, vui lòng quan tâm đến các cấu hình trong xml.

tôi đã viết com.sun.jersey.comfig.property.packages

Thay vì com.sun.jersey.config.property.packages

Sau khi sửa nó hoạt động.


1

vấn đề đó là do jersey không thể tìm thấy gói phụ thuộc cho dịch vụ nghỉ ngơi của bạn được khai báo

kiểm tra phân phối gói dự án của bạn và xác nhận rằng giá trị đó bằng với giá trị tham số web.xml của bạn


1

Có lẽ là quá muộn nhưng đây là cách tôi giải quyết lỗi này.

Nếu giải pháp này không hoạt động,

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

Trong nhật thực:

Nhấp chuột phải vào Dự án của bạn hoặc Chọn Dự án và nhấn Alt + Enter Ở phía bên trái của cửa sổ đã mở, tìm Đường dẫn xây dựng Java

Chọn Thư viện từ bảng tab bên phải: Nếu có bất kỳ thứ gì bị hỏng hoặc hiển thị dấu gạch chéo trên đầu bình, hãy xóa và thêm lại bình đó

Áp dụng và Đóng

Xây dựng lại dự án của bạn


0

Trong trường hợp của tôi, tôi đã thêm các lọ hai lần trong đường xây dựng sau khi nhập từ chiến tranh. Nó hoạt động tốt sau khi loại bỏ các lọ phụ đang hiển thị các trang lỗi bộ mô tả triển khai lỗi

thêm vào

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

0

Cũng xảy ra vấn đề này, hai lần vì những lý do khác nhau. Lần đầu tiên tôi quên bao gồm

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

như được mô tả trong các nhận xét trước đó và khi tôi đã làm điều đó, nó bắt đầu hoạt động.

Tuy nhiên, ... một ngày khác, tôi khởi động Eclipse, mong đợi sẽ tiếp tục ở nơi tôi đã dừng lại, và thay vì để chương trình của tôi hoạt động, nó lại hiển thị cùng một lỗi. Tôi bắt đầu kiểm tra xem liệu tôi có vô tình thực hiện một số thay đổi và lưu tệp bị hỏng hay không, nhưng không thể tìm thấy lỗi như vậy và tệp trông giống hệt như các ví dụ mà tôi có, tất cả đều theo thứ tự. Vì nó đã hoạt động vào ngày hôm trước, sau một số tìm kiếm ban đầu, tôi nghĩ, có thể đó là lỗi Eclipse hoặc Tomcat hoặc thứ gì đó, vì vậy hãy thử thực hiện một số thay đổi và xem nó có phản ứng hay không. Vì vậy, tôi đã tạo khoảng trắng + xóa lùi trong tệp web.xml, chỉ để đánh lừa Eclipse rằng tệp đã bị thay đổi và sau đó lưu nó. Bước tiếp theo là khởi động lại máy chủ Tomcat (từ Eclipse IDE) và thì đấy, nó hoạt động trở lại!

Có lẽ ai đó có kinh nghiệm rộng hơn có thể giải thích vấn đề thực sự đằng sau tất cả những điều này là gì?


-1

Nguyên nhân chính của Ngoại lệ này là:

Bạn chưa cung cấp tên gói thích hợp nơi bạn sử dụng @Pathhoặc quên định cấu hình trong tệp web.xml / Cấu hình (Tên gói tệp lớp API Rest, Tên gói lớp của bạn)

Kiểm tra cấu hình này bên trong <init-param>


@jfeferman Đây rõ ràng là một nỗ lực nhằm đưa ra câu trả lời cho câu hỏi. Hãy cẩn thận hơn khi xem xét trong hàng đợi LQP.
TylerH
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.