I am trying to call a soap endpoint from my service through Rest Controller. I have updated my code.
public GetQuoteByIDResponse getQuote(GetQuoteByID quote) {
template = new WebServiceTemplate(marshaller);
GetQuoteByID request = new GetQuoteByID();
request.setQuoteID(quote.getQuoteID());
logger.info("Requesting quote for " + quote.getQuoteID());
GetQuoteByIDResponse response = (GetQuoteByIDResponse) template
.marshalSendAndReceive("url", request,
new WebServiceMessageCallback(){
@Override
public void doWithMessage(WebServiceMessage message) {
try {
SoapMessage soapMessage = (SoapMessage)message;
SoapHeader header = soapMessage.getSoapHeader();
StringSource headerSource = new StringSource("<web:AuthHeader xmlns=\**url**\">\n + <web:Key>"+key+"</web:Key>\n " +
"+ <web:Login> <web:LoginName>"+loginName+"</web:LoginName></web:Login>\n + <web:LogImport>true</web:LogImport></web:AuthHeader>");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(headerSource, header.getResult());
} catch (Exception e) {
logger.error("Error during marshalling of the SOAP headers", e);
}
}
});
return response;
}
I am getting an error because I am unable to set soap header.
"status": 500,
"error": "Internal Server Error",
"message": "Server did not recognize the value of HTTP Header SOAPAction: https://uatx5.vertafore.com/financepro/webservices/QuoteService.asmx/GetQuoteByID.",
"trace": "org.springframework.ws.soap.client.SoapFaultClientException: Server did not recognize the value of HTTP Header SOAPAction: https://uatx5.vertafore.com/financepro/webservices/QuoteService.asmx/GetQuoteByID.\n\tat org.springframework.ws.soap.client.core.SoapFaultMessageResolver.resolveFault(SoapFaultMessageResolver.java:38)\n\tat org.springframework.ws.client.core.WebServiceTemplate.handleFault(WebServiceTemplate.java:830)\n\tat org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:624)\n\tat org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:555)\n\tat org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:390)\n\tat com
This is the structure I'm looking to end up with:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.ajamx.com/finance/WebServices/">
<soapenv:Header>
<web:AuthHeader xmlns="http://www.ajamx.com/finance/WebServices/">
<!--Optional:-->
<web:Key>***************************</web:Key>
<!--Optional:-->
<web:Login>
<web:LoginName>*****************</web:LoginName>
</web:Login>
<web:LogImport>true</web:LogImport>
</web:AuthHeader>
</soapenv:Header>
<soapenv:Body>
<web:GetQuoteByID>
<web:quoteID>931</web:quoteID>
</web:GetQuoteByID>
</soapenv:Body>
</soapenv:Envelope>```