The Daily Insight

Connected.Informed.Engaged.

updates

How To Add Security Header To Soap Request In Java

Writer Sarah Silva
How To Add Security Header To Soap Request In Java

In this article we will discuss different ways through which we can add header to soap (Single Object Access Protocol) request in Java.

Silky Terrier Dog Breed Playing Aro... Silky Terrier Dog Breed Playing Around
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();

}