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.

Était-ce utile?

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]}&amp;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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top