Développer un client SOAP avec le projet groovy-wslite et Membrane SOA Model
groovy-wslite est un projet intéressant faisant partie de l'écosystème Groovy, et permettant d'écrire facilement des clients qui vont pouvoir consommer des services web de type SOAP et REST.
Pour un client SOAP, groovy-wslite permet de contrôler explicitement la forme du message SOAP à envoyer ; cela diffère de la partie cliente du module GroovyWS (projet plus ancien et dormant) qui doit au préalable analyser le document WSDL du service, afin de générer les classes Java de liaison adéquates à la volée, et de permettre l'invocation des opérations du service web.
Avec un client groovy-wslite, un message SOAP peut être passé sous la forme d'une chaîne de caractères, ou bien construit comme on le ferait pour un document XML avec le builder MarkupBuilder
.
Prenons comme exemple le service web Stock Quote décrit sur le site web WebserviceX.NET ; le script Groovy ci-dessous, qui utilise GRAPE, permet d'invoquer son opération GetStock
pour obtenir une valeur boursière :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Dans ce script le message SOAP est donnée explicitement par une chaîne de caractères, et plus précisément, par une GString multiligne qui va permettre l'interpolation de la variable symbolValue
.
De manière équivalente, dans le nouveau script ci-dessous, on utilise cette fois le builder de message de groovy-wslite :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Comme pour tout autre builder Groovy, on arrive à un code plus concis et clair !
Cependant, pour former un message SOAP correctement, il faut soit disposer d'une documentation (c'est le cas pour le service Stock Quote), soit le déduire de l'analyse du document WSDL du service. Dans ce dernier cas, on peut bien sûr recourir à un outil tel que SoapUI qui, à partir de l'importation du document WSDL, est en mesure de générer des modèles de requêtes pour chaque opération de service web. Cela permet de créer des tests et des suites de test dans l'interface utilisateur de SoapUI.
Une autre alternative est d'utiliser la librairie Membrane SOA Model, qui a l'avantage de pouvoir être appelée depuis du code Groovy, comme dans cet exemple de script :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
Dans ce script relativement simple, le document WSDL du service Stock Quote est analysé et le résultat de cette analyse placé dans la variable wsdl
; puis à l'aide d'uns instance de SOARequestCreator
, on génère un modèle de requête pour l'opération GetQuote dans un objet StringWriter
, dont le contenu est affiché.
Il a fallu également préciser, le nom du port souhaité, ainsi que le nom du binding, informations présentes dans le document WSDL.
L'affichage produit par le script, que vous allez pouvoir exploiter avec groovy-wslite, est reproduit ci-dessous :
1 2 3 4 5 6 7 8 |
|
Grâce à l'API Java de Membrane SOA Model, on peut également générer tous les messages de requête SOAP correspondant aux opérations de service web décrit dans un document WSDL. A titre d'exemple, voici comment procéder avec un script Groovy :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
Vous pouvez récupérer ce script en tant que fichier attaché à cet article.
SoapUI permet de créer des suites de test pour interagir avec un service web, et de créer ainsi des scénarios dans lesquels le résultat d'un appel d'opération de service web peut être repris pour alimenter les paramètres d'un autre appel ; il même possible de réaliser cela avec des scripts Groovy. Cela dit, le script que l'on écrit, et qui est sauvegardé au sein du projet SoapUI, n'est pas forcément clair.
Produire un script de test Groovy comprenant tout un scénario à l'aide de groovy-wslite et de Membrane SOA Model constitue donc une alternative très intéressante, si l'on préfère une approche scriptée !