2013-03-20 35 views
0

我有以下攔截器可修改肥皂響應的標頭。我還想清楚肥皂反應的主體,但是我無法找到任何有關這樣做或解決方法的文檔。建議?如何從Spring Web服務中刪除肥皂消息中的body元素

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

回答

1

固定它

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