WINDEV, WEBDEV et WINDEV Mobile permettent la consommation de webservices SOAP. La méthode recommandée la plus simple consiste à :

  • importer le webservice dans le projet à partir du fichier WSDL qui le décrit, fourni par son éditeur,
  • appeler les procédures du webservice comme s'il s'agissait de procédures de vos collections.
    Grâce à l'importation, les types du webservice sont connus, la génération du code XML et des requêtes SOAP/HTTP nécessaires sont transparentes et automatiques.


Il peut cependant arriver que l'importation du webservice à partir de son WSDL échoue. Dans un même temps un outil tel que SOAP UI par exemple parvient à afficher le même WSDL et à générer les requêtes d'appel des procédures. L'importation donne alors un message pouvant contenir :

  • does not resolve to a(n) element declaration,
  • le schéma n'a pas pu être chargé,
  • échec de l'initialisation du binding (code erreur 40085) ...

L'importation échoue lorsque le WSDL est incomplet, et ne décrit par tous les types utilisés en paramètres des procédures. SOAP UI l'affiche car il ne fait pas de contrôle sur le contenu, et laisse à la charge du développement la saisie du code XML.

 

Idéalement il faut demander un autre WSDL à l'éditeur qui intègre tous les types. S'il n'existe pas, le webservice pourra être consommé en utilisant la fonction WLangage SOAPExécuteXML. C'est l'équivalent de ce qui est fait dans SOAP UI.

Voici un mode opératoire :

  • récupérer l'adresse d'appel de toutes les procédures du webservice :
    • dans le WSDL c'est l'adresse qui suit l'entrée "soap:address location",
    • dans SOAP UI c'est l'adresse qui suit POST dans le volet "Raw" :
  • récupérer l'action qui correspond à la procédure à appeler :
    • dans le WSDL, elle suit l'entrée "operation soapAction",
    • dans SOAP UI, c'est la chaîne qui suit "SOAPAction" dans le volet "Raw" :


  • dans SOAP UI pour la requête correspondant à la procédure à appeler, copier le contenu complet du XML d'appel (il contient par défaut des points d'interrogation là où il faut une valeur pour les paramètres) :


  • dans le traitement WLangage qui doit appeler le webservice :
    • créer des variables pour l'adresse du webservice et l'action correspodant à la fonction (dans le cas général prévoir un paramétrage dans les réglages de l'application, l'adresse peut évoler) :


    • créer une variable chaine ansi contenant tout le contenu XML copié dans SOAP UI, dans lequel tous les ? seront remplacés par des %1, %2 (...), et utiliser la fonction ChaîneConstruit afin de créer le code XML avec les bonnes valeurs :


    • utiliser SOAPExécuteXML avec l'adresse, le contenu XML de la requête et l'action :


    • la fonction SOAPDonneRésultat permettra de traiter la réponse.

< Retour

Publier un commentaire : 
Votre adresse email ne sera pas publiée