2014-09-11 2 views
0

내 맞춤 RuntimeException을 잡는 맞춤 ExceptionMapper이 있습니다. 문제는 내 사용자 정의 Exception을 던지면 ExceptionMapper이 호출되지 않는다는 것입니다.ExceptionMapper가 내 예외를 처리하지 않습니다. JBOSS

ExceptionMapper 클래스에서 @Provider을 설정하고로도 web.xml에 등록했다 :

<context-param> 
    <param-name>resteasy.providers</param-name> 
    <param-value>com.package.myMapper</param-value> 
</context-param> 

그리고 내 매퍼는 다음과 같습니다

import javax.ws.rs.core.Response; 
import javax.ws.rs.ext.ExceptionMapper; 
import javax.ws.rs.ext.Provider; 

@Provider 
public class ResponseExceptionMapper implements ExceptionMapper<ResponseException>{ 

    @Override 
    public Response toResponse(ResponseException arg0) { 
     // TODO Auto-generated method stub 
     System.out.println("in my mapper"); 
     return Response.status(513).entity(arg0.getMessage()).build(); 
    } 

} 

내 예외 :

public class ResponseException extends RuntimeException { 

    public ResponseException() { 
     super(); 
    } 

    public ResponseException(String msg) { 
     super(msg); 
    } 

    public ResponseException(String msg, Exception e) { 
     super(msg, e); 
    } 
} 

무엇 나는 틀린가? ...

답변

0

ResponseException을 RuntimeException 대신 Exception으로 확장하십시오. RESTEasy가 같아과 jboss이 제공하는 대신 예외를 잡기, 나는 똑같은 문제를 겪고 그것은 확장 예외 대신에 해결되었다 :


    public class ResponseException extends Exception { 

     public ResponseException() { 
      super(); 
     } 


     public ResponseException(String msg) { 
      super(msg); 
     } 

     public ResponseException(String msg, Exception e) { 
      super(msg, e); 
     } 
    } 

그리고 예외 매퍼의 예 :


    import org.apache.log4j.Logger; 

    import javax.ws.rs.core.Response; 
    import javax.ws.rs.ext.ExceptionMapper; 
    import javax.ws.rs.ext.Provider; 

    @Provider 
    public class BadRequestExceptionMapper implements ExceptionMapper { 

     private static final Logger log = Logger.getLogger(BadRequestExceptionMapper.class); 

     @Override 
     public Response toResponse(BadRequestException e) { 

      log.info("Bad request: " + e.getMessage()); 

      return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build(); 
     } 
    } 

관련 문제