javasoapwebservice-clientspring-wssoapheader

How to remove empty header from SOAP message?


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.

How can I remove it?

Thanks in advance


Solution

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

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

    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
    

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