我需要构建一个 Web 服务,其中包含 spring-ws 响应中的 SOAP header 。
我的端点处理请求 header ,然后返回将成为 SOAP 正文响应的元素。
我需要做的是使用请求 header 中的信息向该响应添加 SOAP header 。
我知道如何做到这一点的唯一方法是使用拦截器,但这样我不知道如何获取从请求中解码的 header 对象。
我使用这种方式编写端点,因为我想解码并验证代码中的 header :
public void handle(@RequestPayload DOMSource domSource, SoapHeader header)
但是,文档也有这种替代方案
public void handle(@RequestPayload MyJaxb2Object requestObject, @RequestPayload Element element, Message messageContext)
但这对我不起作用,因为我不想解码有效负载,只想解码 header 。
我正在使用 Spring-ws 2.2.0。 http://docs.spring.io/spring-ws/docs/2.2.0.RELEASE/reference/htmlsingle/
非常感谢 问候
最佳答案
好的,所以我找到了解决这个问题的方法。
Spring-WS 将接受可以解析的端点处理方法的任何参数。有很多解析器,您可以创建自己的解析器,但是我需要的解析器已经存在(MessageContextMethodArgumentResolver),我看到了这个解析器的代码,它只是通过参数类进行检查。我的问题是,当我应该使用 org.springframework.ws.context.MessageContext 时,我却使用了 Message。
修复后,我就能够获得所需的三个参数,即用 @RequestPayload 注释的有效负载、SoapHeader 和 MessageContext。
有了所有这些东西,我就能够将消息上下文中的对象设置为属性。然后,我编写了一个 EndpointInterceptor,并在“handleResponse”方法中使用对象中的信息生成了 SOAP header 。
关于java - 将 SOAP header 添加到 spring-ws 2.2.0 端点响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28744843/