コンポーネントを使用する場合、 ?exec
で引数を設定するのではなく、インラインで引数を指定することができます。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}")
ただし、Simple Expression Languageを使用して、次のように単純化できると思いました。
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);
ありがとう。