4

私はこれを検索しましたが、これに関する質問はまだ見つかりませんでした。シェープファイル(.shp)のフォルダーを監視するラクダルートを作成しています。以下のコードは、ラクダルートを実装するコードです。

final String filePath = settings.getSetting(GMTI_VOCAB.SHAPEFILE_PATH);
logger.debug("filePath={}", filePath);
final File file = new File(filePath);
if (file.mkdir())
{
  logger.warn("Shapefile path did not exist. Creating directory.");
}

logger.debug("Creating file route.");
context.addRoutes(new RouteBuilder()
{

    @Override
    public void configure() throws Exception
    {
        String path = String.format("file://%s?noop=true&include=.*shp$", file.getAbsolutePath());
        logger.debug("Route is: {}", path);
        from(path).bean(this, "process(${file:path})");
    }
 });
 logger.debug("Starting context");
 context.start();
 logger.info("Communicator started!");

現在、返されるfilePathは「shapefile」であり、file.getAbsolutePath()は「C:\ Users \ medderssc \ gmti_intestor\shapefiles」を返します。結果として返されるパスは

from("file://C:\Users\medderssc\gmti_intestor\shapefiles?noop=true&include=.*shp$").bean(this, "process(${file:path})");

コンテキストはDefaultCamelContextであり、ラクダはPOMに次のエントリを使用してMaven経由でインポートされています。

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-core</artifactId>
        <version>2.10.0</version>
    </dependency>

「Communicatorstarted」が出力されることはなく、その前にプログラムがクラッシュし、context.start()中にエラーが発生していることを通知します。以下のスタックトレースは、StackOverflowExceptionを示しています。スタック自体が数回繰り返されることに注意してください。これは、ラクダ自体が何らかの形で無限に再帰的なループに入っていることを意味します。投稿されたコードにあるものを超えて、それ以上のラクダの構成はありません。誰か助けてもらえますか?以下の例外スタック:

2012年10月1日9:33:50AMcom.saic.ogc.client.BaseClient createMessageFactory情報:デフォルトで組み込みのメッセージファクトリになります...2012年10月1日9:33:50AMcom.saic.ogc.client。 BaseClient initTemplate INFO:インターセプターを設定しています!スレッド「メイン」の例外java.lang.StackOverflowError

at org.apache.camel.model.RouteDefinition.toString(RouteDefinition.java:119)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at java.util.AbstractCollection.toString(Unknown Source)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at org.apache.camel.model.RoutesDefinition.toString(RoutesDefinition.java:60)
at org.apache.camel.builder.RouteBuilder.toString(RouteBuilder.java:58)
at org.apache.camel.model.BeanDefinition.description(BeanDefinition.java:81)
at org.apache.camel.model.BeanDefinition.toString(BeanDefinition.java:70)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at java.util.AbstractCollection.toString(Unknown Source)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at org.apache.camel.model.RouteDefinition.toString(RouteDefinition.java:119)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at java.util.AbstractCollection.toString(Unknown Source)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at org.apache.camel.model.RoutesDefinition.toString(RoutesDefinition.java:60)
at org.apache.camel.builder.RouteBuilder.toString(RouteBuilder.java:58)
at org.apache.camel.model.BeanDefinition.description(BeanDefinition.java:81)
at org.apache.camel.model.BeanDefinition.toString(BeanDefinition.java:70)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at java.util.AbstractCollection.toString(Unknown Source)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at org.apache.camel.model.RouteDefinition.toString(RouteDefinition.java:119)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at java.util.AbstractCollection.toString(Unknown Source)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at org.apache.camel.model.RoutesDefinition.toString(RoutesDefinition.java:60)
at org.apache.camel.builder.RouteBuilder.toString(RouteBuilder.java:58)
at org.apache.camel.model.BeanDefinition.description(BeanDefinition.java:81)
at org.apache.camel.model.BeanDefinition.toString(BeanDefinition.java:70)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at java.util.AbstractCollection.toString(Unknown Source)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at org.apache.camel.model.RouteDefinition.toString(RouteDefinition.java:119)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at java.util.AbstractCollection.toString(Unknown Source)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at org.apache.camel.model.RoutesDefinition.toString(RoutesDefinition.java:60)
at org.apache.camel.builder.RouteBuilder.toString(RouteBuilder.java:58)
at org.apache.camel.model.BeanDefinition.description(BeanDefinition.java:81)
at org.apache.camel.model.BeanDefinition.toString(BeanDefinition.java:70)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at java.util.AbstractCollection.toString(Unknown Source)
at java.lang.String.valueOf(Unknown Source)
4

2 に答える 2

6

一見すると、問題.bean(this,...)は匿名クラス(new RouteBuilder())を参照していて、configure()(したがってrecursion / sfo)を実行しようとしているように見えます... bean / process()メソッドに別のクラスを使用してみてください。 。

于 2012-10-02T06:03:47.827 に答える
0

私も同様の問題を抱えていました。私はプロセッサを実装したRouteBuilderを持っていました(私は怠惰だったので)。これが無限の再帰を引き起こしたことが判明しました。修正は、process(...)の実装を独自のクラスに移動することでした。

于 2012-10-04T16:32:13.887 に答える