2010-03-04 4 views
0

Tomcat에 배포 된 RESTEasy를 사용하여 REST-ful 웹 서비스를 개발 중입니다. 예외 메시지를 취하는 오류 페이지를 구성하고 요청 중에 예외가 발생하면이를 기반으로 XML을 생성합니다.Tomcat에서 실행되는 RESTEasy 웹 서비스에서 오류 페이지가 무시되는 이유는 무엇입니까?

이 예외는 응용 프로그램에서 생성 된 예외에 대해 정상적으로 작동합니다. 그러나 클라이언트가 올바로 비 정렬화할 수없는 잘못된 XML을 전송하면 javax.xml.bind.UnmarshalException이 발생하고 Tomcat의 기본 오류 페이지가 내 대신 사용됩니다.

오류 페이지를 web.xml의 오류 코드 500으로 구성했습니다.

RESTEasy를 사용할 때 오류 페이지에서 오류를 처리하는 올바른 방법이나 다른 방법이 있습니까?

답변

1

가장 좋은 방법은 ExceptionMapper를 사용하는 것입니다. ExceptionMapper를 구현하는 클래스 UnmarshalExceptionMapper를 작성합니다. 이것을 "@Provider"로 주석 처리하고 Application 생성자에서 "classes.add (UnmarshalExceptionMapper.class)"또는 "singletons.add (new UnmarshalExceptionMapper())"를 수행합니다. 현재 내용 협상은 예외 매퍼에 대해 수행되지 않기 때문에 당신이 "응용 프로그램/XML"에 대한 유형을 설정해야합니다

@provider 
public class UnmarshalExceptionMapper 
      implements ExceptionMapper<UnmarshalException> { 
    public Response toResponse(UnmarshalException exception) { 
     ResponseBuilder rb = 
      Response.status(
        Response.Status.BAD_REQUEST) // Most appropriate HTTP status code 
      .entity(your xml goes here) 
      .type("application/xml"); 
     return rb.build(); 
    } 
} 

참고 :

귀하의 예외 매퍼는 다음과 같이 보일 것입니다. 자신의 콘텐츠 협상을 수행하려면 요청에서 HttpHeaders를 가져 와서 "accept"헤더를 찾고 그에 따라 유형을 설정하십시오.

관련 문제