使用Apache CXF能否发送美化缩进格式化的SOAP请求?
结论
Apache CXF原生支持输出格式化缩进(pretty print)的SOAP报文,可直接满足你的需求,无需自定义报文序列化逻辑。
具体配置方式
1. XML/Spring配置场景
在CXF SOAP客户端的XML配置中添加PRETTY_PRINT属性即可,示例配置如下:
<jaxws:client id="customSoapClient" serviceClass="com.example.YourServiceInterface" address="目标SOAP端点地址"> <jaxws:properties> <entry key="org.apache.cxf.message.Message.PRETTY_PRINT" value="true"/> <!-- 可选:部分极端场景下避免命名空间前缀异常可添加以下配置 --> <entry key="org.apache.cxf.stax.force-start-document" value="true"/> </jaxws:properties> </jaxws:client>
2. 纯Java代码配置场景
在获取服务端口实例后,给请求上下文添加对应属性即可,示例代码如下:
// 初始化服务客户端,类名为你通过wsdl2java生成的服务类 YourService service = new YourService(); YourServicePort port = service.getYourServicePort(); Map<String, Object> requestContext = ((BindingProvider) port).getRequestContext(); // 开启SOAP报文格式化输出 requestContext.put("org.apache.cxf.message.Message.PRETTY_PRINT", Boolean.TRUE); // 可选配置,作用同上 requestContext.put("org.apache.cxf.stax.force-start-document", Boolean.TRUE);
注意事项
- 上述配置仅调整SOAP报文的排版格式,新增换行、缩进,不会修改任何业务字段、节点结构、命名空间等核心内容,不会对符合规范的服务端解析逻辑产生影响。
- 若需要验证输出格式,可开启CXF客户端的报文日志打印,直接查看发送的请求报文是否符合预期。
内容的提问来源于stack exchange,提问作者Martin Fernau
相关产品推荐
相关产品推荐

