Java ApacheCamelRouteBuilder在春季发布了';t启动配置()
我正在使用ApacheCamel在动态端点之间创建路由。我使用的是一个可以正常工作的Main,但现在我需要在apachetomcat服务器上部署该应用程序。问题是我的骆驼上下文没有找到我的路线生成器。这是我的应用程序上下文: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" /&
<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
beanMyRouteBuilder
是否从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>