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]}&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]}&workingDir={{reporting.folder}}</simple>
</recipientList>