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;
}
}
}