Simplest SOAP example

前端 未结 13 1656
死守一世寂寞
死守一世寂寞 2020-11-22 01:32

What is the simplest SOAP example using Javascript?

To be as useful as possible, the answer should:

  • Be functional (in other words actually work)
  • <
相关标签:
13条回答
  • 2020-11-22 01:56

    You can use the jquery.soap plugin to do the work for you.

    This script uses $.ajax to send a SOAPEnvelope. It can take XML DOM, XML string or JSON as input and the response can be returned as either XML DOM, XML string or JSON too.

    Example usage from the site:

    $.soap({
        url: 'http://my.server.com/soapservices/',
        method: 'helloWorld',
    
        data: {
            name: 'Remy Blom',
            msg: 'Hi!'
        },
    
        success: function (soapResponse) {
            // do stuff with soapResponse
            // if you want to have the response as JSON use soapResponse.toJSON();
            // or soapResponse.toString() to get XML string
            // or soapResponse.toXML() to get XML DOM
        },
        error: function (SOAPResponse) {
            // show error
        }
    });
    
    0 讨论(0)
  • 2020-11-22 01:57

    Angularjs $http wrap base on XMLHttpRequest. As long as at the header content set following code will do.

    "Content-Type": "text/xml; charset=utf-8"
    

    For example:

    function callSoap(){
    var url = "http://www.webservicex.com/stockquote.asmx";
    var soapXml = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://www.webserviceX.NET/\"> "+
             "<soapenv:Header/> "+
             "<soapenv:Body> "+
             "<web:GetQuote> "+
             "<web:symbol></web:symbol> "+
             "</web:GetQuote> "+
             "</soapenv:Body> "+
             "</soapenv:Envelope> ";
    
        return $http({
              url: url,  
              method: "POST",  
              data: soapXml,  
              headers: {  
                  "Content-Type": "text/xml; charset=utf-8"
              }  
          })
          .then(callSoapComplete)
          .catch(function(message){
             return message;
          });
    
        function callSoapComplete(data, status, headers, config) {
            // Convert to JSON Ojbect from xml
            // var x2js = new X2JS();
            // var str2json = x2js.xml_str2json(data.data);
            // return str2json;
            return data.data;
    
        }
    
    }
    
    0 讨论(0)
  • 2020-11-22 01:58

    Has anyone tried this? https://github.com/doedje/jquery.soap

    Seems very easy to implement.

    Example:

    $.soap({
    url: 'http://my.server.com/soapservices/',
    method: 'helloWorld',
    
    data: {
        name: 'Remy Blom',
        msg: 'Hi!'
    },
    
    success: function (soapResponse) {
        // do stuff with soapResponse
        // if you want to have the response as JSON use soapResponse.toJSON();
        // or soapResponse.toString() to get XML string
        // or soapResponse.toXML() to get XML DOM
    },
    error: function (SOAPResponse) {
        // show error
    }
    });
    

    will result in

    <soap:Envelope
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <helloWorld>
            <name>Remy Blom</name>
            <msg>Hi!</msg>
        </helloWorld>
      </soap:Body>
    </soap:Envelope>
    
    0 讨论(0)
  • 2020-11-22 02:01

    Thomas:

    JSON is preferred for front end use because we have easy lookups. Therefore you have no XML to deal with. SOAP is a pain without using a library because of this. Somebody mentioned SOAPClient, which is a good library, we started with it for our project. However it had some limitations and we had to rewrite large chunks of it. It's been released as SOAPjs and supports passing complex objects to the server, and includes some sample proxy code to consume services from other domains.

    0 讨论(0)
  • 2020-11-22 02:02

    Simplest example would consist of:

    1. Getting user input.
    2. Composing XML SOAP message similar to this

      <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>
          <GetInfoByZIP xmlns="http://www.webserviceX.NET">
            <USZip>string</USZip>
          </GetInfoByZIP>
        </soap:Body>
      </soap:Envelope>
      
    3. POSTing message to webservice url using XHR

    4. Parsing webservice's XML SOAP response similar to this

      <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       <soap:Body>
        <GetInfoByZIPResponse xmlns="http://www.webserviceX.NET">
         <GetInfoByZIPResult>
          <NewDataSet xmlns="">
           <Table>
            <CITY>...</CITY>
            <STATE>...</STATE>
            <ZIP>...</ZIP>
            <AREA_CODE>...</AREA_CODE>
            <TIME_ZONE>...</TIME_ZONE>
           </Table>
          </NewDataSet>
         </GetInfoByZIPResult>
        </GetInfoByZIPResponse>
       </soap:Body>
      </soap:Envelope>
      
    5. Presenting results to user.

    But it's a lot of hassle without external JavaScript libraries.

    0 讨论(0)
  • 2020-11-22 02:04

    There are many quirks in the way browsers handle XMLHttpRequest, this JS code will work across all browsers:
    https://github.com/ilinsky/xmlhttprequest

    This JS code converts XML into easy to use JavaScript objects:
    http://www.terracoder.com/index.php/xml-objectifier

    The JS code above can be included in the page to meet your no external library requirement.

    var symbol = "MSFT"; 
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("POST", "http://www.webservicex.net/stockquote.asmx?op=GetQuote",true);
    xmlhttp.onreadystatechange=function() {
     if (xmlhttp.readyState == 4) {
      alert(xmlhttp.responseText);
      // http://www.terracoder.com convert XML to JSON 
      var json = XMLObjectifier.xmlToJSON(xmlhttp.responseXML);
      var result = json.Body[0].GetQuoteResponse[0].GetQuoteResult[0].Text;
      // Result text is escaped XML string, convert string to XML object then convert to JSON object
      json = XMLObjectifier.xmlToJSON(XMLObjectifier.textToXML(result));
      alert(symbol + ' Stock Quote: $' + json.Stock[0].Last[0].Text); 
     }
    }
    xmlhttp.setRequestHeader("SOAPAction", "http://www.webserviceX.NET/GetQuote");
    xmlhttp.setRequestHeader("Content-Type", "text/xml");
    var xml = '<?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> ' +
         '<GetQuote xmlns="http://www.webserviceX.NET/"> ' +
           '<symbol>' + symbol + '</symbol> ' +
         '</GetQuote> ' +
       '</soap:Body> ' +
     '</soap:Envelope>';
    xmlhttp.send(xml);
    // ...Include Google and Terracoder JS code here...
    

    Two other options:

    • JavaScript SOAP client:
      http://www.guru4.net/articoli/javascript-soap-client/en/

    • Generate JavaScript from a WSDL:
      https://cwiki.apache.org/confluence/display/CXF20DOC/WSDL+to+Javascript

    0 讨论(0)
提交回复
热议问题