Lecture d'une réponse SOAP complète
Date de publication : Août 2004
Par
David Adams 4ème Dimension version 2003 et ultérieures propose en natif la construction de clients de Services Web.
I. Résumé
II. Exemple de méthode proxy SOAP
III. Le paramètre Web Service Dynamique
IV. Le paramètre Web Service Manuel
V. Lire les valeurs XML
VI. Avantages
VII. Notes et limitations
VIII. Base exemple
I. Résumé
4ème Dimension version 2003 et ultérieures propose en natif la construction de clients de Service Web. Les
appels à une méthode de Service Web génèrent des messages SOAP (Simple Object Access Protocol) envoyés
via HTTP à un programme compatible SOAP. Le service Web distant peut être écrit en .NET, Java, 4ème
Dimension, ou quasiment n'importe quel langage ou environnement de programmation contemporain. En
interne, les messages SOAP suivent des règles strictes de formatage XML et d’encodage des données. Ces règles
sont définies par une série de standards interdépendants. Par défaut, le système de client de Service Web de 4ème
Dimension gère toute la complexité de l’analyse, de la navigation et de la conversion de valeurs entre XML et
les types natifs de 4ème Dimension.
Il existe cependant des cas où les développeurs désirent ou préfèrent lire les réponses SOAP directement, entre
- Pour déboguer les échanges SOAP ;
- Pour lire des paramètres de sortie SOAP non liés directement à des paramètres, variables ou tableaux de 4ème Dimension ;
- Pour analyser directement les réponses à l'aide des commandes d’analyse XML natives ou de celles d’un parseur XML externe ;
- Pour en savoir plus sur la structure et les contenus des réponses SOAP ;
- Pour acquérir une meilleure compréhension du fonctionnement du client SOAP de 4ème Dimension.
Heureusement, il est possible de lire de manière brute les réponses SOAP entrantes en utilisant le paramètre
typeComposé lors de l’appel à la commande APPELER WEB SERVICE. Cette note technique traite de la
capture et de l’extraction de valeurs à partir des réponses SOAP brutes.
II. Exemple de méthode proxy SOAP
Le code ci-dessous correspond à une méthode proxy SOAP appelant un service Web qui retourne trois valeurs
(des retours à la ligne ont été rajoutés pour plus de clarté) :
C_ENTIER LONG(proxy_longint)
C_REEL(proxy_real)
C_TEXTE(proxy_text)
` ***********
` NOTE
` ***********
` http://127.0.0.1:8080/ signifie "appelle cette methode sur cette machine sur le `port 8080".
` Mettez à jour si nécessaire cette URl dans votre contexte.
` ***********
APPELER WEB SERVICE("http://127.0.0.1:8080/4DSOAP/";"A_WebService#returnThreeResults";
"returnThreeResults";"http://www.4d.com/namespace/default";Web Service dynamique )
Si (OK=1)
LIRE RESULTAT WEB SERVICE(proxy_longint;"outSecondsSinceMidnight")
LIRE RESULTAT WEB SERVICE(proxy_real;"outPi")
LIRE RESULTAT WEB SERVICE(proxy_text;"outServerVersion";*) ` Libération de la mémoire
Fin de si
III. Le paramètre Web Service Dynamique
Comme vous le constatez, APPELER WEB SERVICE est configurée pour utiliser le système Web Service
dynamique. Dans ce cas, la réponse SOAP est automatiquement analysée en interne et de manière transparente
par 4ème Dimension. Les valeurs de la réponse peuvent être relues à l’aide d’appel à LIRE RESULTAT WEB
SERVICE, comme dans les trois exemples d’appels ci-dessus. La structure XML ci-dessous correspond à
l'intégralité du corps du message de la réponse SOAP. Les valeurs accessibles par le système automatique sont
soulignées :
<ns1:returnThreeResultsResponse
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="http://www.4d.com/namespace/default">
<outSecondsSinceMidnight xsi:type="xsd:float">40174</outSecondsSinceMidnight>
<outPi xsi:type="xsd:float">3.141592653589793116</outPi>
<outServerVersion xsi:type="xsd:string">Version #0703</outServerVersion>
</ns1:returnThreeResultsResponse> |
IV. Le paramètre Web Service Manuel
La méthode proxy reproduite ci-dessus peut être réécrite afin de récupérer la structure XML complète dans un
BLOB, comme dans le code ci-dessous (des retours à la ligne ont été rajoutés pour plus de clarté) :
` ***********
` NOTE
` ***********
` http://127.0.0.1:8080/ signifie "appelle cette methode sur cette machine sur le `port 8080".
` Mettez à jour si nécessaire cette URl dans votre contexte.
` ***********
APPELER WEB SERVICE("http://127.0.0.1:8080/4DSOAP/";"A_WebService#returnThreeResults";
"returnThreeResults";"http://www.4d.com/namespace/default";Web Service sortie manuel )
Si (OK=1)
C_BLOB(proxy_fullResponse_blob)
LIRE RESULTAT WEB SERVICE(proxy_fullResponse_blob;*) ` Libération de la mémoire
C_TEXTE(proxy_fullResponse_text) ` Recopie dans une variable texte pour l'affichage.
proxy_fullResponse_text:=BLOB vers texte(proxy_fullResponse_blob;Texte sans longueur )
Fin de si
Le BLOB résultant comprend l'intégralité du corps du message SOAP listé plus haut. Cette structure XML
peut être copiée dans un texte, si elle ne dépasse pas 32 000 caractères, ou analysée par la commande Analyser
variable XML.
V. Lire les valeurs XML
Lire de l'XML brut n'est guère attrayant. Heureusement, les commandes XML natives ou externes simplifient
le processus de travail avec XML. La note technique "4D-200407-20-FR : Le composant XML_Utilities"
procure du code pour lire les valeurs d’éléments par nom. Par exemple, le code ci-dessous montre comment lire
les trois valeurs contenues dans la structure XML précédente en utilisant la fonction xutil_GetValue du
composant XML_Utilities.
C_ALPHA(16;$xmlref)
$xmlref:=Analyser variable XML(proxy_fullResponse_blob)
proxy_longint:=Num(xutil_GetValue ($xmlref;"outSecondsSinceMidnight"))
proxy_real:=Num(xutil_GetValue ($xmlref;"outPi"))
proxy_text:=xutil_GetValue ($xmlref;"outServerVersion")
FERMER XML($xmlref) `Fermer l'arbre XML et libère la mémoire occupée
VI. Avantages
Les avantages de la lecture des réponses complètes méritent d’être explicités :
- Lors du déboguage des échanges SOAP, il est plus facile de localiser les problèmes en regardant l'XML brut. Par exemple, il est plus facile de voir si le serveur SOAP a renommé, ajouté ou supprimé des éléments depuis que le code du client SOAP a été généré.
- Pour des informations complémentaires sur la manière de capturer et examiner les messages SOAP, reportez-vous à l'ouvrage "4D Web Companion", à la note technique "4D-200407-21-FR : Lecture d'une requête SOAP complète » ou à la note technique"4D-200308-22-FR : Détecter et suivre un problème TCP/IP ".
- La lecture manuelle des valeurs XML permet aux méthodes de client SOAP de relire des valeurs que 4ème Dimension ne sait pas lier automatiquement à ses paramètres, variables ou tableaux. Cette approche est pertinente lorsque, par exemple, le serveur SOAP retourne différents éléments lors de différentes situations.
- LIRE RESULTAT WEB SERVICE, pour un élément qui n'est pas présent dans la réponse courante, génère une erreur qui demande à être capturée et gérée. La lecture XML par du code personnalisée, comme les méthodes du composant XML_Utilities, ne provoque pas d’erreurs lorsque des éléments ne sont pas retrouvés.
- Expérimenter l'option manuelle amène le développeur à une meilleure compréhension des caractéristiques du client SOAP de 4ème Dimension. Cela lui permet un jugement en connaissance de cause lors du choix de l’approche de la construction de clients SOAP.
VII. Notes et limitations
Quelques limitations de la technique décrite dans cette note méritent d’être soulignées :
- L'option Web Service sortie manuel retourne le corps entier du message SOAP, mais ne retourne pas l'intégralité du message SOAP. En particulier, les entêtes éventuelles SOAP ne sont pas accessibles en 4D 2003.
- 4ème Dimension envoie des requêtes et lit des réponses SOAP via HTTP, le protocole du Web. Aucun entête HTTP contenu dans la réponse SOAP du serveur SOAP, y compris les cookies et les valeurs du code status, ne peut être relue.
- Si le serveur SOAP retourne une faute SOAP au lieu d'une réponse comprenant des valeurs, APPELER WEB SERVICE ne retourne aucun résultat.
VIII. Base exemple
__________________________________________________
Copyright © 1985-2008 4D SA - Tous droits réservés
Tous les efforts ont été faits pour que le contenu de cette note technique présente le maximum de fiabilité possible.
Néanmoins, les différents éléments composant cette note technique, et le cas échéant, le code, sont fournis sans garantie d'aucune sorte.
L'auteur et 4D S.A. déclinent donc toute responsabilité quant à l'utilisation qui pourrait être faite de ces éléments, tant à l'égard de leurs
utilisateurs que des tiers.
Les informations contenues dans ce document peuvent faire l'objet de modifications sans préavis et ne sauraient en aucune manière engager
4D SA. La fourniture du logiciel décrit dans ce document est régie par un octroi de licence dont les termes sont précisés par ailleurs dans la
licence électronique figurant sur le support du Logiciel et de la Documentation afférente. Le logiciel et sa documentation ne peuvent être
utilisés, copiés ou reproduits sur quelque support que ce soit et de quelque manière que ce soit, que conformément aux termes de cette
licence.
Aucune partie de ce document ne peut être reproduite ou recopiée de quelque manière que ce soit, électronique ou mécanique, y compris par
photocopie, enregistrement, archivage ou tout autre procédé de stockage, de traitement et de récupération d'informations, pour d'autres buts
que l'usage personnel de l'acheteur, et ce exclusivement aux conditions contractuelles, sans la permission explicite de 4D SA.
4D, 4D Calc, 4D Draw, 4D Write, 4D Insider, 4ème Dimension ®, 4D Server, 4D Compiler ainsi que les logos 4e Dimension, sont des marques
enregistrées de 4D SA.
Windows,Windows NT,Win 32s et Microsoft sont des marques enregistrées de Microsoft Corporation.
Apple, Macintosh, Power Macintosh, LaserWriter, ImageWriter, QuickTime sont des marques enregistrées ou des noms commerciaux de Apple Computer,Inc.
Mac2Win Software Copyright © 1990-2002 est un produit de Altura Software,Inc.
4D Write contient des éléments de "MacLink Plus file translation", un produit de DataViz, Inc,55 Corporate drive,Trumbull,CT,USA.
XTND Copyright 1992-2002 © 4D SA. Tous droits réservés.
XTND Technology Copyright 1989-2002 © Claris Corporation.. Tous droits réservés ACROBAT © Copyright 1987-2002, Secret
Commercial Adobe Systems Inc.Tous droits réservés. ACROBAT est une marque enregistrée d'Adobe Systems Inc.
Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires
respectifs.
__________________________________________________
 
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur.
La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
|