4

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>```

0 Answers0