首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring中的Apache Camel RouteBuilder没有启动configure()

Spring中的Apache Camel RouteBuilder没有启动configure()
EN

Stack Overflow用户
提问于 2015-07-01 20:18:46
回答 2查看 4K关注 0票数 2

我正在使用Apache Camel在动态端点之间创建路由。我使用的是Main,但现在我需要将应用程序部署到Apache Tomcat服务器上。问题是我的驼峰上下文没有找到我的路径构建器。这是我的applicationContext:

代码语言:javascript
复制
<bean id="myRoute" class="com.ittb.boa.jis.extractor.MyRouteBuilder">
    <constructor-arg name="src" ref="logsFileConnector" />
    <constructor-arg name="dest" ref="elasticSearchConnector" />
</bean>

<camelContext id="myCamel" xmlns="http://camel.apache.org/schema/spring">
    <routeBuilder ref="myRoute" />
</camelContext>

我得到了以下错误:

代码语言:javascript
复制
    [         localhost-startStop-1] ContextLoader                  ERROR Context initialization failed
org.apache.camel.RuntimeCamelException: org.apache.camel.CamelException: Cannot find any routes with this RouteBuilder reference: RouteBuilderRef[myRoute]
    at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1619)[camel-core-2.15.2.jar:2.15.2]
    at org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:328)[camel-spring-2.15.2.jar:2.15.2]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:151)[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:128)[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:331)[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:773)[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483)[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE]
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)[spring-web-4.1.6.RELEASE.jar:4.1.6.RELEASE]
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)[spring-web-4.1.6.RELEASE.jar:4.1.6.RELEASE]
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)[spring-web-4.1.6.RELEASE.jar:4.1.6.RELEASE]
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4728)[catalina.jar:8.0.21]
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5166)[catalina.jar:8.0.21]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)[catalina.jar:8.0.21]
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)[catalina.jar:8.0.21]
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399)[catalina.jar:8.0.21]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_45]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[:1.8.0_45]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[:1.8.0_45]
    at java.lang.Thread.run(Thread.java:745)[:1.8.0_45]
juil. 01, 2015 2:55:15 PM org.apache.catalina.core.StandardContext listenerStart
GRAVE: Exception lors de l'envoi de l'évènement contexte initialisé (context initialized) à l'instance de classe d'écoute (listener) org.springframework.web.context.ContextLoaderListener
org.apache.camel.RuntimeCamelException: org.apache.camel.CamelException: Cannot find any routes with this RouteBuilder reference: RouteBuilderRef[myRoute]
    at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1619)
    at org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:328)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:151)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:128)
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:331)
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:773)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4728)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5166)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.camel.CamelException: Cannot find any routes with this RouteBuilder reference: RouteBuilderRef[myRoute]
    at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.installRoutes(AbstractCamelContextFactoryBean.java:832)
    at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.setupRoutes(AbstractCamelContextFactoryBean.java:352)
    at org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:326)
    ... 17 more

我尝试在MyRouteBuilder中的EndPoint ()上使用configure来调试它,错误出现在断点之前。

下面是configure()方法,它相当繁重:

代码语言:javascript
复制
public class MyRouteBuilder extends RouteBuilder {
private ConnectorEndPoint src;
private ConnectorEndPoint dest;

int i = 0;
private String CRON_EXPRESSION_QUARTZ = CRONGenerator.generateCRONExpression("0/1", "9-17", "?", "*", "MON-FRI");

private MyProcessor processor = new MyProcessor();
RestConsumerFactory consumerFactory = new RestConsumerFactory() {
    public Consumer createConsumer(CamelContext camelContext, Processor processor, String verb, String basePath, String uriTemplate, String consumes, String produces, Map<String, Object> parameters) throws Exception {
        return null;
    }
};

public MyRouteBuilder(ConnectorEndPoint src, ConnectorEndPoint dest) {
    this.src = src;
    this.dest = dest;
}

public void configure() {
    if (src instanceof ConnectorSQL){
        from("quartz2://foo?cron="+ CRON_EXPRESSION_QUARTZ)
        .to(src.getRouteFrom())
        .bean(processor, "conversionNumericAndDate")
        .bean(processor, "standardisation")
        .to(dest.getRouteTo());
    } else if (src instanceof ConnectorMongoDB){
        from("quartz2://foo?cron="+ CRON_EXPRESSION_QUARTZ)
        .to(src.getRouteFrom())
        .bean(processor, "convertDBObjectToString")
        //.bean(processor, "conversionNumericAndDate")
        .to(dest.getRouteTo());
    } else if (src instanceof ConnectorREST){
        from("quartz2://foo?cron="+ CRON_EXPRESSION_QUARTZ).to(src.getRouteFrom())
        //.bean(processor, "conversionNumericAndDate")
        //.bean(processor, "standardisation")
        .to(dest.getRouteTo());
    } else if (src instanceof ConnectorXMLFile){
        XmlJsonDataFormat xmlJsonFormat = new XmlJsonDataFormat();
        xmlJsonFormat.setEncoding("UTF-8");
        xmlJsonFormat.setForceTopLevelObject(true);
        xmlJsonFormat.setTrimSpaces(true);
        xmlJsonFormat.setSkipNamespaces(true);
        xmlJsonFormat.setRemoveNamespacePrefixes(true);         
        from("file:xml?scheduler=quartz2&scheduler.cron="+ CRON_EXPRESSION_QUARTZ)
        .marshal(xmlJsonFormat)
        .to(dest.getRouteTo());
    } else if (src instanceof ConnectorLogsFile){
        ArrayListAggregationStrategy aggregationStrategy = new ArrayListAggregationStrategy();
        from(src.getRouteFrom())
        .bean(processor, "lineFilter(${body}, " + src.getFieldToFilter() +", " + src.getFirstValue() +", " + src.getSecondValue() + ")")
        .split(body().tokenize("\n"))
        .filter().method(MyFilter.class, "isValidError")
        .bean(processor, "processLogsApplicationSource")
        .filter().method(MyFilter.class, "dateFilter(${body}, " + src.getFieldToFilter() +", " + src.getFirstValue() +", " + src.getSecondValue() + ")")
        .aggregate(body(), aggregationStrategy).completionInterval(1000)
        .to(dest.getRouteTo());
    } else {
        System.err.println("Erreur : Type de endpoint en entrée inconnu");
        System.exit(1);
    }
}

因此,这就像是camel上下文没有启动RouteBuilder ()方法,所以不会创建context,也不会被上下文找到。我的web.xml是:

代码语言:javascript
复制
<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.apache.camel.component.servletlistener.SimpleCamelServletContextListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

感谢您的帮助!

EN

回答 2

Stack Overflow用户

发布于 2015-07-01 20:39:29

以下是几点建议:

检查是否确实在container.

  • Does
  1. RouteBuilder MyRouteBuilder RouteBuilder

中创建了camel bean

只是为了更多的澄清,请提供MyRouteBuilder和完整堆栈跟踪的完整代码。

票数 1
EN

Stack Overflow用户

发布于 2015-07-02 16:03:37

问题来自于RouteBuilder之前的SimpleRegistry bean错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31161111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档