Spring WS 4.0.8中获取AxiomSoapMessage及使用StAX API方法
Spring Boot 3.4.2 + Spring WS 4.0.8 升级后AXIOM相关问题解决
1. 获取AxiomSoapMessage的方式
Spring WS 4.x将AXIOM相关实现从核心包拆分到独立的spring-ws-axiom模块,首先需要确保项目引入该依赖:
- Maven依赖配置:
<dependency> <groupId>org.springframework.ws</groupId> <artifactId>spring-ws-axiom</artifactId> <version>4.0.8</version> </dependency>
引入依赖后,AxiomSoapMessage仍是SoapMessage的实现类,可通过类型判断+强制转换获取实例:
// 假设已获取SoapMessage实例soapMessage if (soapMessage instanceof AxiomSoapMessage axiomSoapMessage) { // 执行原AXIOM相关操作 OMElement omElement = axiomSoapMessage.getAxiomMessage().getSOAPBody().getFirstElement(); // ... 其他业务逻辑 }
若未引入spring-ws-axiom依赖,该类会无法找到,此时建议切换到Spring WS 4.x默认支持的StAX API。
2. 切换到StAX API的配置与使用
如果不再依赖AXIOM,改用StAX API需替换原有的AxiomSoapMessageFactory为StaxSoapMessageFactory,这是Spring WS 4.x推荐的StAX基消息工厂。
替换XML配置
原配置:
<bean id="messageFactory" class="org.springframework.ws.soap.axiom.AxiomSoapMessageFactory"> <property name="payloadCaching" value="${cachePayloadInAxiom}"/> </bean>
替换为StAX版本配置:
<bean id="messageFactory" class="org.springframework.ws.soap.stax.StaxSoapMessageFactory"> <!-- 配置缓存参数,替代原payloadCaching --> <!-- bufferSize设置消息缓存字节大小,默认8192 --> <property name="bufferSize" value="8192"/> <!-- 可直接复用原payloadCaching配置,默认值为true --> <property name="payloadCaching" value="${cachePayloadInAxiom}"/> </bean>
使用StAX API操作消息
获取SoapMessage实例后,可通过StAX的XMLStreamReader/XMLStreamWriter处理消息内容:
// 读取消息payload XMLStreamReader reader = soapMessage.getPayloadSource().createReader(); try { while (reader.hasNext()) { if (reader.isStartElement()) { String elementName = reader.getLocalName(); // ... 业务逻辑处理 } reader.next(); } } finally { reader.close(); } // 写入消息payload XMLStreamWriter writer = soapMessage.getPayloadResult().createWriter(); try { writer.writeStartElement("ns", "root", "http://example.com/namespace"); writer.writeCharacters("content"); writer.writeEndElement(); } finally { writer.close(); }
内容的提问来源于stack exchange,提问作者chenglin zhao
相关产品推荐
相关产品推荐

