Web services 记录soap请求和响应只包含Jax WS
我在项目中使用JAX-WS作为Web服务。我想记录这些Web服务的每个请求和响应。目前,我正在成功地记录每个请求/响应,但出于安全原因,我希望删除标题部分并保留正文,我在SOAPHandler中使用此方法在应用程序日志中写入:Web services 记录soap请求和响应只包含Jax WS,web-services,soap,jax-ws,Web Services,Soap,Jax Ws,我在项目中使用JAX-WS作为Web服务。我想记录这些Web服务的每个请求和响应。目前,我正在成功地记录每个请求/响应,但出于安全原因,我希望删除标题部分并保留正文,我在SOAPHandler中使用此方法在应用程序日志中写入: private void logToSystemOut(SOAPMessageContext smc) { Logger logger = Logger.getLogger(LogHandler.class); Boolean outbou
private void logToSystemOut(SOAPMessageContext smc) {
Logger logger = Logger.getLogger(LogHandler.class);
Boolean outboundProperty = (Boolean) smc
.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outboundProperty.booleanValue()) {
logger.info("Outbound message:");
} else {
logger.info("Inbound message:");
}
SOAPMessage message = smc.getMessage();
try {
Source source = message.getSOAPPart().getContent();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Transformer transformer = TransformerFactory.newInstance()
.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(
"{http://xml.apache.org/xslt}indent-amount", "3");
transformer.transform(source, new StreamResult(baos));
logger.info(baos.toString());
} catch (Exception e) {
logger.warn("Exception in handler: " + e);
}
}
当然,这会记录每个请求/响应,而不区分头和体。我尝试使用message.getSOAPBody(),但它一直记录为null
欢迎所有推荐
PS:这是消息的返回。getSOAPBody()是[S:Body:null]我已成功解决了使用detachnode方法处理SOAP标头的问题,如下所示:
message.getSOAPHeader().detachNode();
下面是代码如何变为的代码示例(请注意,我是如何测试soapHeader是否为非null的,因为否则它会引发null指针异常):
private void logToSystemOut(SOAPMessageContext smc) {
Logger logger = Logger.getLogger(LogHandler.class);
Boolean outboundProperty = (Boolean) smc
.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outboundProperty.booleanValue()) {
logger.info("Outbound message:");
} else {
logger.info("Inbound message:");
}
SOAPMessage message = smc.getMessage();
try {
if(message.getSOAPHeader()!=null)
message.getSOAPHeader().detachNode();
Source source = message.getSOAPPart().getContent();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "3");
transformer.transform(source, new StreamResult(baos));
logger.info(baos.toString());
} catch (Exception e) {
logger.warn("Exception in handler: " + e);
}
}}