【发布时间】:2023-03-14 08:00:01
【问题描述】:
我在我的项目中将 JAX-WS 用于 Web 服务。我想记录这些网络服务的每个请求和响应。目前,我已成功记录每个请求/响应,但是出于安全原因,我希望删除标题部分并保留正文,我在我的 SOAPHandler 中使用此方法写入应用程序日志:
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:这是 message.getSOAPBody() 的返回值是 [S:Body: null]
【问题讨论】:
标签: web-services soap jax-ws