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"있습니까?
Ken Williams

그것은 서블릿이 아닌 필터해야합니다
엠레 Türkiş

패키지 이름 및 기타 매개 변수가 올바른지 확인하십시오.
Gaurav

답변:


82

추가해 보셨습니까?

<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가있는 패키지로 바꾸고 클래스 경로에 있는지 확인하십시오.


3
사람들이 봄을 사용하지 않는 경우 :이 작업을 추가 할 필요가 init-param받는 com.sun.jersey.spi.container.servlet.ServletContainer서블릿.
zb226 2015-06-17

33

저는 Jersey를 처음 사용했습니다. 동일한 문제가 있었지만 "/"를 제거하고 @path ( "admin") 만 사용하면 작동했습니다.

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

저는 Spring JAX-RS, Jersey를 사용하고 있습니다. 이 솔루션은 저에게 잘 작동합니다.
Sun

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 설치 후 프로젝트를 새로 고치면 제대로 작동했습니다! 감사. :)
마한

2
@Tmp 감사합니다, 정말 이상합니다. 새로 고침 후 잘 작동합니다. 플러스 당신을 위해 하나를 해킹
아룬

28

이것은 저지 RESTful 웹 서비스로 실행할 수있는 클래스를 찾을 수 없습니다.

검사:

  • 여부 'com.sun.jersey.config.property.packagesweb.xml에서 '이 누락 .
  • 값 'com.sun.jersey.config.property.packages '매개 변수의 이 누락 또는 유효하지 않은지 (언급 된 패키지가 존재하지 않음). 저지 서비스로 실행되는 POJO 클래스를 넣은 패키지 여야합니다.
  • @Path속성으로 주석이 달린 메소드가있는 POJO 클래스가 하나 이상 있는지 여부 입니다.

어떤 이유로 jersey.config.server.provider.packages 라는이 속성이 있었고 Glassfish에서 작동했습니다. 이름을 바꾼 후에는 Jetty에서도 작동합니다.
Odysseus 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

12

귀하의 자원 패키지는 하나의 주석을 붙일 수 있고 적어도 하나의 POJO 포함해야 @Path또는 적어도 하나의 방법으로 주석 한 @Path같은 또는 요청 방법 지정자, @GET, @PUT, @POST, 또는 @DELETE. 리소스 메서드는 요청 메서드 지정자로 주석이 달린 리소스 클래스의 메서드입니다. 이것은 내 문제를 해결했습니다 ...


11

JBOSS EAP 6.1에서이 문제를 겪었습니다. 이클립스를 통해 JBOSS 서버에 내 코드를 배포 할 수 있었지만 파일을 JBOSS에 WAR 파일로 배포하려고하면이 오류가 발생하기 시작했습니다.

해결책은 web.xml이 JBOSS와 제대로 작동하도록 두 가지가 함께 작동하도록 구성하는 것이 었습니다.

다음 두 줄은 JBOSS가 자체 구성을 수행 할 수 있도록 web.xml에서 주석 처리되었습니다.

<!--  
    <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>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 코드의 오류로 인해 클래스 파일이 제대로 생성되지 않습니다. 따라서 위의 오류가 나를 위해 발생했습니다. 그 자바 오류를 수정하고 코드를 정리하고 새 클래스는 파일이 생성되었습니다. 클래스 파일 생성 후 위의 오류가 수정되었습니다. 감사합니다 Rodrigo Asensio ..

그래서 빌드 된 .class 파일이 거기에 가도록 설정해야합니까? 그게 이상한 일식 또는 sometihng 나던 자동으로 수행하는 것이
Dukeatcoding

6

나는 동일한 문제가 있었고 여러 가지 예제를 테스트하고 가능한 모든 솔루션을 시도했습니다. 마침내 나를 위해 일 @Path("")하게 된 것은 수업 라인에 오버 라인을 추가했을 때 그것을 생략했습니다.


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

Eclipse의 jar 내보내기 메뉴에서 디렉토리 항목 추가 상자를 선택 하지 않고 main.jar을 배포했을 때 발생했습니다 .


2

글쎄, 답장하기 조금 늦었 어. 나는 같은 문제에 직면했고 내 Google 검색은 헛된 것입니다. 그러나 나는 문제가 무엇인지 알아낼 수 있었다. 이 오류가 발생하는 이유는 여러 가지가 있지만 다음과 같은 이유로 오류가 발생했으며이를 동료 개발자와 공유하고 싶었습니다.

  1. 이전에 Jersey 1.3을 사용했는데이 오류가 발생했습니다. 하지만 항아리를 최신 버전의 Jersey로 업그레이드했을 때이 문제가 해결되었습니다.
  2. 이 오류가 발생한 또 다른 경우는 war 파일을 작성하여 JBoss에 서비스를 배포하려고 할 때였습니다. Java 클래스 대신 .war에 Java 파일을 포함하는 실수를 저질렀습니다.

2

@path 끝에 후행 슬래시를 추가해야했습니다.

@Path ("/admin/") 

2

좋아 ... "서블릿 클래스"를 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>

하지만 어떤 이유로 내 로컬 호스트에서 작업하려면 컴퓨터를 재부팅해야했습니다. 여전히 작동하지 않으면? 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>

그러나 둘 다 가질 수 없거나 이런 종류의 오류가 발생합니다. 이 경우 수정 사항은 둘 중 하나를 주석 처리하는 것입니다 (아마 첫 번째 코드 조각이 주석 처리됨).


1

예, com.sun.jersey.config.property.packages에 대한 init 매개 변수를 추가하면이 문제가 해결되었습니다.

저지 휴식 서비스를 maven 기반 스프링 응용 프로그램에 병합 하고이 오류가 발생했습니다.


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 빌드 경로를

오른쪽 탭 패널에서 라이브러리 선택 : 손상되거나 항아리 위에 십자 표시가있는 것이 있으면 제거하고 동일한 항아리를 다시 추가하십시오.

적용 후 닫기

프로젝트 재 구축


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>my.package.name</param-value>
</init-param>

이전 의견에서 설명한대로 작업을 시작했습니다.

그러나 ... 또 다른 날 Eclipse를 시작하여 중단 한 부분부터 계속할 것으로 예상하고 프로그램이 작동하는 대신 동일한 오류가 다시 표시되었습니다. 실수로 일부를 변경하고 손상된 파일을 저장했는지 확인하기 시작했지만 이러한 오류를 찾을 수 없었고 파일이 내가 가진 예제와 똑같이 순서대로 표시되었습니다. 전날 작동했기 때문에 초기 검색 후 Eclipse 또는 Tomcat 글리치 또는 무언가 일 수 있다고 생각 했으므로 일부 변경하고 반응하는지 확인하십시오. 그래서 저는 web.xml 파일에 스페이스 + 백 스페이스를 만들어서 이클립스를 속여서 파일이 변경된 것을 저장했습니다. 다음 단계는 (Eclipse IDE에서) Tomcat 서버를 다시 시작하는 것이었고 다시 작동합니다!

더 넓은 경험을 가진 사람이이 모든 것의 배후에 실제로 어떤 문제가 있었는지 설명 할 수 있을까요?


-1

이 예외의 주요 원인은 다음과 같습니다.

사용하는 적절한 패키지 이름을 지정하지 않았습니다. @Pathweb.xml / 구성 파일 (Rest API 클래스 파일 패키지 이름, 클래스 패키지 이름)에서 하거나 구성하는 것을 잊은

내부 구성 확인 <init-param>


@jfeferman 이것은 분명히 질문에 대한 답변을 제공하려는 시도입니다. LQP 대기열에서 검토 할 때 더주의하십시오.
TylerH
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.