【问题标题】:How to remove empty header from SOAP message?如何从 SOAP 消息中删除空头?
【发布时间】:2015-07-22 12:26:31
【问题描述】:

我正在使用 Spring-WS 来使用 Web 服务,如果 SOAP 信封具有空的 header 元素,则该服务会比较复杂。我发现默认的 SOAPMessage 实现增加了一个。

我怎样才能删除它?

提前致谢

【问题讨论】:

    标签: java soap webservice-client spring-ws soapheader


    【解决方案1】:

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

    下一行是一个空的 SOAP 标头。您可以通过调用删除它 getSOAPHeader 调用之后的 header.detachNode。

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

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

    这是基于this thread使用spring-ws WebServiceMessageCallback的解决方案:

    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();
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 2014-10-16
      • 1970-01-01
      • 2012-12-24
      • 2021-09-07
      • 1970-01-01
      • 2014-06-07
      相关资源
      最近更新 更多