You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:27:04