Apache Camel Exec с аргументами - PullRequest
       1

Apache Camel Exec с аргументами

4 голосов
/ 05 ноября 2010

При использовании компонента exec можно указывать аргументы inline, а не устанавливать их в ExecBinding.EXEC_COMMAND_ARGS?

Например, у меня есть этот маршрут:

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}")

Однако я бы подумал, что мог бы использовать язык простых выражений, чтобы упростить его следующим образом:

from("seda:getPolicyListStart")
.to("exec:some_command?useStderrOnEmptyStdout=true&args=${body.client} ${body.sort}")
.convertBodyTo(String.class)
.log("Executed OS cmd and received: ${body}")

Аналогично тому, как вы можете использовать File File (подмножество Simple) при использовании File Component.

Возможно ли это? Если нет, можно ли упростить первый пример?

ОБНОВЛЕНИЕ [решение]:

    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);

Спасибо.

Ответы [ 2 ]

6 голосов
/ 05 ноября 2010

Ответ в шаблонах EIP. Вам нужно использовать шаблон EIP динамического списка получателей, когда вы вычисляете конечную точку назначения во время выполнения.

http://camel.apache.org/recipient-list.html

Список получателей принимает выражение, которое означает, что вы можете использовать простой язык для построения параметров во время выполнения

1 голос
/ 22 июля 2016

Мне потребовалось гораздо больше времени, чтобы понять, чем следовало бы это сделать, поэтому для других, которые споткнулись здесь и запутались.

В Spring XML выше выглядит как

<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>

В этом примере я создаю динамический запрос для запуска некоторого php (в частности, команды yii 2), который заполняется через переменные в hashmap / $ body, которые были сгенерированы из SQL-запроса ранее в маршруте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...