How to use webServiceTemplate to add Soap Header elements for webservice client:
WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
SaajSoapMessageFactory factory = new SaajSoapMessageFactory();
factory.afterPropertiesSet();
webServiceTemplate.setMessageFactory(factory);
Unmarshaller unm = (Unmarshaller)funnelMarshaller;
webServiceTemplate.setMarshaller(funnelMarshaller);
webServiceTemplate.setUnmarshaller(unm);
//Declare your own clientInterceptor in application-config.xml if required.
webServiceTemplate.setInterceptors(new ClientInterceptor[]{myClientInterceptor});
webServiceTemplate.setDefaultUri(myurl);
//get SoapAction
webServiceTemplate.marshalSendAndReceive(request, new WebServiceMessageCallback() {
@Override
public void doWithMessage(WebServiceMessage message) {
try {
SoapMessage soapMessage = (SoapMessage)message;
soapMessage.setSoapAction(soapAction);
SoapHeader header = soapMessage.getSoapHeader();
SoapHeaderElement tokenId = header.addHeaderElement(new QName("http://vzSFA.services.com/SecurityToken", "Token"));
tokenId.setText(token);
} catch (Exception e) {
e.printStackTrace();
}
}
});
myClientInterceptor:
Just create a class that implements org.springframework.ws.client.support.interceptor.ClientInterceptor and override the following methods:
handleFault, handleRequest, handleResponse.
Interceptors are equivalent to adding Handlers to soapbinding.