Talend dans sa volonté d’agrandir sa suite de logiciels, propose une variante dédié à l’enterprise service bus (ESB). La grande force de cet outil est de créer rapidement des webservices sans devoir développer la moindre ligne de code.
Définition
Le service web est un programme dont l’appel peut être réalisé à travers le réseau, il permet l’échange d’informations entre diverses applications, deux modes d’appels sont disponibles le mode REST et le mode SOAP.
REST vs SOAP
Le résultat (réponse) d’un appel à un webservice est toujours un fichier XML qui va contenir les données formatées selon des balises prédéfinies. La seule différence est l’appel qui se fera via une requête HTML de type POST/GET pour le REST et l’envoi d’un XML pour l’appel de type SOAP.
WSDL
L’outil permet la création rapide de webservices depuis un WSDL existant ou non, un WSDL est la description complète d’un webservice c’est-à-dire les méthodes utilisées et paramètres en entrée et sortie.
Plus d’infos ici : http://fr.wikipedia.org/wiki/Web_Services_Description_Language
Installation de Talend open studio for ESB
Télécharger l’outil ici : http://www.talend.com/products/esb
Une fois dézippé on obtient ces répertoires:
Le package est scindé en deux parties, le studio talend proprement dit et le runtime composé de divers outils très utiles au monitoring et à l’implémentation (non expliqué dans cet article)
Nouveaux composants
Quatre composants importants pour les appels SOAP, utilisez le protocole SOAP lorsque vous voulez échanger des informations structurées et typées. Deux autres composants déjà existants pour les appels REST, utilisez ce protocole http REST lorsque vous souhaitez que votre application client effectue une requête sur les informations ou les mette à jour.
tESBConsumer
- Appelle la méthode définie du Service Web invoqué et retourne la classe, selon les paramètres spécifiés.
tESBProviderFault
- Génère un message Fault (message d’erreur) provenant du Service Web, à la fin du Job Talend.
tESBProviderRequest
- Expose un Job Talend comme un Service Web.
tESBProviderResponse
- Le composant tESBProviderResponse génère un message de réponse à la fin d’un Job Talend.
Démonstration
Nous allons utiliser une base de données MySql avec une table de test. Si vous n’avez pas de base de données sous la main je vous conseille d’installer XAMPP, le package est disponible ici : http://www.apachefriends.org/fr/xampp.html
Une fois installé, connectez-vous à PhpMyAdmin et lancez les requêtes SQL suivantes:
Création de la base de données
CREATE DATABASE `webservice` ;
Création de la table des pays
CREATE TABLE `webservice`.`country` ( `idcountry` INT NOT NULL AUTO_INCREMENT , `isocode` VARCHAR(45) NULL , `countryname` VARCHAR(45) NULL , PRIMARY KEY (`idcountry`) ) DEFAULT CHARACTER SET = utf8;
Création des données de test
INSERT INTO webservice.country (isocode,countryname) VALUES ('LU', 'Luxembourg'); INSERT INTO webservice.country (isocode,countryname) VALUES ('FR', 'France'); INSERT INTO webservice.country (isocode,countryname) VALUES ('BE', 'Belgique');
Affichage des données avec Mysql Workbench
Nous nous lancerons ensuite dans la création et le déploiement d’un web service de démo, pour ce webservice, nous partirons de zéro (pas d’importation d’un WSDL) nous utiliserons la table précédemment créée pour traduire des code iso de pays en libellé complet, la méthode d’appel sera en SOAP.
Lancez l’application (attention que les temps de chargement sont longs)
Cliquez sur « Créer » et nommez votre projet
Une fois dans le référentiel de Talend, cliquez droit sur Services puis « Create service »
Tapez le nom de votre Webservice et cliquez sur « suivant »
Création d’un nouveau WSDL
Note : Il est possible ici d’importer un WSDL existant, pour info, ce site en offre des milliers gratuitement : http://www.webservicex.net
L’éditeur de WSDL s’ouvre ensuite, même lorsque vous importez un WSDL existant.
Cette fenêtre MonWebService_0.1.WSDL est divisée en 3 parties :
- La partie gauche va définir le port utilisé lors de l’exportation du webservice ainsi que la machine hôte.
- Le milieu sert à paramétrer le binding qui est est un objet WSDL clé fournissant une spécification concernant la transmission bidirectionnel de messages.
- La partie droite définit le type d’entrée et de sortie (dans notre cas ce sera de type String)
Un binding référence exactement un PortType, il contient des éléments d’extensibilité (par exemple, SOAP, HTTP et MIME) pour spécifier les détails du protocole. Chaque port dans un service référence exactement un binding.
Pour paramétrer le service, faites un clic droit puis « ESB Runtime Options »
- Use Service Activity Monitor
Le SAM fait partie des services contenus dans le répertoire runtime, il permet de logguer les webservices et d’en surveiller l’activité, les temps de réponse et d’en faire l’analyse.
- Use Service Locator
Cochez cette case pour maintenir la disponibilité du service, afin de répondre aux demandes et aux accords de niveau de service (SLAs).
- Username / Password
Cochez cette case pour activer le jeton Username (identifiant) pour la sécurité
Création et lien d’un job
Une fois le service créé, il faut le lier à un job, il faut donc cliquer droit sur celui-ci et faire « create new job and assign it to this service operation » pour en lier un existant)
Cliquez sur « terminer »
Le job créé s’ouvre avec deux composants prédéfinis, un tESBProviderRequest pour intercepter la requête ainsi qu’un tESBProviderResponse pour renvoyer un résultat, nous allons maintenant construire le webservice qui utilisera notre table de test, notez que dans cette version ESB l’exécution d’un job composés de composants spécifiques aux webservices se traduit par une publication.
Création du job
Glissez-déposez un composant tMysqlInput pour interroger la base de données
Faire une sélection des champs de la table country
Il faut maintenant créer les schémas des entrées et sortie de votre nouveau webservice, cliquez droit sur le service et faire « importer les schémas WSDL »
Cela va générer les metadata, c’est-à-dire le schéma et les types de données des entrées et sortie de notre webservice. (in de type « string » et out de type « string » également)
Le composant tXmlMap
C’est un composant tMap classique dédié au format XML, il va nous permettre de mapper les données d’entrée et de sortie, pour cela, utilisez le type « document » qui est aussi dédié au mode webservice.
Lorsque l’on définit une ligne de données de type « Document » , une arborescence XML de base est créée pour refléter les détails de la structure. L’arborescence est composée d’un nombre minimum d’éléments requis pour une arborescence XML valide.
• L’élément racine (root) : C’est un élément obligatoire, il est la base d’une arborescence XML.
• L’élément de boucle (loop) : Il détermine l’élément d’itération, par défaut, l’élément racine est défini comme l’élément de boucle.
Dans la partie gauche, cliquez droit sur le « payload » et sélectionner « import from repository »
Sélectionnez les metadata correspondant à l’entrée
Idem dans la partie droite concernant la sortie
Mappez l’entrée avec le champ « isocode » puis le champ « countryname » avec la sortie.
Dans les paramètres de la jointure choisissez « reload at each row » pour forcer l’interrogation de la table à chaque appel et sélectionnez « inner join »
Lancement du job
Il est normal que le job soit en stand-by, votre webservice exécuté est en fait déployé, il est en attente d’une requête car l’option « keep listening » de votre composant TESBProviderRequest est cochée par défaut.
Visionner le WSDL en ouvrant votre navigateur préféré et tapez http://localhost:8090/services/MonWebService?WSDL
Programmer un test
Nous pourrions très bien recréer un job d’appel à notre webservice directement dans talend mais j’ai préféré utiliser l’excellent SOAPUI.
SOAPUI est un outil graphique de test inter-platform disponible à cette adresse : http://www.soapui.org/
Une fois installé, créez un nouveau projet en cliquant droit sur « Projets »
Donnez un nom de projet et entrez l’adresse du webservice, cochez « create request » pour générer le squelette d’appel SOAP.
La requête est automatiquement proposée, il ne reste plus qu’à insérer un code iso en paramètre d’entrée et de cliquer sur « submit »
Miracle, le résultat s’affiche dans la partie droite, votre webservice répond bien aux appels de SOAPUI 😉
Conclusion
Talend ESB possède la même interface que son grand frère « Data Integration », on retrouve donc ses marques rapidement. Le développement de webservices qui semble toujours être des plus ardus pour les néophytes devient un jeu d’enfant.
Bonjour ,
j’ai fais le meme etapes mais j’arrive pas à afficher le shema WSDL une page blanche qui s’aafiche (:
avez vous une idée pourquoi ?
merci
Bonjour,
Il me faudrait plus d’infos 😉 Quel navigateur utilisez-vous ? Est-ce que le composant provider est paramétré « keep listening » lors du lancement du job ? Est-ce que SOAP UI retourne une réponse ?
Merci
Merci pour ce bon tuto, j’ai validé le fonctionnement avec SoapUI
mais je n’arrive pourtant pas à faire fonctionner un bête client PHP avec SoapClient
PalmeListeOperation(array(‘in’ => « »));
?>
[Thu Jan 15 11:15:08.904030 2015] [:error] [pid 15679] [client 127.0.0.1:37788] PHP Fatal error: Uncaught SoapFault exception: [soap:Server] Could not generate the XML stream caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog\n at [row,col {unknown-source}]: [2,0]
quelqu’un a-t-il réussi avec succès ?
salut
comment je peux utiliser le composant TRestClient et le composant tlogrow pour afficher le résultat pour créer un job?
Suite au tuto, j’ai l’erreur
faultstring: Could not generate the XML stream caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog at [row,col {unknown-source}]: [2,0].
Le wsdl est correct, cet erreur est après l’invocation du ws ?
Cordialement
Tache 1. En utilisant mysql ou postgresql, crée une base de données contenant au mois une table (la nom de la table doit être votre nom). La table doit contenir au mois trois champs, dont un entier et une chaine de caractères.
Tache 2. Créer un(des) job(s) Talend qui expose via deux opérations webservice. Le premier doit permettre de réaliser une operation de type select et le second une opération de type update
Tache 3. Ajouter un mécanisme de controle, au niveau du job, sur les paramètres envoyés au niveau de la requette ( par exemple ne pas autoriser une mise a jour si un des champs est vide). Dans ce cas de figure le job est suppose retourner un message soap d’erreur.
Tache 4. Ajouter un composant Talend de votre choix et intégrerez le dans le job.
Merci pour ce tuto
j’ai besoin de votre aide , j’ai respecté les etapes mais au niveau du map je ne peux pas modifier les champs « join model » et « match model »