Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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
Spring TimerConsumer[WARN]处理exchange时出错。Exchange[邮件:[正文为空]]_Spring_Apache Camel - Fatal编程技术网

Spring TimerConsumer[WARN]处理exchange时出错。Exchange[邮件:[正文为空]]

Spring TimerConsumer[WARN]处理exchange时出错。Exchange[邮件:[正文为空]],spring,apache-camel,Spring,Apache Camel,我使用camel 2.10.0已经有一段时间了,但我需要升级到2.11.1以添加一些功能。但在我开始之前,我在升级后开始出现这个错误。我试图寻找一个解决办法,但很难找到。这是我的路线: <route> <from uri="timer://lrbTimer?period=10s" /> <setBody> <constant>Select * from Table </constant> &l

我使用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]处理exchange时出错。Exchange[邮件:[正文为空]]。原因:[java.lang.IndexOutOfBoundsException-索引:0,大小:0]java.lang.IndexOutOfBoundsException:索引:0,大小: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

从camel 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);
}

在收到错误的情况下,当存在空结果集时。因此,当version2.11.1查找列名称时,它会失败。好的是,我仍然可以使用camel-jdbc2.10.0,并且仍然可以使用camel-core2.11.1,而不存在任何依赖性问题。因此,我现在的修复方法是使用camel-jdbc2.10.0

您有一些代码导致camel现在记录的IndexOutOfBoundsException。因此,从stacktrace中找到问题并尝试修复它Hanks@ClausIbsen,我想我找到了下面的答案中描述的问题。请注意,这个问题在camel 2.11.2中已经修复