2017-09-19 2 views
4

Encore j'apprends angular2. J'essaie d'apprendre comment envoyer une requête SOAP à un service web, avec un WSDL. Je cherchais des exemples et j'en ai trouvé un. J'ai créé un bouton et j'ai voulu appeler cette fonction de savon pour envoyer la demande au serveur sur un clic. Le projet est construit avec succès mais la fonction ne fonctionne pas.SOAP - Demande WSDL angular2/4 framework

app.component.ts 

    import { Component } from '@angular/core'; 
    import { Http, Response, RequestOptions, Headers} from '@angular/http'; 
    import 'rxjs/add/operator/map'; 
    declare var angular: any; 

    @Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html' 
    }) 

export class AppComponent { 

soapCall() { 

    angular.module('myApp', ['angularSoap']); 
     var xmlhttp = new XMLHttpRequest(); 
    // xmlhttp.open('POST', 'http://localhost/webservices/voltage-info-service/wsdl/sgcc3.wsdl', true); 
     xmlhttp.open('POST', 'http://localhost/webservices/voltage-info-service/server/server.php', true); 
     //var input_element = <HTMLInputElement> document.getElementById("choosenNumber"); 
     //console.log("chVal : " + this.chVal); 
     //this.choosenNumberValue = this.chVal; 

    //the following variable contains my xml soap request (that you can get thanks to SoapUI for example) 

      var sr = 'YEAH'; 
      // '<?xml version="1.0" encoding="utf-8"?><lfc:requests><lfc:request><lfc:busID>66</lfc:busID><lfc:timestamp>223456789</lfc:timestamp><lfc:coordinates>'+ 
      // '<lfc:LongD>8</lfc:LongD><lfc:LongM>6</lfc:LongM><lfc:LongS>25.599</lfc:LongS><lfc:LatD>51</lfc:LatD><lfc:LatM>33</lfc:LatM><lfc:LatS>23.9898</lfc:LatS>'+ 
      // '</lfc:coordinates></lfc:request></lfc:requests>'; 

     xmlhttp.onreadystatechange =() => { 
      if (xmlhttp.readyState == 4) { 
       if (xmlhttp.status == 200) { 
        var xml = xmlhttp.responseXML; 
        // this.response_number = parseInt(xml.getElementsByTagName("return")[0].childNodes[0].nodeValue); //Here I'm getting the value contained by the <return> node 
        console.log('Work!!');                 //I'm printing my result square number 
       } 
      } 
     } 

     // Send the POST request 

     xmlhttp.setRequestHeader('Content-Type', 'text/xml'); 
     xmlhttp.responseType = "document"; 
     xmlhttp.send(sr); 
    } 
    } 

app.component.html 

<u1> 
<u1> 
    <input type="button" value="SOAP request" ng-click="soapCall()"> 
</li> 
</ul> 
+1

https://scotch.io/tutorials/angular-2-http-requests-with-observables –

+0

@SachilaRanawaka Je ne pouvais pas comprendre le tutoriel que vous avez donné .. , son chemin à loin de mon niveau –

Répondre

4

Les erreurs ne montrent aucune erreur liée à SOAP. Toutes les erreurs indiquent que la propriété n'existe pas dans AppComponent.

Modifier le code de la méthode de savon comme ci-dessous

soapCall() { 
    let xmlhttp = new XMLHttpRequest(); 
    xmlhttp.open('POST', 'http://localhost/webservices/voltage-info-services/wsdl/sgcc3.wsdl', true); 
    let input_element = <HTMLInputElement> document.getElementById("choosenNumber"); 

    console.log("chVal : " + input_element.value); 
    let choosenNumberValue = input_element.value; 
    //the following variable contains my xml soap request (that you can get thanks to SoapUI for example) 
    let sr = 
     `<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mat="http://mathsutility.test.com/"> 
     <soapenv:Header/> 
     <soapenv:Body> 
     <mat:carreNombre> 
      <arg0>` + choosenNumberValue + `</arg0> 
     </mat:carreNombre> 
     </soapenv:Body> 
    </soapenv:Envelope>`; 

    xmlhttp.onreadystatechange = () => { 
     if (xmlhttp.readyState == 4) { 
      if (xmlhttp.status == 200) { 
       let xml = xmlhttp.responseXML; 
       let response_number = parseInt(xml.getElementsByTagName("return")[0].childNodes[0].nodeValue); //Here I'm getting the value contained by the <return> node 
       console.log(response_number); //I'm printing my result square number 
      } 
     } 
    } 
    // Send the POST request 
    xmlhttp.setRequestHeader('Content-Type', 'text/xml'); 
    xmlhttp.responseType = "document"; 
    xmlhttp.send(sr); 
    } 
+0

j'ai tranché la plupart des erreurs .., je reçois "erreur de référence: angulaire indéfini" .. !! Ai-je importé la fonction soapCall correctement –

+0

pouvez-vous fournir une trace de pile d'erreur. –

+0

J'ai utilisé le script angular.js dans index.html https://github.com/andrewmcgivery/angular-soap Je reçois erreur à ce stade –