【问题标题】:StackOverflowException caused on DefaultCamelContext.start(), appears to be caused by camel goint into an infinite loop在 DefaultCamelContext.start() 上引起的 StackOverflowException,似乎是由骆驼进入无限循环引起的
【发布时间】:2012-10-01 17:26:27
【问题描述】:

我已对此进行了搜索,但尚未找到有关此问题的问题。我正在创建一个骆驼路线,它监视 shapefile (.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!");

当前返回的文件路径只是“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})");

context 是一个 DefaultCamelContext,camel 是通过 maven 导入的,在 POM 中有以下条目:

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

"Communicator started" 永远不会输出,程序在此之前崩溃,告诉我在 context.start() 期间发生错误。下面的堆栈跟踪显示了 StackOverflowException。请注意堆栈本身重复了几次,这意味着骆驼本身正在以某种方式进入某种无限递归循环。除了发布的代码之外,没有进一步的骆驼配置。任何人都可以帮忙吗?下面的异常堆栈:

2012 年 10 月 1 日上午 9:33:50 com.saic.ogc.client.BaseClient createMessageFactory 信息:默认为内置消息工厂... 2012 年 10 月 1 日上午 9:33:50 com.saic.ogc.client.BaseClient initTemplate 信息:设置拦截器! 线程“主”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)

【问题讨论】:

    标签: apache-camel stack-overflow


    【解决方案1】:

    乍一看,问题似乎是您的 .bean(this,...) 指的是匿名类 (new RouteBuilder()) 并将尝试运行 configure()(因此是递归/sfo)...尝试使用您的 bean/process() 方法的单独类...

    【讨论】:

    • 菜鸟错误。忘了看我的范围。意思是“this”指的是开始路线的对象。感谢您引起我的注意。创建了对预期对象的单独引用并将其传递给 .bean(),现在可以使用。谢谢。
    【解决方案2】:

    我遇到了类似的问题。我有一个实现处理器的 RouteBuilder(因为我很懒)。事实证明,这导致了无限递归。解决方法是将 process(...) 的实现移到它自己的类中。

    【讨论】:

      猜你喜欢
      • 2016-09-15
      • 2013-03-11
      • 2012-06-03
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 2021-03-31
      • 2017-10-21
      相关资源
      最近更新 更多