> Tech > Génération automatique des Stubs en C/C++

Génération automatique des Stubs en C/C++

Tech - Par iTPro - Publié le 23 février 2012
email


Nous allons utiliser la classe Java wsdl2ws.sh livrée par Apache Axis afin qu’il nous génère tous les programmes clients nécessaires pour consommer ce Service Web. Nous ne détaillerons pas ici tous les paramètres attendus, mais vous pourrez visualiser l’aide en ligne de cette commande en tapant wsdl2ws.sh

-h sous QSH dans le répertoire /QIBM/ProdData/OS/WebServices/V1/client/BIN/

Voir figure 4.

A l’issu de la commande (figure 4), des sources de programmes en C (si -LC n’avait pas été indiqué au paramètre (1) du C++ aurait été généré) ont été créées dans le répertoire (2) à partir du WSDL fourni en (3).

Avec notre WSDL, on récupère StockQuoteSoap.h et StockQuoteSoap.c. En regardant les déclaratives dans le .h on peut voir : voir figure 5.

Chaque Service Web possède 4 fonctions « standards » comme montré en (1) de la Figure 5 ainsi qu’une ou plusieurs fonctions (2) d’appel du service lui-même.

Le Get___Stub permet d’initialiser et ouvrir la connexion, Destroy___Stub de la fermer, Get___Status de tester la dernière opération effectuée et Set___ExceptionHandler de gérer les erreurs SOAP.

Pour consommer notre service web depuis notre RPG, il nous faudra au minimum appeler les fonctions prototypées Get_StockQuoteSoap_stub(), GetQuote() ainsi que la fonction Destroy_StockQuoteSoap_stub(). Mais avec quels paramètres ?

AXISCHANDLE get_StockQuoteSoap_stub(const char* pchEndPointUri);

Cette fonction C reçoit en paramètre un char* c'est-à-dire un pointeur et renvoie aussi un pointeur à travers le Typdef AXISCHANDLE (il s’agit en fait du handle de la connexion établie).

void destroy_StockQuoteSoap_stub(AXISHANDLE pStub);

Cette fonction reçoit en paramètre le handle (renvoyé par Get___Stub) avec lequel la connexion a été établie, par contre ne renvoie aucune valeur (void).

xsdc__string GetQuote(AXISCHANDLE pStub, xsdc__string Value0);

Cette fonction est la plus importante car il s’agit su service en lui-même et les paramètres varient pour chaque Service Web invoqué. Elle reçoit le handle de la connexion (pointeur) ainsi qu’une variable de type « xsdc__string » et renvoie aussi un « xsdc__string » en retour. Mais ce type n’est pas standard, c’est un type défini dans Axis. S’agit-il d’un char (string) comme il semble le paraître ? Pour cela il faut regarder dans /QIBM/ProdData/OS/WebServices/V1/client/include/axis/AxisUserApi.h, il s’agit en fait aussi d’un pointeur. Voir figure 6.

Ecriture du programme Client

Maintenant que nous connaissons les fonctions à appeler ainsi que les bons paramètres, nous pouvons écrire notre RPG ILE pour consommer notre premier Service Web. Voir figure 7.

N’est-ce pas formidable ? En quelques lignes de code, vous consommez déjà votre premier Service Web en invoquant directement la bourse de New York. Le problème, StockQuote renvoie un fichier XML complet comme montré à la figure 3, il vous faudra soit extraire ces données par des %scan, %substr etc… ou simplement en utilisant le nouveau code opération XML-INTO de la V5R4. Je vous rassure, tous les Services Web ne renvoient pas forcément un résultat dans un champ caractère contenant du XML. Mais avec StockQuote c’est le cas.

Pour affecter proprement le contenu du XML dans des zones, il vous faudra décrire une Data Structure ayant la même forme que le XML résultant et possédant les mêmes noms de zone. Le but de cet article n’est pas de vous apprendre à utiliser XML-INTO, ce code opération est bien documenté, mais pour l’exemple, voici ce qu’il faudra rajouter à votre programme : Voir figure 8

Compilation et liage des modules

Il faut maintenant compiler le tout, c'est-à-dire les Stubs C/C++ d’Axis ainsi que notre ILE RPG pour en faire un programme unique. Voir figure 9.

Conclusion

Consulter la bourse ou la météo en temps réel, envoyer des SMS en masse, contrôler un Swift IBAN/BIC, etc… tout cela est simple à faire en ILE RPG ou COBOL ! Les services SOAP sont nombreux et diversifiés sur la toile, mais pensez-y aussi pour faire communiquer vos applicatifs intranet entre eux surtout s’ils résident sur des plates-formes hétérogènes.
 

Téléchargez gratuitement cette ressource

Comment sécuriser la Digital Workplace ?

Comment sécuriser la Digital Workplace ?

Avec le recours généralisé au télétravail, les entreprises ont ouvert davantage leur SI. En dépit des précautions prises, elles ont mécaniquement élargi leur surface d’exposition aux risques. Découvrez 5 axes à ne pas négliger dans ce Top 5 Sécurité du Télétravail.

Tech - Par iTPro - Publié le 23 février 2012