TimerConsumer [WARN]处理交换时出错。(TimerConsumer [WARN] Error processing exchange. Exchange[Message: [Body

编程入门 行业动态 更新时间:2024-10-26 16:32:37
TimerConsumer [WARN]处理交换时出错。(TimerConsumer [WARN] Error processing exchange. Exchange[Message: [Body is null]])

我已经使用camel 2.10.0很长一段时间但我需要升级到2.11.1以添加一些功能。 但在我开始之前,我在升级后开始出现此错误。 我试图寻找解决方案,但很难找到解决方案。 这是我的路线:

<route> <from uri="timer://lrbTimer?period=10s" /> <setBody> <constant>Select * from Table </constant> </setBody> <to uri="jdbc:DbConnection" /> <filter> <simple>${in.body} != "[]"</simple> <process ref="markRecord" /> <to uri="seda:process" /> </filter> </route>

我收到的信息是:

TimerConsumer [WARN]处理交换时出错。 交换[消息:[正文为空]]。 引起:[java.lang.IndexOutOfBoundsException - Index:0,Size:0] java.lang.IndexOutOfBoundsException:Index:0,Size:0

I have been using camel 2.10.0 for quite some time but I need to upgrade to 2.11.1 to add some functionality. But before I got started I started getting this error after I upgraded. I tried searching for a solution but am having difficulty finding one. This is my route:

<route> <from uri="timer://lrbTimer?period=10s" /> <setBody> <constant>Select * from Table </constant> </setBody> <to uri="jdbc:DbConnection" /> <filter> <simple>${in.body} != "[]"</simple> <process ref="markRecord" /> <to uri="seda:process" /> </filter> </route>

The message I am receiving is:

TimerConsumer [WARN] Error processing exchange. Exchange[Message: [Body is null]]. Caused by: [java.lang.IndexOutOfBoundsException - Index: 0, Size: 0] java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

最满意答案

我想我已经找到了这个问题。 首先是堆栈跟踪。

2015-01-30 15:13:47 TimerConsumer [WARN] Error processing exchange. Exchange[Message: [Body is null]]. Caused by: [java.lang.IndexOutOfBoundsException - Index: 0, Size: 0] java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.RangeCheck(ArrayList.java:547) at java.util.ArrayList.get(ArrayList.java:322) at org.apache.camel.component.jdbc.JdbcProducer.setResultSet(JdbcProducer.java:226) at org.apache.camel.component.jdbc.JdbcProducer.createAndExecuteSqlStatement(JdbcProducer.java:146) at org.apache.camel.component.jdbc.JdbcProducer.processingSqlBySettingAutoCommit(JdbcProducer.java:82) at org.apache.camel.component.jdbc.JdbcProducer.process(JdbcProducer.java:63) at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:122) at org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:298) at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:117) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.processor.interceptor.BacklogTracerInterceptor.process(BacklogTracerInterceptor.java:84) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:91) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:391) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:273) at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:46) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:335) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.Pipeline.process(Pipeline.java:117) at org.apache.camel.processor.Pipeline.process(Pipeline.java:80) at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:46) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:150) at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:117) at org.apache.camel.processor.RouteInflightRepositoryProcessor.processNext(RouteInflightRepositoryProcessor.java:48) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:86) at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:135) at org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:63) at java.util.TimerThread.mainLoop(Timer.java:512) at java.util.TimerThread.run(Timer.java:462)

所以我挖到了org.apache.camel.component.jdbc.JdbcProducer.setResultSet

从骆驼2.10.0开始,这个类看起来像:

protected void setResultSet(Exchange exchange, ResultSet rs) throws SQLException { List<Map<String, Object>> data = extractResultSetData(rs); exchange.getOut().setHeader(JdbcConstants.JDBC_ROW_COUNT, data.size()); exchange.getOut().setBody(data); }

在camel 2.11.1中它看起来像这样:

protected void setResultSet(Exchange exchange, ResultSet rs) throws SQLException { List<Map<String, Object>> data = extractResultSetData(rs); exchange.getOut().setHeader(JdbcConstants.JDBC_ROW_COUNT, data.size()); exchange.getOut().setHeader(JdbcConstants.JDBC_COLUMN_NAMES, data.get(0).keySet()); exchange.getOut().setBody(data); }

在收到错误的情况下,当存在空结果集时。 因此,当版本(2.11.1)查找column_names时,它会失败。 好消息是我仍然可以使用camel-jdbc(2.10.0),并且仍然使用camel-core(2.11.1)而没有任何依赖性问题。 所以我现在的修复是使用camel-jdbc(2.10.0)

I think I have found the issue. First here is the stack trace.

2015-01-30 15:13:47 TimerConsumer [WARN] Error processing exchange. Exchange[Message: [Body is null]]. Caused by: [java.lang.IndexOutOfBoundsException - Index: 0, Size: 0] java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.RangeCheck(ArrayList.java:547) at java.util.ArrayList.get(ArrayList.java:322) at org.apache.camel.component.jdbc.JdbcProducer.setResultSet(JdbcProducer.java:226) at org.apache.camel.component.jdbc.JdbcProducer.createAndExecuteSqlStatement(JdbcProducer.java:146) at org.apache.camel.component.jdbc.JdbcProducer.processingSqlBySettingAutoCommit(JdbcProducer.java:82) at org.apache.camel.component.jdbc.JdbcProducer.process(JdbcProducer.java:63) at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:122) at org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:298) at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:117) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.processor.interceptor.BacklogTracerInterceptor.process(BacklogTracerInterceptor.java:84) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:91) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:391) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:273) at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:46) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:335) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.Pipeline.process(Pipeline.java:117) at org.apache.camel.processor.Pipeline.process(Pipeline.java:80) at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:46) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:150) at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:117) at org.apache.camel.processor.RouteInflightRepositoryProcessor.processNext(RouteInflightRepositoryProcessor.java:48) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:86) at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:135) at org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:63) at java.util.TimerThread.mainLoop(Timer.java:512) at java.util.TimerThread.run(Timer.java:462)

So I dug into the org.apache.camel.component.jdbc.JdbcProducer.setResultSet

As of camel 2.10.0 this class looked like:

protected void setResultSet(Exchange exchange, ResultSet rs) throws SQLException { List<Map<String, Object>> data = extractResultSetData(rs); exchange.getOut().setHeader(JdbcConstants.JDBC_ROW_COUNT, data.size()); exchange.getOut().setBody(data); }

In camel 2.11.1 it looks like this:

protected void setResultSet(Exchange exchange, ResultSet rs) throws SQLException { List<Map<String, Object>> data = extractResultSetData(rs); exchange.getOut().setHeader(JdbcConstants.JDBC_ROW_COUNT, data.size()); exchange.getOut().setHeader(JdbcConstants.JDBC_COLUMN_NAMES, data.get(0).keySet()); exchange.getOut().setBody(data); }

In the cases that the error is received is when there is an empty result set. So when version(2.11.1) looks for the column_names it fails. The good thing is that I can still use camel-jdbc(2.10.0), and still use camel-core(2.11.1) without any dependency issues. So my fix for now is to use camel-jdbc(2.10.0)

更多推荐

本文发布于:2023-07-25 22:23:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1267041.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Error   processing   TimerConsumer   WARN   exchange

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!