Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有请求消息的Apache CXF ExceptionMapper_Java_Rest_Exception_Exception Handling_Cxf - Fatal编程技术网

Java 带有请求消息的Apache CXF ExceptionMapper

Java 带有请求消息的Apache CXF ExceptionMapper,java,rest,exception,exception-handling,cxf,Java,Rest,Exception,Exception Handling,Cxf,我想知道这样做是否可行,或者是否有更好的方法: public class WebServiceExceptionMapper implements ExceptionMapper<Exception> { private static Logger logger = LoggerFactory.getLogger(WebServiceExceptionMapper.class); @Override public Response toResponse(Excepti

我想知道这样做是否可行,或者是否有更好的方法:

public class WebServiceExceptionMapper implements ExceptionMapper<Exception> {

  private static Logger logger = LoggerFactory.getLogger(WebServiceExceptionMapper.class);

  @Override
  public Response toResponse(Exception ex, Message requestMessage) {
    logger.error("request=" + httpMessage.etc..etc.., ex);
    return Response.status(Status.INTERNAL_SERVER_ERROR).build();
  }

}
公共类WebServiceExceptionMapper实现ExceptionMapper{
私有静态记录器Logger=LoggerFactory.getLogger(WebServiceExceptionMapper.class);
@凌驾
对响应的公共响应(异常示例,消息请求消息){
logger.error(“request=“+httpMessage.etc..etc..ex”);
返回Response.status(status.INTERNAL_SERVER_ERROR).build();
}
}

基本上,我希望不仅能够记录异常,而且能够记录触发错误的请求消息。更具体地说,如果请求包含JSON或XML,我想抓住它。

NVM。通过在我的ExceptionMapper中注入MessageContext并添加自定义RequestHandler(如下所述)解决了这个问题:

public class StringContentRequestHandler implements RequestHandler { 

private static final Logger logger = LoggerFactory.getLogger(RawContentRequestHandler.class); 

public Response handleRequest(Message m, ClassResourceInfo resourceClass) { 
    InputStream is = m.getContent(InputStream.class); 
    try { 
        CachedOutputStream bos = new CachedOutputStream(); 
        IOUtils.copy(is, bos); 

        bos.flush(); 
        is.close(); 

        m.setContent(InputStream.class, bos.getInputStream()); 
        StringBuilder builder = new StringBuilder(); 
        bos.writeCacheTo(builder, "utf-8"); 
        m.setContent(String.class, builder.toString()); 
        return null; 

    } catch (IOException ex) { 
        logger.error("IOException on getting raw content", ex); 
        return null; 
    } 
} 
}