Server did not recognize the value of HTTP Header SOAPAction:

25,119

Solution 1

Add

    MimeHeaders headers = soapMessage.getMimeHeaders();
    headers.addHeader("SOAPAction", "http://www.webservicex.net/" + "GetGeoIP");

Solution 2

If you are using Marshelling and Unmarsheling, Just implement WebseviceMessageCallback interface like:

public class SOAPConnector extends WebServiceGatewaySupport
{
    public Object callWebService( String url, Object request )
    {
        return getWebServiceTemplate().marshalSendAndReceive( url, request,  
webServiceMessage -> {
            (( SoapMessage )webServiceMessage).setSoapAction( 
"https://www.w3schools.com/xml/CelsiusToFahrenheit" );
        } );
    }
}

Otherwise proceed with: https://stackoverflow.com/a/26253141/6097074

Share:
25,119
user1050619
Author by

user1050619

Updated on October 08, 2020

Comments

  • user1050619
    user1050619 over 3 years

    I'm trying to call a SOAP webservice using SAAJ for this WSDL. I submitted the request for this WSDL here http://www.webservicex.net/ws/WSDetails.aspx?WSID=64and it generated the following SOAP requests..

    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <GetGeoIP xmlns="http://www.webservicex.net/">
          <IPAddress>string</IPAddress>
        </GetGeoIP>
      </soap:Body>
    </soap:Envelope>
    

    Using SAAJ I generated the same SOAP requests and submitted it but get this error - Server did not recognize the value of HTTP Header SOAPAction: .

    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Header/>
    <SOAP-ENV:Body>
    <GetGeoIP xmlns="http://www.webservicex.net/">
    <IPAddress>SUNW</IPAddress>
    </GetGeoIP>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    

    Java Code:

    package newpackage;
    
    import javax.xml.namespace.QName;
    import javax.xml.soap.*;
    
    public class SOAPClientSAAJ {
    
        public static void main(String args[]) throws Exception {
            // Create SOAP Connection
            SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
            SOAPConnection soapConnection = soapConnectionFactory.createConnection();
    
            // Send SOAP Message to SOAP Server
            String url = "http://www.webservicex.net/geoipservice.asmx";
            SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url);
    
            // print SOAP Response
            System.out.print("Response SOAP Message:");
            soapResponse.writeTo(System.out);
    
            soapConnection.close();
        }
    
        private static SOAPMessage createSOAPRequest() throws Exception {
            MessageFactory messageFactory = MessageFactory.newInstance();
            SOAPMessage soapMessage = messageFactory.createMessage();
            SOAPPart soapPart = soapMessage.getSOAPPart();
    
            String serverURI = "http://www.w3.org/2001/XMLSchema";
    
            // SOAP Envelope
            SOAPEnvelope envelope = soapPart.getEnvelope();
            envelope.addNamespaceDeclaration("xsd", serverURI);
    
            SOAPBody body = soapMessage.getSOAPBody();
            QName bodyName = new QName("http://www.webservicex.net/", "GetGeoIP" );
            SOAPBodyElement bodyElement = body.addBodyElement(bodyName);
            QName name = new QName("IPAddress");
            SOAPElement symbol = bodyElement.addChildElement(name);
            symbol.addTextNode("SUNW");
            soapMessage.saveChanges();
    
            /* Print the request message */
            System.out.print("Request SOAP Message:");
            soapMessage.writeTo(System.out);
            System.out.println();
    
            return soapMessage;
        }
    
    }