Spring Boot调用SOAP服务时如何可视化查看生成的XML请求
Spring Boot SOAP请求生成阶段XML查看方法
以下是4种可直接落地的实现方案:
方案1:开启Spring WebService内置日志追踪(最简单)
如果你使用Spring官方的WebServiceTemplate发起SOAP调用,直接调整日志级别即可自动打印完整的请求/响应XML:
- 如果你用Logback作为日志框架,在
application.yml或logback.xml中添加如下配置:
logging: level: org.springframework.ws.client.MessageTracing.sent: DEBUG # 打印发送的请求XML org.springframework.ws.client.MessageTracing.received: DEBUG # 打印接收的响应XML
配置生效后发起调用,控制台会输出完整的SOAP信封、头部、正文内容,不需要修改业务代码。
方案2:自定义客户端拦截器获取XML
如果需要自定义处理生成的XML(比如存储、脱敏后打印),可以实现ClientInterceptor接口手动捕获请求内容:
- 自定义拦截器示例代码:
public class SoapLogInterceptor implements ClientInterceptor { @Override public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException { WebServiceMessage request = messageContext.getRequest(); ByteArrayOutputStream os = new ByteArrayOutputStream(); request.writeTo(os); String requestXml = os.toString(StandardCharsets.UTF_8); // 这里可以自定义打印、存储逻辑 System.out.println("生成的SOAP请求XML:\n" + requestXml); return true; } @Override public boolean handleResponse(MessageContext messageContext) throws WebServiceClientException { return true; } @Override public boolean handleFault(MessageContext messageContext) throws WebServiceClientException { return true; } @Override public void afterCompletion(MessageContext messageContext, Exception ex) throws WebServiceClientException { } }
- 将拦截器注册到
WebServiceTemplate中:
@Bean public WebServiceTemplate webServiceTemplate() { WebServiceTemplate template = new WebServiceTemplate(); template.setInterceptors(new ClientInterceptor[]{new SoapLogInterceptor()}); // 其他配置省略 return template; }
方案3:编组阶段直接输出调试
如果是自己使用JAXB的Marshaller进行Java对象转XML的操作,可以在编组时直接输出结果:
Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); // 格式化输出,可读性更高 // 临时添加调试代码,调试完成后删除即可 marshaller.marshal(yourJavaRequestObject, System.out);
方案4:本地代理抓包查看
如果不想修改任何代码,可以使用本地代理工具捕获所有发出的请求:
- 安装Charles、Fiddler等代理工具,开启本地代理服务
- 给Spring Boot应用添加启动参数配置代理:
-Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=8888
所有发出去的SOAP请求都会被代理工具捕获,直接查看原始XML内容即可,还可以直接修改内容重发测试,和SOAP UI的调试体验一致。
注意:请求XML打印/捕获功能仅推荐在开发测试环境使用,生产环境需要关闭相关日志,避免敏感信息泄露。
内容的提问来源于stack exchange,提问作者Sri Harshini Vissamsetti
相关产品推荐
相关产品推荐

