web-dev-qa-db-fra.com

Apache Camel: comment stocker la variable pour une utilisation ultérieure

en "jouant" avec Camel en utilisant Spring DSL, je suis tombé sur le problème suivant. Supposons que le flux de messages attendu ressemble à ceci:

  1. le client envoie HTTP POST message avec corps XML à CAMEL
  2. CAMEL proxies HTTP POST message vers le serveur, avec l'URI légèrement adapté en utilisant les informations du corps XML reçu (par exemple: utilisez XPATH pour filtrer un certain paramètre)
  3. après que CAMEL a reçu une réponse, CAMEL envoie un message HTTP PUT vers le serveur, en utilisant les paramètres du corps XML reçu en 1

Donc quelque chose comme:

<route>
   <from uri="...">
   <to uri="...">
   <to uri="...">
 </route>

Question: comment stocker les paramètres dans Spring DSL à l'étape 1, afin de pouvoir les utiliser plus tard à l'étape 3?

Donc, je voudrais extraire les paramètres XML du corps XML du message reçu à l'étape 1 et les mettre dans des variables, que je pourrai ensuite utiliser pour composer le message à envoyer à l'étape 3.

Pour extraire les paramètres, je pensais utiliser XPATH. Cela semble correct, mais je ne vois tout simplement pas comment mettre la sortie de XPATH dans une variable puis utiliser cette variable plus tard ... (syntaxe ??)

Remarque: comme vous pouvez le voir, mes connaissances en développement sont plutôt limitées ... désolé pour cela. Mais ce serait toujours formidable si quelqu'un pouvait aider avec ça :).

18
opstalj

vous pouvez définir les données de stockage dans les propriétés Exchange ou les en-têtes de message comme celui-ci ...

.setHeader("ID", XPathBuilder.xpath("/order/@id", String.class))
.setProperty("ID", XPathBuilder.xpath("/order/@id", String.class))

puis récupérez-les dans un bean/processeur de la Bourse comme ceci ...

String propId = (String) exchange.getProperty("ID");
String headerId = (String) exchange.getIn().getHeader("ID");                        }
20
Ben ODay

Je vous laisse quelques exemples:

<setHeader headerName="token">
    <constant>someValue</constant>
</setHeader>

<setHeader headerName="userName">
    <simple>${properties:userName}</simple>  //from config
</setHeader>

<setProperty propertyName="bodyBkp">
    <simple>${in.body}</simple>
</setProperty>

<setProperty propertyName="orderNumber">
    <xpath resultType="String">//item[1]/orderNumber/text()</xpath>
</setProperty>

Getter

${exchangeProperty[orderNumber]}

${in.headers.token}

Documentation

Vérifiez le langage d'expression simple: http://camel.Apache.org/simple.html

Parfois, regarder les cas de test de Camel peut également être utile, en particulier pour Spring DSL:

4
Juan Pablo Astorga