Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApacheCamelRouteBuilder在春季发布了';t启动配置()_Java_Spring_Apache Camel - Fatal编程技术网

Java ApacheCamelRouteBuilder在春季发布了';t启动配置()

Java ApacheCamelRouteBuilder在春季发布了';t启动配置(),java,spring,apache-camel,Java,Spring,Apache Camel,我正在使用ApacheCamel在动态端点之间创建路由。我使用的是一个可以正常工作的Main,但现在我需要在apachetomcat服务器上部署该应用程序。问题是我的骆驼上下文没有找到我的路线生成器。这是我的应用程序上下文: <bean id="myRoute" class="com.ittb.boa.jis.extractor.MyRouteBuilder"> <constructor-arg name="src" ref="logsFileConnector" /&

我正在使用ApacheCamel在动态端点之间创建路由。我使用的是一个可以正常工作的Main,但现在我需要在apachetomcat服务器上部署该应用程序。问题是我的骆驼上下文没有找到我的路线生成器。这是我的应用程序上下文:

<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>
我尝试使用MyRouteBuilder中configure()上的端点对其进行调试,错误出现在断点之前

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

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);
    }
}
公共类MyRouteBuilder扩展了RouteBuilder{
专用连接点src;
专用连接点dest;
int i=0;
私有字符串CRON_EXPRESSION_QUARTZ=CRONGenerator.generateCRONExpression(“0/1”、“9-17”、“?”、“*”、“MON-FRI”);
私有MyProcessor处理器=新的MyProcessor();
RestConsumerFactory consumerFactory=新建RestConsumerFactory(){
公共使用者createConsumer(CamleContext CamleContext、处理器处理器、字符串谓词、字符串基路径、字符串模板、字符串消费、字符串生成、映射参数)引发异常{
返回null;
}
};
公共MyRouteBuilder(ConnectorEndPoint src、ConnectorEndPoint dest){
this.src=src;
this.dest=dest;
}
public void configure(){
if(连接器SQL的src实例){
from(“quartz2://foo?cron=“+cron\u EXPRESSION\u QUARTZ”)
.to(src.getRouteFrom())
.bean(处理器,“conversionNumericAndDate”)
.bean(处理器,“标准化”)
.to(dest.getRouteTo());
}else if(连接器MongoDB的src实例){
from(“quartz2://foo?cron=“+cron\u EXPRESSION\u QUARTZ”)
.to(src.getRouteFrom())
.bean(处理器,“convertDBObjectToString”)
//.bean(处理器,“conversionNumericAndDate”)
.to(dest.getRouteTo());
}else if(连接器测试的src实例){
from(“quartz2://foo?cron=“+cron\u EXPRESSION\u QUARTZ).到(src.getRouteFrom())
//.bean(处理器,“conversionNumericAndDate”)
//.bean(处理器,“标准化”)
.to(dest.getRouteTo());
}else if(ConnectorXMLFile的src instanceof){
XmlJsonDataFormat xmlJsonFormat=新的XmlJsonDataFormat();
setEncoding(“UTF-8”);
setForceTopLevelObject(true);
setTrimSpaces(true);
setskipnamespace(true);
setRemoveNamespacePrefixes(true);
from(“文件:xml?scheduler=quartz2&scheduler.cron=“+cron\u EXPRESSION\u QUARTZ”)
.marshal(xmlJsonFormat)
.to(dest.getRouteTo());
}else if(连接器日志文件的src实例){
arraylistaggregationstrategyaggregationstrategy=新的ArrayListAggregationStrategy();
from(src.getRouteFrom())
.bean(处理器,“lineFilter(${body},+src.getFieldToFilter()+”,“+src.getFirstValue()+”,“+src.getSecondValue()+”)
.split(body().tokenize(“\n”))
.filter().method(MyFilter.class,“isValidError”)
.bean(处理器,“processLogsApplicationSource”)
.filter().method(MyFilter.class,“dateFilter(${body},+src.getFieldToFilter()+”,“+src.getFirstValue()+”,“+src.getSecondValue()+”)
.aggregate(body(),aggregationStrategy).completionInterval(1000)
.to(dest.getRouteTo());
}否则{
System.err.println(“Erreur:Type de endpoint en entrée inconu”);
系统出口(1);
}
}
因此,就像camel上下文没有启动configure()方法一样,RouteBuilder不会被上下文创建,也不会被上下文找到..My web.xml是:

<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>

上下文配置位置
类路径:applicationContext.xml
org.apache.camel.component.servletlistener.SimpleCamelServletContextListener
org.springframework.web.context.ContextLoaderListener
感谢您的帮助!

几点建议:

  • 检查容器中是否实际创建了
    RouteBuilder
    bean
  • 您的
    MyRouteBuilder
    是否从camel扩展
    RouteBuilder

  • 为了进一步澄清,请提供
    MyRouteBuilder
    和full stacktrace的完整代码。

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

    我用完整的MyRouteBuilder编辑了我的帖子,它似乎是创建的。它通过构造函数来初始化src和destd、 是的,它扩展了RouteBuilder..对于Stacktrace,这是另一个错误,但它是第一个错误的重复1.我仍然会要求完整的Stacktrace:)2.尝试向方法添加
    @Override
    注释。Edited;)我尝试了@Override,但仍然有错误..我刚刚在tomcat日志中看到这一点:
    juil.0120153:05:0下午3:00 org.apache.catalina.core.ApplicationContext日志信息:在类路径juil.012015年3:05:04上未检测到Spring WebApplicationInitializer类型org.apache.catalina.core.ApplicationContext日志信息:初始化Spring根WebApplicationContext
    简单注册表用于java main,使用Spring时不能使用它,但让spring以通常的方式启动,或者使用camel-spring的main。然后注册表就是一个spring应用程序上下文注册表。请参阅各种camel-spring示例等。
    <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>