使用exec
組件時,可以指定內聯而不是將它們設置爲ExecBinding.EXEC_COMMAND_ARGS
?帶參數的Apache Camel exec
例如,我有這樣的路線:
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}")
類似於你如何使用文件語言(簡單的一個子集),當您使用文件組件。
可能嗎?如果不是,第一個例子可以簡化嗎?
UPDATE [溶液]:
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);
感謝。
謝謝。我會檢查一下。 – Damo 2010-11-05 05:36:53
太好了。這是一種享受。我已經用解決方案更新了我的問題。 – Damo 2010-11-07 21:33:49