【发布时间】:2014-10-07 04:28:01
【问题描述】:
我正在使用带有 JAXB 绑定的 Spring WS 编写一个 Web 服务客户端应用程序。
我正在使用的服务要求通过 SOAP 标头中的 wsse:security 元素进行身份验证(以及另外一个自定义标头)。我已经编译了所有必要的架构,包括 wsse.xsd 编译为
org.xmlsoap.schemas.ws._2002._12.secext.Security.
但我找不到将这个或任何其他元素插入 SOAP 标头的方法。我知道我可以使用拦截器或SoapActionCallbacks,但它们允许我做的是手动构造标题并通过((SaajSoapMessage)webServiceMessage).getSoapHeader().addHeaderElement(qName) 将其添加到标题部分等等。但我不想手动构建此标头,因为我有一个可以轻松编组的相应类。
我的问题 - 在 Spring WS 中调用 Web 服务调用时,有没有办法将对象插入 SOAP 标头(或信封的其他部分)? 我使用 Apache CXF 和 Axis2 来使用 Web 服务,这从来都不是问题 - 框架只是在幕后为我做这件事(通常通过服务存根机制)。
【问题讨论】:
-
你检查过docs.spring.io/spring-ws/site/reference/html/security.html 吗?最后我记得,您定义了一个
Wss4jSecurityInterceptor(它使用与 CXF、WSS4J 相同的 WS 安全库),使用适当的操作对其进行配置,然后它会为您完成工作...... -
@GPI 感谢您的回复。是的,我已经看到了,这不是我想要的(我编辑了我的帖子和它的标题)。安全标头只是一个示例,我的服务使用了另外一个自定义标头 (eb:MessageHeader)。再一次,我将相应的模式编译为 Java 类,但我无法将其插入到消息中。
Wss4jSecurityInterceptor只是另一种从头开始创建标题的方法,而我已经完全组合了我想插入到标题中的对象。 -
请参阅:stackoverflow.com/questions/2274378/…。似乎没有简单的方法。请注意,由于您将架构编译为对象,因此肯定有一种方法可以让 JAXB 生成 DOM 树并将其插入到标题中:stackoverflow.com/questions/17078308/…
标签: java spring web-services soap spring-ws