How To Add Security Header To Soap Request In Java
Sarah Silva
In this article we will discuss different ways through which we can add header to soap (Single Object Access Protocol) request in Java.
By default SOAP headers are not specified in WSDL and we have to add them through manual instructions. Silky Terrier Dog Breed Playing Around
1 Web Service Adapter
The first step is to implement through Web service adapter. Below we have mentioned the code with their reference ()
public class BlzServiceAdapter extends WebServiceGatewaySupport {
private static final Logger logger = LoggerFactory.getLogger(BlzServiceAdapter.class);
public GetBankResponseType getBank(String url, Object requestPayload){
WebServiceTemplate webServiceTemplate = getWebServiceTemplate();
JAXBElement res = null;
try {
res = (JAXBElement) webServiceTemplate.marshalSendAndReceive(url, requestPayload);
}catch(SoapFaultClientException ex){
logger.error(ex.getMessage());
}
return res.getValue();
}
}
2- Transform XML to Header
private static final Logger logger = LoggerFactory.getLogger(BlzServiceAdapter.class);
@Autowired
private Environment environment;
public GetBankResponseType getBank(String url, Object requestPayload){
WebServiceTemplate webServiceTemplate = getWebServiceTemplate();
JAXBElement res = null;
try {
res = (JAXBElement) webServiceTemplate.marshalSendAndReceive(url, requestPayload, new WebServiceMessageCallback() {
@Override
public void doWithMessage(WebServiceMessage message) {
try {
SoapHeader soapHeader = ((SoapMessage) message).getSoapHeader();
Map mapRequest = new HashMap();
mapRequest.put(“loginuser”, environment.getProperty(“soap.auth.username”));
mapRequest.put(“loginpass”, environment.getProperty(“soap.auth.password”));
StringSubstitutor substitutor = new StringSubstitutor(mapRequest, “%(“, “)”);
String finalXMLRequest = substitutor.replace(environment.getProperty(“soap.auth.header”));
StringSource headerSource = new StringSource(finalXMLRequest);
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(headerSource, soapHeader.getResult());
logger.info(“Marshalling of SOAP header success.”);
} catch (Exception e) {
logger.error(“error during marshalling of the SOAP headers”, e);
}
}
});
}catch (SoapFaultClientException e){
logger.error(“Error while invoking session service : ” + e.getMessage());
return null;
}
return res.getValue();
}