Mike Flynn
Mike Flynn

Reputation: 24325

How to remove body element in Soap message from Spring web service

I have the following interceptor that modifies the header of the soap response. I would also like to clear the body of the soap response, but I cant find any documentaiton on doing this or a way around it. Suggestions?

  public class LisResponseInterceptor extends EndpointInterceptorAdapter {

        @Override
        public boolean handleResponse(MessageContext messageContext, Object endpoint) {
            return true;
        }

        @Override
        public boolean handleRequest(MessageContext messageContext, Object endpoint) {
            return true;
        }

        @Override
        public boolean handleFault(MessageContext messageContext, Object endpoint) {

            SoapMessage response = (SoapMessage) messageContext.getResponse();
            SoapHeader header = response.getSoapHeader();
            header.addHeaderElement(new QName("ims","imsx_syncRequestHeaderInfo"));

            SoapBody body = response.getSoapBody();

                    // clear body

            return true;
        }
    }

Upvotes: 1

Views: 3842

Answers (1)

Mike Flynn
Mike Flynn

Reputation: 24325

Fixed it

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header>
      <imsx_syncRequestHeaderInfo xmlns="ims"/>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body/>
</SOAP-ENV:Envelope>


public class LisResponseInterceptor extends EndpointInterceptorAdapter {

    @Override
    public boolean handleResponse(MessageContext messageContext, Object endpoint) {
        return true;
    }

    @Override
    public boolean handleRequest(MessageContext messageContext, Object endpoint) {
        return true;
    }

    @Override
    public boolean handleFault(MessageContext messageContext, Object endpoint) {

        SoapMessage response = (SoapMessage) messageContext.getResponse();
        SoapHeader header = response.getSoapHeader();
        header.addHeaderElement(new QName("ims","imsx_syncRequestHeaderInfo"));

        SoapBody body = response.getSoapBody();

        Transformer identityTransform = null;

    try {
        identityTransform = TransformerFactory.newInstance().newTransformer();
    } catch (TransformerConfigurationException e) {
        e.printStackTrace();
    } catch (TransformerFactoryConfigurationError e) {
        e.printStackTrace();
    }

    try {
        identityTransform.transform(new DOMSource(null), body.getPayloadResult());
    } catch (TransformerException e) {
        e.printStackTrace();
    }

        return true;
    }
}

Upvotes: 2

Related Questions