将 SoapHeader 添加到 org.springframework.ws.WebServiceMessage [英] Add SoapHeader to org.springframework.ws.WebServiceMessage

查看:29
本文介绍了将 SoapHeader 添加到 org.springframework.ws.WebServiceMessage的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何将对象添加到 org.springframework.ws.WebServiceMessage

这是我最终想要的结构:

This is the structure I'm looking to end up with:

 <soap:Header>
    <credentials xmlns="http://example.com/auth">
      <username>username</username>
      <password>password</password>
    </credentials>
  </soap:Header>

推荐答案

基本上,你需要使用一个 WebServiceMessageCallback 在您的客户端中,以在消息创建之后但在发送之前对其进行修改.@skaffman 已经非常准确地描述了其余代码,因此整个内容可能如下所示:

Basically, you need to use a WebServiceMessageCallback in your client to modify the message after its creation but before it is sent. To rest of the code has been described pretty accurately by @skaffman so the whole stuff might look like this:

public void marshalWithSoapActionHeader(MyObject o) {

    webServiceTemplate.marshalSendAndReceive(o, new WebServiceMessageCallback() {

        public void doWithMessage(WebServiceMessage message) {
            try {
                SoapMessage soapMessage = (SoapMessage)message;
                SoapHeader header = soapMessage.getSoapHeader();
                StringSource headerSource = new StringSource("<credentials xmlns="http://example.com/auth">
 +
                        <username>"+username+"</username>
 +
                        <password>"+password"+</password>
 +
                        </credentials>");
                Transformer transformer = TransformerFactory.newInstance().newTransformer();
                transformer.transform(headerSource, header.getResult());
            } catch (Exception e) {
                // exception handling
            }
        }
    });
}

就我个人而言,我发现 Spring-WS 很难满足这样的基本需求,他们应该修复 SWS-479.

Personally, I find that Spring-WS sucks hard for such a basic need, they should fix SWS-479.

这篇关于将 SoapHeader 添加到 org.springframework.ws.WebServiceMessage的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆