3

次のルート DSL があります。

from("file:" + autoLoadBaseDir + "?move=.classified")
                .loop(fileTypes.length)
                    .choice()
                        .when(header("CamelFileName").contains(fileTypes[Integer.valueOf("${CamelLoopIndex}")]))
                            .to("file:" + classesBaseDir + "/" + fileTypes[Integer.valueOf("${CamelLoopIndex}")]);

示されているように、私は にアクセスし、CamelLoopIndexそれを配列のインデックスとして使用したいと考えています。式は評価されないため、ルートは作成されません。私は何を間違っていますか?前もって感謝します。

これに関するドキュメントはかなり不足しており、何時間も検索しても解決策を見つけることができませんでした。

更新: 同じ質問を Camel Users Mailing List に投稿しました。

4

4 に答える 4

6

${property.CamelLoopIndex} を使用する必要があります

于 2013-04-11T15:49:04.870 に答える
3

私はパーティーに遅れましたが、おそらく誰かがこの答えから助けを得るでしょう. 上記の例では、これは Java DSL のループ インデックスにアクセスするために機能します。

property(Exchange.LOOP_INDEX)

上記のokelloからの最初の投稿の例では、これでうまくいくと思います

Integer.valueOf(property(Exchange.LOOP_INDEX).toString())
于 2015-02-17T07:04:46.950 に答える
0

いくつかのオプションを試してみたところ、次のことがうまくいきました。

from("file:" + autoLoadBaseDir + "?preMove=inprogress&move=.classified")
                .routeId("Test-Route")
                .loop(fileTypes.length)
                .processRef("keFileTypeNameService")
                    .choice()
                        .when(header("CamelFileName").contains(header("MyFileType")))
                            .to("file:" + classesBaseDir + "/?autoCreate=true&fileName=${header[MyFileType]}/${header[CamelFileName]}");

は、取引所からプロパティをkeFileTypeNameService取得します。CamelLoopIndex次に、これを使用して、そのインデックスのファイル タイプを取得します。次に、このファイルの種類の名前をヘッダーに設定するだけです。Bean を以下keFileTypeNameServiceに示します。

@Service( value = "keFileTypeNameService" )
public class FileTypeNameService implements Processor {

    private @Value("${ke.file.types}") String[] fileTypes;

    public void process(Exchange exchange) throws Exception {
        Integer count = exchange.getProperty("CamelLoopIndex", Integer.class);
        String fileType = fileTypes[count];
        exchange.getIn().setHeader("MyFileType", fileType);
    }




}

これが他の誰かを助けることを願っています。

于 2013-04-12T06:38:42.670 に答える