Apache CXF打印自定义SOAPEnvelope

时间:2018-06-11 14:40:58

标签: cxf jax-ws

我们正在通过在TomEE Plus上运行的Web应用程序使用JAX-WS网络服务。它使用Apache CXF实现与Web服务进行交互。

我们希望记录作为webservice调用的一部分发送和接收的请求和响应XML。有很多例子可以帮助我们记录完整请求并回复我们使用Apache CXF的原因。

但是,我们的情况是不应该记录完整的请求XML,因为其中有一些敏感信息。我们正在修改SOAPEnvelope以删除负责记录它们的SOAPHandler中的敏感信息。

要进行打印,是否有可用的库帮助我们打印完整的XML数据?

在IBM WebSphere中,JAX-WS实现(不确定它是哪一个)只能使用SOAPEnvelope方法打印toString()。在尝试null的{​​{1}}时,CXF返回toString()的位置。

1 个答案:

答案 0 :(得分:0)

                SOAPMessage message = messageContext.getMessage();
                StringWriter sw = new StringWriter();
                Transformer transformer = transformerFactory.newInstance().newTransformer();
                transformer.setOutputProperty(OutputKeys.INDENT, "yes");
                transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
                transformer.transform(new DOMSource(message.getSOAPPart()), new StreamResult(sw));
                logger.info(sw.toString());

基于this post

的答案