Reputation: 71
I am using WebServiceTemplate in spring boot and invoking the target service using marshalSendAndReceive.
How can I set a custom HTTP header in the request?
Upvotes: 3
Views: 7647
Reputation: 2327
You need to use a WebServiceMessageCallback to modify a message after its creation.
webServiceTemplate.marshalSendAndReceive(o, new WebServiceMessageCallback() {
public void doWithMessage(WebServiceMessage message) {
try {
SoapMessage soapMessage = (SoapMessage)message;
SoapHeader header = soapMessage.getSoapHeader();
StringSource headerSource = new StringSource("<credentials xmlns=\"http://google.com/profile\">\n +
<token>"+customToken"+</token>\n +
</credentials>");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(headerSource, header.getResult());
} catch (Exception e) {
// something went wrong
}
}
});
So, essentially, we are transforming a web service message to SoapMessage to modify header.
Upvotes: 3