質問

を使用する場合 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

受信者リストは、単純な言語を使用して実行時にパラメーターを構築できるという式を受け入れます。

他のヒント

これには、それがすべきよりもはるかに時間がかかりました。したがって、ここでつまずき、混乱する他の人にとっては。

春のXMLでは、上記のように見えます

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

この例では、ルートの以前にSQLクエリから生成されたハッシュマップ/$ボディの変数を介して入力される、いくつかのPHP(特にYii 2コマンド)を実行する動的要求を作成しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top