Apache camel 带args的Apache Camel exec

Apache camel 带args的Apache Camel exec,apache-camel,Apache Camel,使用exec组件时,是否可以内联指定参数,而不必在ExecBinding.exec\u命令\u args中进行设置 例如,我有以下路线: from("seda:getPolicyListStart") .process(new Processor() { public void process(Exchange e) { ClientRequestBean requestBean = (ClientRequestBean)e.getIn().getBody();

使用
exec
组件时,是否可以内联指定参数,而不必在
ExecBinding.exec\u命令\u 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}")
与使用文件组件时使用文件语言(Simple的子集)的方式类似

可能吗?如果不是,第一个例子可以简化吗

更新[解决方案]:

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

谢谢。

答案在EIP模式中。在运行时计算端点目标时,需要使用动态收件人列表EIP模式


收件人列表接受一个表达式,这意味着您可以在运行时使用简单的语言来构造参数

我花了很长时间才理解,这比它应该做的要长得多,因此对于其他在这里遇到困难并感到困惑的人来说

在SpringXML中,上述内容如下所示

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

exec:/usr/bin/php?args=yii个人参与者报告/runreport${body[assessment\u id]}${body[scope\u id]}${body[participation\u id]}${body[participation\u email]}&;workingDir={{reporting.folder}}

在本例中,我创建了一个动态请求来运行一些php(特别是一个yii 2命令),该请求通过hashmap/$body中的变量填充,hashmap/$body是在路由的前面由sql查询生成的

太好了。这是一种享受。我已经用解决方案更新了我的问题。
<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>