2017-09-21 17 views
0

javax.ws.rs.ext.ExceptionMapper 클래스로 WebApplicationException을 잡으려고하는데 이상한 동작이 발생합니다.JAX-RS로 WebApplicationException을 잡는 방법

이 내 간단한 휴식 방법 :

@GET 
@Path("/saySomething") 
public List<String> saySomething() { 
    String response = EchoRestClient.ping(); 
    List<String> list = new ArrayList<>(); 
    list.add(response); 
    list.add("okay"); 
    return list; 
} 

(1)이 다른 나머지 API를 호출하는 클라이언트 클래스는 다음과 같습니다

public class EchoRestClient { 
    private static Client client = ClientBuilder.newClient(); 

    public static String ping() { 
     String serviceUrl = PropertyReader.getProperty(ServiceUrl.ECHO_SERVICE); 

     Response response = client 
       .target(serviceUrl) 
       .path("saySomething") 
       .request(ExtendedMediaType.APPLICATION_UTF8) 
       .get(); 

     if (response.getStatus() == Response.Status.OK.getStatusCode()) { 
      return response.getEntity(String.class); 
     } 

     throw new WebApplicationException(response); 
    } 
} 

그리고 내 사용자 지정 예외 핸들러 위에 던져진 예외를 잡아 내지 못합니다 :

@Provider 
public class WebservletExceptionMapper implements ExceptionMapper<Exception> { 
    @Override 
    public Response toResponse(Exception exception) { 

     System.out.println("caught exception"); 
     Response response; 

     if (exception instanceof WebApplicationException) { 
      response = ((WebApplicationException) exception).getResponse(); 
     } else { 
      response = Response....build(); 
     } 

     return response; 
    } 
} 

(2)하지만 내가 할 경우이 예외가 잡힌 (EchoRestClient.java) :

public static String ping() { 
    // same code then before 

    WebApplicationException e = new WebApplicationException(response); 
    throw new RuntimeException("xxxxxx", e); 
} 

내 위의 코드는 잘 작동하고 난에서 saySomething 나머지 메서드를 호출 할 때 나는 적절한 응답을 얻을 내 웹 브라우저.

하지만 EchoService 휴식 (불리는 ping 휴식 방법 포함) 배포를 취소하면 HTTP 404가 첫 번째 사례에서 발견되지 않습니다. WebApplicationException이 잡히지 않았기 때문에 RuntimeException을 던질 필요가있다 (두 번째 경우).

문서에 따르면 예외 계층은 WebApplicationException extends RuntimeException입니다.

무엇이 잘못 되었나요?

- 편집 -

그때는 잘 잡힌이 예외가 던져 경우 : throw new WebApplicationException(response.getStatus())

을하지만이 사람은 작동하지 않습니다 throw new WebApplicationException(response)

는 응답 오브젝트에 뭔가 잘못인가 ?

답변

0

시도 불행히도 그것은 도움이되지 않았다

@Provider 
public class WebservletExceptionMapper implements ExceptionMapper<WebApplicationException> { 
+0

을하고. – zappee