フォルダーから XML ファイルを使用するバッチ ルートがあります。グループ化されたドキュメントをフィルタリング、変換し、最終的にディスクに保存します。これはバッチ ルートであるため、sourcefolder を 1 回ポーリングした後にシャットダウンする必要があります。これは、以下のコードで RouteTerminator を使用するためのものです。(で呼び出して続行stopRoute()しremoveRoute()ます。)camelContextrouteID
from("file:" + sourcePath)
    .filter().xquery("//DateTime > xs:dateTime('2013-05-07T23:59:59')")
    .filter().xquery("//DateTime < xs:dateTime('2013-05-09T00:00:00')")
    .aggregate(constant(true))
        .completionFromBatchConsumer()
        .groupExchanges()
    .to("xquery:" + xqueryPath)
    .to("file:" + targetPath)
    .process(new Processor() {
                    @Override
                    public void process(Exchange exchange) throws Exception {
                        new RouteTerminator(routeID, exchange.getContext()).start();
                    }
                })
    .end();
これにより、単一のファイル収集後にルートが正しく閉じられ、その中でプロセスを繰り返した後onException、例外がスローされたときにルートも正常に閉じられます。残念ながら、ルートがすべての Exchange を除外すると、プロセッサに到達することはありません。代わりに、フィルタ中に交換がドロップされ、ルートは開いたままになります。
フィルターをaggregate呼び出し内に移動すると、ルートが最後まで続く可能性があるためと考えましたが、このメソッドは XQuery フィルターを受け入れません。XPath は dateTime 比較をサポートしていないため、オプションではありません。
この場合、ルート全体を強制的に停止するにはどうすればよいですか?