gpt4 book ai didi

apache-camel - 带有 args 的 Apache Camel exec

转载 作者:行者123 更新时间:2023-12-04 17:58:17 25 4
gpt4 key购买 nike

使用 exec 时组件是否可以内联指定 args 而不必在 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}")

与使用文件组件时如何使用文件语言(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 模式。

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

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

关于apache-camel - 带有 args 的 Apache Camel exec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4103499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com