2017-04-08 1 views
0

내 REST 응용 프로그램 (GlassFish 4.1.2)에서 POJO를 JSON으로 변환하고 다시 되돌리려합니다. 모든 예제는보기 쉽게하지만 뭔가를 놓치고 있습니다. 여기 MOXyJsonProvider가 작동하지 않습니다.

내 응용 프로그램입니다 :

@ApplicationPath("/") 
public class RootApp extends Application { 

    @Override 
    public Set<Class<?>> getClasses() { 
     HashSet set = new HashSet<Class<?>>(); 
     set.add(HelloWorld.class); 
     return set; 
    } 

    @Override 
    public Set<Object> getSingletons() { 
     HashSet set = new HashSet<Object>(); 

     MOXyJsonProvider moxyJsonProvider = new MOXyJsonProvider(); 
     moxyJsonProvider.setFormattedOutput(true); 
     set.add(moxyJsonProvider); 

     return set; 
    } 
} 

그리고 여기에 자원이다

@Path("helloworld") 
public class HelloWorld { 

    private static int counter = 1; 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response getInevitableMessage() {  
     JsonHello hj = new JsonHello("Hello World", counter++);  
     return Response.ok(hj).build(); 
    }  
} 

그리고 마지막으로하고 이상은 JSON과에서 변환 할 수있는 POJO입니다 :

public class JsonHello { 

    private int count; 
    private String message; 

    public JsonHello(String message, int count) { 
     this.message = message; 
     this.count = count; 
    } 

    public int count() { return count; } 
    public void count(int value) { count = value; } 

    public String message() { return message; } 
    public void message(String value) { message = value; } 
} 

thread에서 태그가 지정된 답변을 언급하고 있습니다. "/ helloworld"에 액세스하려고하면 다음 예외가 발생합니다.

org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: Could not initialize class org.eclipse.persistence.jaxb.BeanValidationHelper 

이 응용 프로그램은 리소스가 문자열을 반환하는 경우에만 작동합니다. 글래스 피시가 데코레이터를 통해 애플리케이션을 설정하게하기 때문에 web.xml 파일에는 아무 것도 없습니다.

내가 여기에 무엇을 놓치고 있는지 알 수 있습니까?

+0

종속성은 어떻게 처리합니까? 메이븐? 그렇다면 어떤 의존성을 사용하고 있습니까? 항아리를 수동으로 추가 하시겠습니까? 그렇다면 어떤 항아리를 사용하고 있습니까? 어떤 버전을 사용하고 있습니까? Glassfish의 어떤 버전을 사용하고 있습니까? 이 질문들 각각에 대답하고, 의견 (코멘트가 아님)을 편집하십시오 –

+0

@peeskillet이 프로젝트는 Idea 2017.1에서 생성되었으며 GlassFish 4.1.2를 사용합니다. Ant 또는 Maven이 아닌 IDE의 빌드 시스템을 사용합니다. 라이브러리는 수동으로 가져오고 Jackson 2.8.4를 사용하고 있습니다. 라이브러리에 "제공됨"(즉, 이미 GlassFish의 일부 임) 대 응용 프로그램과 함께 패키징되어 있으며 문제 일 수 있음을 IDE에 알리는 방법을 모르겠습니다. – AlanObject

+0

Jackson을 사용하는 경우 MOXy를 등록하려는 이유는 무엇입니까? –

답변

0

@peeskillet이 제안한 방향을 사용하여 문제를 해결했습니다. MOXyJsonProvider은 불필요합니다.

해결하기 어려운 한 가지 문제는 웹상의 거의 모든 예제가 web.xml 파일로 서블릿을 구성한다고 가정한다는 것입니다. 내가하는 모든 구성은 내부에서 응용 프로그램 개체입니다. 저지 문서는이 사실을 분명히하지 않습니다. 나머지 자원을 생산하고 완벽하고 노력없이 JSON으로 트랜스 코딩되는 다양한 POJO를 소비 할이 시점에서

@Override 
public Set<Class<?>> getClasses() { 
    HashSet set = new HashSet<Class<?>>(); 
    set.add(JacksonFeature.class); 
    set.add(MyObjectMapperProvider.class); 
    set.add(Home.class); 
    set.add(HelloWorld.class); 
    return set; 
} 

: 어떤 작업을 종료하는 것은 이것이다.

그냥이 질문을 삭제하는 대신에 나는 이것을 발견하는 데 소비 한 시간을 절약하기 위해이 대답을 여기에 넣을 것입니다.

관련 문제