Example: bankruptcy

CONSOMMER DES SERVICES WEB EN RPG ILE - Accueil

CONSOMMER DES SERVICES WEB EN RPG ILE. Les avantages des SERVICES Web ne sont plus d montrer aujourd'hui, ils sont devenus le nouveau point de convergence des acteurs du march de l'informatique qui en font un nouveau standard accept de tous. Le vieux r ve de faire communiquer en temps r el diff rents programmes issus de diff rentes plates-formes h t rog nes et ceci quelque soit les distances, est consomm . Que ce soit dans votre intranet pour faire communiquer vos diff rents applicatifs, ou sur internet pour acc der un service gratuit ou payant, ils sont l'avenir et leur impl mentation au c ur de l'IBM i est devenue une sin cure. De nombreux articles d finissent avec pr cision ce qu'est un Service Web, leur utilit et la technologie employ e, iSeries News a d'ailleurs publi d j de nombreux articles sur le sujet, les plus remarquables r dig s par Skott Klement et son projet open-source HTTPAPI.

CONSOMMER DES SERVICES WEB EN RPG ILE Les avantages des Services Web ne sont plus à dØmontrer aujourd ˇhui, ils sont devenus le nouveau point de convergence des acteurs du marchØ de l ˇinformatiquequi en font un

Tags:

  Ile rpg

Information

Domain:

Source:

Link to this page:

Please notify us if you found a problem with this document:

Other abuse

Transcription of CONSOMMER DES SERVICES WEB EN RPG ILE - Accueil

1 CONSOMMER DES SERVICES WEB EN RPG ILE. Les avantages des SERVICES Web ne sont plus d montrer aujourd'hui, ils sont devenus le nouveau point de convergence des acteurs du march de l'informatique qui en font un nouveau standard accept de tous. Le vieux r ve de faire communiquer en temps r el diff rents programmes issus de diff rentes plates-formes h t rog nes et ceci quelque soit les distances, est consomm . Que ce soit dans votre intranet pour faire communiquer vos diff rents applicatifs, ou sur internet pour acc der un service gratuit ou payant, ils sont l'avenir et leur impl mentation au c ur de l'IBM i est devenue une sin cure. De nombreux articles d finissent avec pr cision ce qu'est un Service Web, leur utilit et la technologie employ e, iSeries News a d'ailleurs publi d j de nombreux articles sur le sujet, les plus remarquables r dig s par Skott Klement et son projet open-source HTTPAPI.

2 Le succ s de ce projet a fait r agir les quipes d'IBM Rochester. Ainsi, la V6R1 nous a apport . un lot important de nouveaut s concernant les SERVICES Web, dont nombre d'entre elles ont t port es en V5R4 par PTF. Nous poss dons dor navant en V5R4 un serveur de Service Web int gr l'OS qui vous permettra en quelques clics de transformer un programme ile rpg ou COBOL en Service Web tout en s'affranchissant de d ployer Websph re Application Server, mais nous traiterons ce sujet dans un autre article. La nouveaut qui nous concerne, le portage du projet Apache Fondation Axis C++ version dans l'IBM i. Axis est un Framework open-source qui offre en outre la possibilit de g n rer automatiquement des WSDL correspondant des classes Java ou inversement cr er des classes Java, C ou C++ sur la base d'un WSDL, et c'est ce dernier point qui va nous int resser dans cet article. Ainsi, toute la complexit d'acc s au programme distant avec le protocole HTTP travers des messages SOAP est masqu e dans ces classes proxy.

3 Il nous reste plus qu' appeler ces programmes g n r s pour CONSOMMER un Service Web comme indiqu sur la figure 1. RPG LE. C/C++ stubs Client Axis SOAP Serveur COBOL LE. Figure 1. Ainsi, les tapes n cessaires pour CONSOMMER un service web sont : R cup ration du WSDL dans l'IFS. G n ration des Stubs C/C++. Ecriture du programme Client Compilation et liage des modules Pour conna tre les limitations l'Axis C++ dans l'IBM i, je vous conseille de visualiser le situ dans le r pertoire /Qibm/ProdData/OS/Webservices/V1/Client/ . Extraits : WSDL is the only supported WSDL level. SOAP is the only supported over-the-wire protocol The response from the Server must be in UTF-8 format . R cup ration dans l'IFS du WSDL. WSDL est un fichier XML qui contient l'emplacement du Service Web sur la toile ainsi que les op rations (m thodes, param tres et valeurs de retour) que le service propose. Prenons un exemple avec le Service Web gratuit StockQuote, permettant d'interroger directement la bourse de NewYork (NYSE), vous pouvez le tester directement en ligne sur le lien suivant : Pour le tester, on saisi en ligne le code boursier IBM et on obtient en r ponse le message XML (figure 2).

4 <?xml version=" " encoding="utf-8" ?>. <string xmlns=". "> <StockQuotes> <Stock> <Symbol>IBM</. Symbol> <Last> </Last> <Date>11/17/2009</Date> <Time>4:00p m</Time> <Change>+ </Change> <Open> </Open> <High>12. </High> <Low> </Low> <Volume>7751233</Volume> <MktC. ap> </MktCap> <PreviousClose> </PreviousClose> <Percent ageChange>+ </PercentageChange> <AnnRange> - </AnnRange> <Earns> </Earns> <P-E> </P- E> <Name>INTL BUSINESS MAC</Name> </Stock> </StockQuotes>. </string>. Figure 2. On r cup re le fichier WSDL sur et on le place dans un r pertoire de l'IFS ex : /home/webservices/ sous le nom de (exemple pour la suite de cet article). Nous avons constat que le service web r pondait bien en le testant directement en ligne, avons r cup r son WSDL dans l'IFS (vous pouvez d'ailleurs visualiser son contenu avec DSPF '/home/ ', nous pouvons maintenant passer l' tape suivante. G n ration automatique des Stubs en C/C++.)

5 Nous allons utiliser la classe Java 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 -h sous QSH dans le r pertoire /QIBM/ProdData/OS/WebServices/V1/client/ BIN/. QSH Command Entry /QIBM/ProdData/OS/WebServices/V1/client/ -lc 1. -o/home/webservices 2. /home/ 3. Code generation completed. Generated files in directory '/home/webservices'. Figure 3. A l'issu de la commande (figure 3), des sources de programmes en C (si -LC n'avait pas t . indiqu au param tre du C++ aurait t g n r ) ont t cr s dans le r pertoire . partir du WSDL fourni en . Avec notre WSDL, on r cup re et En regardant les d claratives dans le .h on peut voir : 1. Chaque Service Web poss de 4 fonctions standards comme2montr en de la Figure 4.

6 Ainsi qu'une ou plusieurs fonctions d'appel du service lui-m me. Figure 4. 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).

7 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/ , il s'agit en fait aussi d'un pointeur. 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. *--------------------------------------- ----------------------------- * Prototypes et interfaces *--------------------------------------- ----------------------------- DgetStub PR * ExtProc('get_StockQuoteSoap_stub').

8 D pEndpoint * Value *. DdestroyStub PR ExtProc('destroy_StockQuoteSoap_Stub'). D AxisHandle * Value *. DWebservice PR * ExtProc('GetQuote'). D AxisHandle * Value D Parameter1 * Value *. *--------------------------------------- ----------------------------- * D clarations diverses. *--------------------------------------- ----------------------------- D pResultat S *. D Resultat S 32565 Varying D WsStubP S *. *--------------------------------------- ----------------------------- * Web service logic. The code will attempt to invoke the Web Service *--------------------------------------- ----------------------------- /FREE. // Get a Web service stub. The host and port for the endpoint may need // to be changed to match host and port of Web service. You can pass // *NULL to getStub() if the endpoint in the WSDL file is correct. WsStubP = getStub(*NULL); . Parameter = 'IBM' + x'00';. pResultat = WebService(WsStubP : %addr(Parameter)).

9 Resultat = %str(pResultat);. destroyStub(WsStubP); . *inlr = *on;. Figure 5. Ouverture de la connexion, r cup ration du handle de connexion dans un pointeur. Constitution du param tre envoyer, toujours terminer par x'00' pour le C/C++. Appel du Service Web avec le handle de connexion et l'adresse du ou des param tres. En retour il renvoie un pointeur m moire ou est stock le r sultat. R cup ration du contenu du r sultat partir du pointeur renvoy . Cl ture de la connexion en lui passant le handle de connexion, pas de valeur en retour. 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 2, 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.

10 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 : *--------------------------------------- ----------------------------- * Data Structure pour XML-INTO. *--------------------------------------- ----------------------------- D StockQuotes DS Qualified D Stock LikeDS(Stocks). D Stocks DS Qualified D Symbol 20. D Last 20. D Date 20. D Time 20. D Change 20. D Open 20. D High 20. D Low 20 . D Volume 20. D MktCap 20. D PreviousClose 20. D D 20.


Related search queries