[Camel]Using spring.xml to Walk through an Example

本文介绍了一个使用Apache Camel的示例,展示了如何通过spring.xml配置文件定义路由,从JMS队列接收消息并写入文件系统的过程。此外还提供了Java代码用于启动Camel上下文并发送测试消息。

Walk through an Example:

http://cwiki.apache.org/confluence/display/CAMEL/Walk+through+an+Example

springExampleUsingNamespaces.xml

使用spring.xml配置路由:

 

<?xml version="1.0" encoding="UTF-8"?>


<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd
">


<!-- START SNIPPET: example -->
<camelContext id="camel" xmlns="http://activemq.apache.org/camel/schema/spring">
<route>
<from uri="test-jms:queue:test.queue"/>
<process ref="logger"/>
<to uri="file:target/data"/>
<process ref="logger"/>
</route>
</camelContext>

<bean id="logger" class="org.apache.camel.processor.Logger"/>

<bean id="test-jms" class="org.apache.camel.component.jms.JmsComponent">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
</bean>
</property>
</bean>

<!-- END SNIPPET: example -->

</beans>

 

Main.java


1.创建一个CamelContext;
2. 在CamelContext中发送对象(本例为文字),发送到的Component为test-jms:queue:test.queue.

public class Main {

public static void main(String args[]) throws Exception {

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"org/apache/camel/example/spring/springExampleUsingNamespaces.xml");

SpringCamelContext camelContext = (SpringCamelContext) applicationContext
.getBean("camel");

CamelTemplate template = new CamelTemplate(camelContext);
camelContext.start();

template.sendBody("test-jms:queue:test.queue", "Test Message" );

Thread.sleep(1000);
camelContext.stop();
}
}
 
分析下面错误原因:500 Internal Server Error: [org.apache.camel.RuntimeExchangeException: Cannot find key [pmar002] in message body or headers to use when setting named parameter in query [select pmar002,pmar014,pmar012,pmar019 from pmar_t where pmar002 = :?pmar002 and pmarsite =:?pmarsite and rownum = 1 order by pmar019 desc] on the exchange: Exchange[83755b1fd6c241998ee04f7642a91e7a] at org.apache.camel.component.sql.DefaultSqlPrepareStatementStrategy$PopulateIterator.next(DefaultSqlPrepareStatementStrategy.java:387) at org.apache.camel.component.sql.DefaultSqlPrepareStatementStrategy.populateStatement(DefaultSqlPrepareStatementStrategy.java:191) at org.apache.camel.component.sql.SqlProducer.populateStatement(SqlProducer.java:301) at org.apache.camel.component.sql.SqlProducer.access$000(SqlProducer.java:21) at org.apache.camel.component.sql.SqlProducer$1.doInPreparedStatement(SqlProducer.java:144) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:650) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:687) at org.apache.camel.component.sql.SqlProducer.processInternal(SqlProducer.java:138) at org.apache.camel.component.sql.SqlProducer.process(SqlProducer.java:121) at org.apache.camel.support.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.processNext(AsyncProcessorConverterHelper.java:101) at org.apache.camel.support.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:96) at org.apache.camel.impl.engine.SharedCamelInternalProcessor.process(SharedCamelInternalProcessor.java:191) at org.apache.camel.impl.engine.SharedCamelInternalProcessor$1.process(SharedCamelInternalProcessor.java:111) at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:83) at org.apache.camel.impl.engine.SharedCamelInternalProcessor.process(SharedCamelInternalProcessor.java:108) at org.apache.camel.support.cache.DefaultProducerCache.send(DefaultProducerCache.java:199) at org.apache.camel.impl.engine.DefaultProducerTemplate.send(DefaultProducerTemplate.java:176) at org.apache.camel.impl.engine.DefaultProducerTemplate.send(DefaultProducerTemplate.java:148) at org.apache.camel.impl.engine.DefaultProducerTemplate.send(DefaultProducerTemplate.java:131) at com.definesys.deipaas.camel.component.sql.dynamic.database.builder.ExecuteRouteBuilder.lambda$configure$0(ExecuteRouteBuilder.java:56) at org.apache.camel.support.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:85) at com.definesys.deipaas.apiflow.runtime.framework.camel.core.LoopInterceptStrategy$LoopInterceptor.process(LoopInterceptStrategy.java:46) at org.apache.camel.support.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:104) at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:481) at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeFromQueue(DefaultReactiveExecutor.java:224) at org.apache.camel.impl.engine.DefaultReactiveExecutor.executeFromQueue(DefaultReactiveExecutor.java:82) at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.await(DefaultAsyncProcessorAwaitManager.java:96) at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:85) at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:205) at org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:370) at org.apache.camel.processor.Pipeline$PipelineTask.run(Pipeline.java:109) at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeFromQueue(DefaultReactiveExecutor.java:224) at org.apache.camel.impl.engine.DefaultReactiveExecutor.executeFromQueue(DefaultReactiveExecutor.java:82) at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.await(DefaultAsyncProcessorAwaitManager.java:96) at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:85) at org.apache.camel.spring.spi.TransactionErrorHandler.processByErrorHandler(TransactionErrorHandler.java:244) at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:119) at com.definesys.deipaas.apiflow.runtime.framework.camel.core.LoopInterceptStrategy$LoopInterceptor.process(LoopInterceptStrategy.java:46) at org.apache.camel.support.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:104) at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:481) at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeFromQueue(DefaultReactiveExecutor.java:224) at org.apache.camel.impl.engine.DefaultReactiveExecutor.executeFromQueue(DefaultReactiveExecutor.java:82) at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.await(DefaultAsyncProcessorAwaitManager.java:96) at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:85) at org.apache.camel.spring.spi.TransactionErrorHandler.processByErrorHandler(TransactionErrorHandler.java:244) at org.apache.camel.spring.spi.TransactionErrorHandler$1.doInTransactionWithoutResult(TransactionErrorHandler.java:207) at org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:36) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) at org.apache.camel.spring.spi.TransactionErrorHandler.doInTransactionTemplate(TransactionErrorHandler.java:200) at org.apache.camel.spring.spi.TransactionErrorHandler.processInTransaction(TransactionErrorHandler.java:155) at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:123) at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:132) at org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:398) at org.apache.camel.processor.Pipeline$PipelineTask.run(Pipeline.java:109) at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeFromQueue(DefaultReactiveExecutor.java:224) at org.apache.camel.impl.engine.DefaultReactiveExecutor.executeFromQueue(DefaultReactiveExecutor.java:82) at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.await(DefaultAsyncProcessorAwaitManager.java:96) at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:85) at org.apache.camel.impl.engine.SharedCamelInternalProcessor.process(SharedCamelInternalProcessor.java:108) at org.apache.camel.support.cache.DefaultProducerCache.send(DefaultProducerCache.java:199) at org.apache.camel.impl.engine.DefaultProducerTemplate.send(DefaultProducerTemplate.java:176) at org.apache.camel.impl.engine.DefaultProducerTemplate.send(DefaultProducerTemplate.java:148) at org.apache.camel.impl.engine.DefaultProducerTemplate.send(DefaultProducerTemplate.java:131) at com.definesys.deipaas.camel.component.sql.dynamic.database.AbstractDatabase.invokeDirectRoute(AbstractDatabase.java:116) at com.definesys.deipaas.camel.component.sql.dynamic.database.AbstractDatabase.invokeDynamicRoute(AbstractDatabase.java:85) at com.definesys.deipaas.camel.component.sql.dynamic.SqlDynamicProducer.process(SqlDynamicProducer.java:17) at org.apache.camel.support.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:66) at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:172) at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:83) at org.apache.camel.support.AsyncProcessorSupport.process(AsyncProcessorSupport.java:41) at com.definesys.deipaas.apiflow.runtime.framework.camel.core.LoopInterceptStrategy$LoopInterceptor.process(LoopInterceptStrategy.java:46) at org.apache.camel.support.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:104) at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:481) at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeFromQueue(DefaultReactiveExecutor.java:224) at org.apache.camel.impl.engine.DefaultReactiveExecutor.executeFromQueue(DefaultReactiveExecutor.java:82) at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.await(DefaultAsyncProcessorAwaitManager.java:96) at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:85) at org.apache.camel.support.AsyncProcessorSupport.process(AsyncProcessorSupport.java:41) at com.definesys.deipaas.apiflow.runtime.framework.camel.core.LoopInterceptStrategy$LoopInterceptor.process(LoopInterceptStrategy.java:46) at org.apache.camel.support.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:104) at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:481) at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:193) at org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:64) at org.apache.camel.processor.Pipeline.process(Pipeline.java:189) at org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:398) at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:83) at org.apache.camel.support.AsyncProcessorSupport.process(AsyncProcessorSupport.java:41) at org.apache.camel.component.undertow.UndertowConsumer.handleRequest(UndertowConsumer.java:270) at io.undertow.server.Connectors.executeRootHandler(Connectors.java:393) at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:852) at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1449) at org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282) at java.lang.Thread.run(Thread.java:748) ]
08-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值