Objectif
Nous voulons pouvoir extraire les données reçues par notre webservice qui sont de type x-www-form-urlencoded
Données en entrée
Les données en entrée arrivent sous la forme suivante :
nom=John&prenom=Rambo&age=55
Construction du point d’entrée
Vue globale du point d’entrée :
tRESTRequest :
Nous créons pour notre exemple un point d’entrée de type REST. Nous utilisons le composant tRESTRequest avec les paramètres suivants :
- Endpoint REST : “/talend/test”
- REST API Mapping :
- Output Flow : urlForm
- Dans les options, on configure le schéma suivant :
- Il ne faut pas oublier de spécifier « form » dans la colonne Commentaire pour l’ensemble des champs à extraire.
- HTTP Verb : POST
- URI Pattern : “/form”
- Consomme : Form
- Produit : (pour notre exemple, le WS ne retourne pas de réponse)
tRunJob
Pour pouvoir configurer complètement ce composant, nous devons dans un premier temps configurer le job associer.
Dans notre exemple, le composant fait appel au job ws001_get_form. Ce dernier est très simpliste est contient les composants suivants :
- tFixedFlowInput : pour récupérer les paramètres reçus par le point d’entrée
- tLogRow : pour afficher dans la console les éléments récupérés
Configuration des contextes :
Dans ws001_get_form, nous devons configurer 3 variables de contextes qui contiendront les valeurs reçues :
Ensuite nous pouvons configurer le tFixedFlowInput :
- Schéma :
- Composant :
- Ici, les valeurs des différentes colonnes vont prendre celles des variables de contexte
Nous en avons terminé avec ws001_get_form, nous pouvons donc revenir au tRunJob du point d’entrée.
Dans ce dernier, nous pouvons désormais configurer les paramètres :
On coche Transmettre tout le contexte.
Comme nous avons créé les variables de contexte dans ws001_get_form, ces dernières sont désormais accessibles dans le tableau Paramètre de contexte.
Il nous suffit de les rajouter avec le petit « + » en bas du tableau.
Pour leur valorisation, il nous faut prendre le nom des colonnes présentes dans le flux entrant.
Dans notre cas, cela sera :
- urlForm.nom
- urlForm.prenom
- urlForm.age
Enfin dans Advanced settings, nous cochons Propagate the child result to the output schema (bonne pratique).
Test du WS
Nous pouvons à présent exécuter le point d’entrée. Il sera accessible à l’adresse suivante : http://localhost:8090/talend/test/form
Afin de pouvoir lui envoyer notre appel POST de type x-www-form-urlencoded, nous allons utiliser POSTMAN
Dans ce dernier, nous sélectionnons POST et nous renseignons l’url à droite.
Ensuite, nous nous rendons dans l’onglet Body puis sur x-www-form-urlencoded. Nous renseignons ensuite le tableau KEY/VALUE avec les celles gérées par notre WS :
Une fois tout configuré, nous pouvons envoyer la requête avec le bouton Send.
Si tout est OK, nous aurons Status : 202 Accepted en bas à droite.
Dans Talend, nous pouvons voir que ws001_get_form a bien reçu les données grâce à l’affichage du tLogRow :
Démarrage du job ws000_point_entree_test a 11:09 28/02/2019.[statistics] connecting to socket on port 3986[statistics] connected[WARN ]: org.eclipse.jetty.server.handler.AbstractHandler - No Server set for org.apache.cxf.transport.http_jetty.JettyHTTPServerEngine$1@78bbaf83.----+------+---.| tLogRow_1 ||=---+------+--=||nom |prenom|age||=---+------+--=||John|Rambo |55 |'----+------+---'