[RÉSOLU] Migration V6.2 vers V8 - Problème de récupération du body avec cRest
Publié : 20 nov. 2025, 14:59
Bonjour,
Lors de la migration d'une route de Talend V6.2 vers V8, J’ai rencontré un problème de comportement avec le composant cRest.
Contexte :
Lors de l'appel de l'URL http://localhost:8044/services/ZBU_BC_RFC_READ_TABLE_WS avec un body JSON via Postman :
Au lieu de récupérer le payload JSON avec ${in.body}, j'obtiens uniquement le chemin de l'URL : ZBU_BC_RFC_READ_TABLE_WS. Le payload d'entrée envoyé au cRest semble être perdu.
SOLUTION - Partie 1 : Récupération du body
D'après le support Talend, pour les méthodes POST, PUT ou PATCH avec un format de consommation XML ou JSON, il est obligatoire de définir une Bean class dans Talend v8.0.1 (Camel 3.x).
Étapes :
SOLUTION - Partie 2 : Transmission du payload à un autre service
Le second cRest ne fonctionnait pas correctement pour transmettre la requête au service final.
Solution finale : Remplacer le second cREST par un cTalendJob qui appelle un tRestClient. Cette approche fonctionne parfaitement.
Remarque importante : Cette solution est particulièrement adaptée dans mon cas où les payloads reçus sont très variés (120 services différents avec des schémas différents), car l'utilisation de String comme Bean class permet de gérer n'importe quel payload JSON sans avoir à créer une Bean class spécifique pour chaque schéma.
J'espère que cette solution aidera d'autres personnes confrontées à ce type de problème lors de la migration vers Talend V8 !
Lors de la migration d'une route de Talend V6.2 vers V8, J’ai rencontré un problème de comportement avec le composant cRest.
Contexte :
- Plateforme : Talend Data Services 8.0.1, Studio R2024-11v2
- Migration d'une route utilisant cMessagingEndpoint avec le composant Camel Restlet (maintenant déprécié) vers cRest
- La route doit recevoir une requête, sauvegarder le payload d'entrée, puis le transmettre à un autre service via un second cRest
Lors de l'appel de l'URL http://localhost:8044/services/ZBU_BC_RFC_READ_TABLE_WS avec un body JSON via Postman :
Code : Tout sélectionner
{ "Ztable":"ZBU_BC_0081_PDW1", "fields":[ {"Fieldname":"COUNTRY"}, {"Fieldname":"VTWEG"} ] }SOLUTION - Partie 1 : Récupération du body
D'après le support Talend, pour les méthodes POST, PUT ou PATCH avec un format de consommation XML ou JSON, il est obligatoire de définir une Bean class dans Talend v8.0.1 (Camel 3.x).
Étapes :
- Définir la Bean class sur "String" dans le champ "Bean class" de la section "REST API Mapping" du composant cRest
- S'assurer que les paramètres "Consumes" et "Produces" sont définis sur "JSON"
- Utiliser ${in.body[1]} au lieu de ${in.body} pour accéder au payload de la requête (fonctionne pour POST et PUT, mais pas pour GET)
- Propriétés standard de cRest : https://help.qlik.com/talend/en-US/medi ... -cxf/crest
- Création de Beans : https://help.qlik.com/talend/en-US/stud ... ating-bean
- Utilisation de Beans : https://help.qlik.com/talend/en-US/stud ... sing-beans
- Référence communauté : https://community.qlik.com/t5/Design-an ... -p/2247717
SOLUTION - Partie 2 : Transmission du payload à un autre service
Le second cRest ne fonctionnait pas correctement pour transmettre la requête au service final.
Solution finale : Remplacer le second cREST par un cTalendJob qui appelle un tRestClient. Cette approche fonctionne parfaitement.
Remarque importante : Cette solution est particulièrement adaptée dans mon cas où les payloads reçus sont très variés (120 services différents avec des schémas différents), car l'utilisation de String comme Bean class permet de gérer n'importe quel payload JSON sans avoir à créer une Bean class spécifique pour chaque schéma.
J'espère que cette solution aidera d'autres personnes confrontées à ce type de problème lors de la migration vers Talend V8 !