Question
Lors de l'utilisation du composant exec
est-il possible de spécifier args en ligne plutôt que de devoir les mettre dans le ExecBinding.EXEC_COMMAND_ARGS
?
Par exemple, j'ai cette route:
from("seda:getPolicyListStart")
.process(new Processor() {
public void process(Exchange e) {
ClientRequestBean requestBean = (ClientRequestBean)e.getIn().getBody();
List<String> args = new ArrayList<String>();
args.add(requestBean.getClient());
args.add(requestBean.getSort());
e.getOut().setHeader(ExecBinding.EXEC_COMMAND_ARGS, args);
}
})
.to("exec:some_command?useStderrOnEmptyStdout=true")
.convertBodyTo(String.class)
.log("Executed OS cmd and received: ${body}")
Cependant j'aurais pensé que je pouvais utiliser l'expression simple langage pour le simplifier comme ceci:
from("seda:getPolicyListStart")
.to("exec:some_command?useStderrOnEmptyStdout=true&args=${body.client} ${body.sort}")
.convertBodyTo(String.class)
.log("Executed OS cmd and received: ${body}")
Similaire à comment vous pouvez utiliser la langue de fichier (un sous-ensemble de simple) lorsque vous utilisez le composant File.
Est-il possible? Dans le cas contraire, le premier exemple peut être simplifiée?
UPDATE [solution]:
from(requestNode)
.routeId(routeId)
.recipientList(simple("exec:"+osCmd+"?useStderrOnEmptyStdout=true&args=${body.client}"))
.convertBodyTo(String.class)
.log("Executed OS cmd and received: ${body}")
.to(responseNode);
Merci.
La solution
La réponse est dans les modèles EIP. Vous devez utiliser le modèle liste des destinataires de dynamique EIP lorsque vous calculez une destination de point final à l'exécution.
http://camel.apache.org/recipient-list.html
La liste des destinataires accepte une expression qui signifie que vous pouvez utiliser le langage simple pour construire les paramètres lors de l'exécution
Autres conseils
Cela m'a pris beaucoup plus de temps à comprendre qu'il devrait de fait, donc pour d'autres qui trébuche ici et se confondre.
Au printemps XML les ci-dessus ressemble
<recipientList>
<simple>exec:/usr/bin/php?args=yii individual-participant-report/runreport ${body[assessment_id]} ${body[scope_id]} ${body[participation_id]} ${body[participation_email]}&workingDir={{reporting.folder}}</simple>
</recipientList>
Dans cet exemple, je crée une demande de dynamique pour exécuter certains php (en particulier une commande 2 yu) qui est peuplée par des variables dans le hashmap $ / corps qui a été généré à partir d'une requête SQL plus tôt dans la route.