Talend ESB: Le webservice pour débutants

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.

art7_img1_talend_esb_webservice_pour_nuls

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

art7_img2_talend_esb_webservice_pour_nuls

Une fois dézippé on obtient ces répertoires:

art7_img3_talend_esb_webservice_pour_nuls

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.

art7_img4_talend_esb_webservice_pour_nuls

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

 art7_img5_talend_esb_webservice_pour_nuls

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)

art7_img6_talend_esb_webservice_pour_nuls

Cliquez sur « Créer » et nommez votre projet

Une fois dans le référentiel de Talend, cliquez droit sur Services puis  « Create service »

art7_img8_talend_esb_webservice_pour_nuls

Tapez le nom de votre Webservice et cliquez sur « suivant »

art7_img9_talend_esb_webservice_pour_nuls

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.

art7_img11_talend_esb_webservice_pour_nuls

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 »

art7_img12_talend_esb_webservice_pour_nuls

  • 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)

art7_img13_talend_esb_webservice_pour_nuls

art7_img14_talend_esb_webservice_pour_nuls

Cliquez sur « terminer »

art7_img15_talend_esb_webservice_pour_nuls

art7_img16_talend_esb_webservice_pour_nuls

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

art7_img17_talend_esb_webservice_pour_nuls

Faire une sélection des champs de la table country

art7_img18_talend_esb_webservice_pour_nuls

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 »

art7_img19_talend_esb_webservice_pour_nuls

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)

art7_img20_talend_esb_webservice_pour_nuls

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.

art7_img21_talend_esb_webservice_pour_nuls

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.

art7_img22_talend_esb_webservice_pour_nuls

Dans la partie gauche, cliquez droit sur le « payload » et sélectionner  « import from repository »

art7_img23_talend_esb_webservice_pour_nuls

Sélectionnez les metadata correspondant à l’entrée

art7_img24_talend_esb_webservice_pour_nuls

Idem dans la partie droite concernant la sortie

art7_img25_talend_esb_webservice_pour_nuls

Mappez l’entrée avec le champ « isocode » puis le champ « countryname » avec la sortie.

art7_img26_talend_esb_webservice_pour_nuls

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 »

art7_img27_talend_esb_webservice_pour_nuls

Lancement du job

art7_img28_talend_esb_webservice_pour_nuls

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.

art7_img29_talend_esb_webservice_pour_nuls

Visionner le WSDL en ouvrant votre navigateur préféré et tapez http://localhost:8090/services/MonWebService?WSDL

art7_img30_talend_esb_webservice_pour_nuls

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 »

art7_img31_talend_esb_webservice_pour_nuls

Donnez un nom de projet et entrez l’adresse du webservice, cochez « create request » pour générer le squelette d’appel SOAP.

art7_img32_talend_esb_webservice_pour_nuls

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 »

art7_img33_talend_esb_webservice_pour_nuls

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.

0 thoughts on “Talend ESB: Le webservice pour débutants

  1. KH

    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

  2. Saillantist

    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 ?

  3. RJ

    salut
    comment je peux utiliser le composant TRestClient et le composant tlogrow pour afficher le résultat pour créer un job?

  4. dguenard

    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

  5. Haddad LAMARI

    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.

  6. Hela BESBES

    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 »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> 

Petit calcul pour valider votre commentaire! merci * Time limit is exhausted. Please reload CAPTCHA.