Lorsque vous écrivez des clients de service web, il est parfois difficile de recréer les cas de test en erreur. Vous pouvez très simplement utiliser node.js pour créer vous-même un service qui répond avec les valeurs que vous souhaitez !

Quelques lignes de node.js suffisent pour ce cas simple. Si vous avez besoin de personnaliser ou de rendre dynamique, il faudra quelques connaissances basiques en node.js.

Je suis reparti de l’article que nous avions écrit sur la gestion des soap fault : https://www.gaia.fr/gerer-les-erreurs-dans-le-client-ile-de-web-service/

Détaillons maintenant comment nous avons mis en œuvre node.js pour ce simple test.

Premièrement, il faut que node.js soit installé sur votre IBM i, soit sous forme d’une des options du produit 5733-OPS :

Soit via le Open Source Packet Management disponible avec ACS (basé sur yum) :

Pour tester la version active chez vous (réglable avec le PATH) :

Il nous faut écrire un serveur node.js. Ici nous avons simplifié au maximum : aucun contrôle des valeurs reçues et renvoi d’une valeur en dur. Pour des tests, c’est un début qui permet de déboguer votre client.

Créer un fichier dans l’IFS, chez nous convertTemp.js, puis insérer le code suivant :

Quelques explications sur le code :

require(‘http’) : dépendance node.js, le module http est nécessaire à notre script

variables ip et port : IP et port sur lequel le service sera actif. Cet IP/port ne doit pas déjà être utilisé par un autre service. Vous pouvez vérifier avec NETSTAT.

http.createServer(function (req, res)) : définition d’un fonction serveur HTTP traitant la requête req et générant la réponse res.

res.writeHead(500, {‘Content-Type’: ‘text/xml’}) : le code retour sera HTTP 500 et l’entête contiendra Content-Type: text/xml

res.end(‘message…’) : le message renvoyé à l’appelant

webserver.listen(port, ip) : démarrage du service sur le port et l’IP indiqué

console.log(‘Server running at http://’ + ip + ‘:’ + port) : affichage à la console (ici la session QSH ou QP2TERM) d’un message indiquant que le service est démarré

Pour lancer votre script :

Il sera actif jusqu’à ce que vous l’arrêtiez par F3.

Vous pouvez bien sur le soumettre pour plus de facilité. Vous l’arrêterez alors par ENDJOB.

On commence par tester dans SOAP UI, pour avoir un outil neutre :

Maintenant on peut déboguer notre programme RPG (avec un point d’entrée de service, c’est plus pratique), en maîtrisant l’ensemble des éléments :

Ici notre code est bon, on récupère les différentes informations de l’exception soap.

Vous pouvez maintenant simuler tous les cas difficiles ou impossible à reproduire en tests avec vos fournisseurs : messages différents de celui attendu, données mal formées, …