如何从SOAP消息中删除空标头? [英] How to remove empty header from SOAP message?

查看:121
本文介绍了如何从SOAP消息中删除空标头?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Spring-WS来使用Web服务,该服务比较SOAP信封是否具有空的 header 元素.我发现默认的SOAPMessage实现会添加一个.

I am using Spring-WS for consuming Webservice which compains if SOAP envelop has empty header element. I figured out that default SOAPMessage implementation adds one.

如何删除它?

预先感谢

推荐答案

http://docs.oracle.com/javaee/5/tutorial/doc/bnbhr.html :

下一行是空的SOAP标头.您可以通过致电将其删除 getSOAPHeader调用之后的header.detachNode.

The next line is an empty SOAP header. You could remove it by calling header.detachNode after the getSOAPHeader call.

这是普通SAAJ中的解决方案:

So here is the solution in plain SAAJ:

        MessageFactory messageFactory = MessageFactory.newInstance("SOAP 1.2 Protocol");
        SOAPMessage message = messageFactory.createMessage();
        message.getSOAPHeader().detachNode(); // suppress empty header

这是使用spring-ws 基于此线程:

And here is the solution using spring-ws WebServiceMessageCallback based on this thread:

public void marshalWithSoapActionHeader(MyObject o) {

    webServiceTemplate.marshalSendAndReceive(o, new WebServiceMessageCallback() {

        public void doWithMessage(WebServiceMessage message) {
            SaajSoapMessage saajSoapMessage = (SaajSoapMessage) message;
            SOAPMessage soapMessage = saajSoapMessage.getSaajMessage();
            SOAPPart soapPart = soapMessage.getSOAPPart();
            SOAPEnvelope envelope = soapPart.getEnvelope();
            SOAPHeader header = soapMessage.getSOAPHeader(); 
            header.detachNode();
        }
    });
}

这篇关于如何从SOAP消息中删除空标头?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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