2015-01-24 1 views
5

NetBeans Ide을 사용하여 간단한 Restful WebService를 만들려고했습니다.
내 Java EE 버전은 Java EE 7 Web입니다.GlassFish Server에서 JAX-RS 리소스를 찾을 수 없음

이 ContexPath : /DukesAgeService을 설정하여 새 Java 웹 응용 프로그램을 만들었습니다.

http://localhost:8080/DukesAgeService/

그래서 모든 것이 잘 작동 :

이제 내 응용 프로그램을 실행하는 브라우저에서 내 Index.html 페이지를 표시합니다.

그런 다음 RESTful 웹 서비스 마법사를 사용하여 간단한 리소스를 만들려고했습니다.

package firstcup.webservice; 

import javax.ws.rs.core.Context; 
import javax.ws.rs.core.UriInfo; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.PUT; 

/** 
* REST Web Service 
* 
* @author nolanof 
*/ 
@Path("dukesAge") 
public class DukesAgeResource { 

@Context 
private UriInfo context; 

/** 
* Creates a new instance of DukesAgeResource 
*/ 
public DukesAgeResource() { 
} 

/** 
* Retrieves representation of an instance of firstcup.webservice.DukesAgeResource 
* @return an instance of java.lang.String 
*/ 
@GET 
@Produces("text/plain") 
public String getText() {   
    return "hello world"; 
} 
} 

그러나이 URL에서 내 응용 프로그램을 실행 : http://localhost:8080/DukesAgeService/dukesAge 내가 404 - 찾을 수 없음 페이지를 얻을

그래서,이 클래스를 만들었습니다.

"/dukesAge"의 URL을 가진 들어오는 get 요청은 DukesAgeResource 클래스 getText 메서드로 처리됩니다. 뭐가 문제 야? 당신이 서비스를 호출하는 동안 404 오류가 발생하는 이유

감사

+0

프로젝트 폴더 구조와 함께 web.xml 파일도 게시하십시오. –

답변

6

JAX-RS 응용 프로그램 서블릿이 누락되었을 수 있습니다. web.xml에 정의하거나 xml-less로 이동하려면 Application 하위 클래스를 사용할 수 있습니다. 가장 쉬운 방법은 IMO는 주석이 달린 Application 하위 클래스를 사용하는 것입니다. 서블릿이 생성되고 서블릿 경로는 어노테이션의 값으로 설정됩니다.

@ApplicationPath("/rest") 
public class RestApplication extends Application { 
    // All request scoped resources and providers 
    @Override 
    public Set<Class<?>> getClasses() { 
     Set<Class<?>> classes = new HashSet<>(); 
     classes.add(DukesAgeResource.class); 
     return classes; 
    } 

    // all singleton resources and providers 
    @Override 
    public Set<Object> getSingletons() { 
     Set<Object> singletons = new HashSet<>(); 
     return singletons; 
    } 
} 

같은 뭔가 그런 자원이

http://localhost:8080/DukesAgeService/rest/dukesAge를 통해 리소스에 액세스 할 수 있어야합니다.

다른 방법이 있지만이 방법은 유용합니다. Glassfish는 Jersey를 사용하지만 Netbeans에서 Java EE 웹 응용 프로그램을 처음부터 만들면 컴파일 타임 Java EE 표준 클래스 (Jersey 종속성 없음) 만 가져옵니다. 그래서 위의 내용이 실제로 시작하기위한 당신의 내기입니다.

Jersey Documentation에서 다른 배포 옵션을 볼 수 있습니다. 일부 옵션의 경우 Jersey 컴파일 타임 종속성을 추가해야 할 수도 있습니다. 그래서 위의 내용을 언급했습니다. 다른 항아리는 필요하지 않았습니다.

JAX-RS 서블릿 경로를 /*으로 지정하면 404가 발생할 수 있습니다. 이는 html 페이지와 같은 정적 리소스를 제공하는 기본 서블릿과 충돌합니다. 그래서 /rest으로 설정했습니다.그것은 또한 JAX-RS에 명시되어


UPDATE는 getClasses()getSingletons() 반환 빈 세트가있는 경우, 암시 적 패키지 스캐닝이 발생하는 것을 투기. (제공자) @Provider으로 주석 된 클래스는 기본적으로 싱글 톤으로 추가되고 @Path으로 주석 된 리소스 클래스는 요청 별 객체 (각 요청마다 새 객체가 만들어 짐을 의미)가됩니다. 그래서 당신은 그냥 가지고있을 수 있습니다

그리고 그것은 똑같이 작동합니다.

+0

내 문제를 해결했습니다. 감사합니다. – nolanofra

+0

@nolanofra thx 오늘 너무 많은 시간을 낭비했습니다. – Drew

0
당신은 당신의 web.xml에 어떤 경로를 초기화 할 수도

은 아마입니다. web.xml을 확인하십시오. 그런 다음 *로 설정되어있는 경우 서비스 호출에 추가하여 작동 시키십시오.

관련 문제