How can I send a SOAP request and receive a response using HTML?

23,121

Well, a SOAP server is designed to receive SOAP requests and send SOAP responses.

Since SOAP is basically XML, instead of expecting an HTML response from the server, it would be more appropriate to look for a mean to parse the XML of the SOAP response and display it in HTML.

But as I'm typing this answer, I think you may have misunderstood the goal of a SOAP server. It seems to me that you want to display the raw SOAP response directly to the client browser. But a SOAP server is not intended to work that way.

Typically a SOAP server is used by another server, by doing a SOAP request to it and then parsing the SOAP response. And this "other server" may be, for example, an HTTP server.

Let's take an example. I want to know the weather forecast of my city for tomorrow. I go to dummyweatherforecast.com and type the name of my city in the search field. But dummyweatherforecast.com does not store all the weather forecasts by itself. It may instead contact a SOAP server (specifically designed to provide weather forecasts) with a SOAP request containing the name of my city. The SOAP server returns a SOAP response with different weather information (sunny/cloudy, temperature, etc.) and then dummyweatherforecast.com processes this SOAP response (that is, as a reminder, XML) to display it to the client with a beautiful sentence like "It will be sunny tomorrow, with 86°F. Take your swimsuit !" ornamented with a beautiful sun iconography.

As you see, the client doesn't even know that a SOAP communication is held between dummyweatherforecast.com and the SOAP server. And this how SOAP is used : by servers themselves, and rarely directly by clients. This is what we call "web services", even though this term refers to a more general set of technologies used to make computers talk to each others.

I hope this brightened your mind a little bit.

PS : by the way, the link you give for your server points to an IP not available publicly (192.168 adresses are for private networks).

Share:
23,121
Kyle
Author by

Kyle

I'm a Junior Programmer! Programming is my passion, I love OOP, I separate the most I can into objects. Currently working at an amazing company, and creating some A.I. projects based on Multiple Individual Task Robots or MITR for short, which consists of copying the way neurons work. I (think I) know: Java SEJava ScriptjQueryHTML5 & CSS3 I'm Learning: ArduinoJava EE (and a lot Java SE libraries)Tomcat APACHEAndroid programming (JAVA) My favorite //comments: // I dedicate all this code, all my work, to my wife, Darlene, who will // have to support me and our three children and the dog once it gets // released into the public. // drunk, fix later // Magic. Do not touch. return 1; //returns 1 double penetration; // ouch /////////////////////////////////////// this is a well commented line // I am not sure if we need this, but too scared to delete. // I am not responsible for this code. // They made me write it, against my will.

Updated on June 30, 2020

Comments

  • Kyle
    Kyle almost 4 years

    I would like to send a number to a SOAP "server"(I don't know if I can call it a server, correct me if I'm wrong) and receive a response using HTML, I've seen many questions with answers containing examples of sending an XML request such as below, but I have no idea on how to receive and see a response on HTML, sorry I'm new to SOAP.

    P.S.: Of course, by HTML I meant JavaScript within the HTML :P


    Server: Here

    Thanks in Advance!

    <html>
    
    <head>
        <title>SOAP JavaScript Client Test</title>
        <script type="text/javascript">
            function soap() {
                var xmlhttp = new XMLHttpRequest();
                xmlhttp.open('POST', 'http://192.168.0.251:9080/wsa/wsa1', true);
    
                // build SOAP request
                var sr =
                    '<?xml version="1.0" encoding="utf-8"?>' +
                    '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:services-progress-com:notavailable">' +
                    '<soapenv:Header/>' +
                    '<soapenv:Body>' +
                    '<urn:lnestagio>' +
                    '<urn:vvalor>5</urn:vvalor>' +
                    '</urn:lnestagio>' +
                    '</soapenv:Body>' +
                    '</soapenv:Envelope>';
    
                xmlhttp.onreadystatechange = function() {
                        if (xmlhttp.readyState == 4) {
                            if (xmlhttp.status == 200) {
    
                                alert('done use firebug to see response');
                            }
                        }
                    }
                    // Send the POST request
                xmlhttp.setRequestHeader('Content-Type', 'text/xml');
                xmlhttp.send(sr);
                // send request
                // ...
            }
        </script>
    </head>
    
    <body>
        <form name="Demo" action="" method="post">
            <div>
                <input type="button" value="Soap" onclick="soap();" />
            </div>
        </form>
    </body>
    <html>

    SOAP's XML from my server

        <wsdl:definitions xmlns:tns="urn:services-progress-com:ys:server" xmlns:S2="urn:services-progress-com:sys:server:Estagio" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:prodata="urn:schemas-progress-com:xml-prodata:0001" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:S1="urn:soap-fault:details" xmlns="http://schemas.xmlsoap.org/wsdl/" name="Estagio" targetNamespace="urn:services-progress-com:sys:server">
    <wsdl:documentation>
    Author=sys, EncodingType=DOC_LITERAL, WSA_Product=10.2B07 - N/A
    </wsdl:documentation>
    <wsdl:types>
    <schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" targetNamespace="urn:soap-fault:details">
    <element name="FaultDetail">
    <complexType>
    <sequence>
    <element name="errorMessage" type="xsd:string"/>
    <element name="requestID" type="xsd:string"/>
    </sequence>
    </complexType>
    </element>
    </schema>
    <schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:services-progress-com:sys:server:Estagio">
    <element name="lnestagio">
    <complexType>
    <sequence>
        <element name="vvalor" nillable="true" type="xsd:decimal"/> <!-- Here I think he gets the number I sent -->
    </sequence>
    </complexType>
    </element>
    <element name="lnestagioResponse">
    <complexType>
    <sequence>
    <element name="result" nillable="true" type="xsd:string"/>
    <element name="vcalc" nillable="true" type="xsd:decimal"/> <!-- And it returns the number multiplied by 2 -->
    </sequence>
    </complexType>
    </element>
    </schema>
    </wsdl:types>
    <wsdl:message name="FaultDetailMessage">
    <wsdl:part name="FaultDetail" element="S1:FaultDetail"/>
    </wsdl:message>
    <wsdl:message name="Estagio_lnestagio">
    <wsdl:part name="parameters" element="S2:lnestagio"/>
    </wsdl:message>
    <wsdl:message name="Estagio_lnestagioResponse">
    <wsdl:part name="parameters" element="S2:lnestagioResponse"/>
    </wsdl:message>
    <wsdl:portType name="EstagioObj">
    <wsdl:operation name="lnestagio">
    <wsdl:input message="tns:Estagio_lnestagio"/>
    <wsdl:output message="tns:Estagio_lnestagioResponse"/>
    <wsdl:fault name="EstagioFault" message="tns:FaultDetailMessage"/>
    </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="EstagioObj" type="tns:EstagioObj">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="lnestagio">
    <soap:operation soapAction="" style="document"/>
    <wsdl:input>
    <soap:body use="literal"/>
    </wsdl:input>
    <wsdl:output>
    <soap:body use="literal"/>
    </wsdl:output>
    <wsdl:fault name="EstagioFault">
    <soap:fault name="EstagioFault" use="literal"/>
    </wsdl:fault>
    </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="EstagioService">
    <wsdl:port name="EstagioObj" binding="tns:EstagioObj">
    <wsdl:documentation/>
    <soap:address location="http://localhost:9080/wsa/wsa1"/>
    </wsdl:port>
    </wsdl:service>
    </wsdl:definitions>