Hello,
This application connects to JMS and routes the message to a websocket
endpoint. Every 15th message or so, the following exception is raised:
Exception:
[Camel (TwitterApp1) thread #1 -
JmsConsumer[Event::WebM::Communication::Twitter::1.1::TweetReceived]]
EndpointMessageListener WARN Execution of JMS message
listener failed. Caused by: [org.apache.camel.RuntimeCamelException -
java.lang.ArrayIndexOutOfBoundsException]
org.apache.camel.RuntimeCamelException:
java.lang.ArrayIndexOutOfBoundsException
at
org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1344)
at
org.apache.camel.component.jms.EndpointMessageListener$EndpointMessageListenerAsyncCallback.done(EndpointMessageListener.java:186)
at
org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:107)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:562)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:500)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:468)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:325)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:263)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1096)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1088)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:985)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ArrayIndexOutOfBoundsException
Route:
<beans profile="TwitterApp">
<camelContext id="TwitterApp1"
xmlns="http://camel.apache.org/schema/spring" autoStartup="true">
<propertyPlaceholder id="twitterProperties"
location="twitterApp.properties" />
<endpoint id="webappWebsocketNERVEndpointOut"
uri="websocket://{{wsHost}}:{{wsPort}}/nerv-tweet-fromJMS?staticResources=classpath:.&sendToAll=true"
/>
<endpoint id="twitterProducer"
uri="twitter://timeline/user?consumerKey={{consumerKey}}&consumerSecret={{consumerSecret}}&accessToken={{accessToken}}&accessTokenSecret={{accessTokenSecret}}"
/>
<onException>
<exception>org.apache.camel.RuntimeCamelException</exception>
<exception>java.lang.ArrayIndexOutOfBoundsException</exception>
<handled>
<constant>true</constant>
</handled>
<to id="streamOut" uri="stream:out" />
<transform>
<simple>In exception loop!</simple>
</transform>
<to id="streamOutSimple" uri="stream:out" />
</onException>
<route id="TweetReceivedFromJMS">
<from id="NERVJMS1"
uri="nervJMS1:topic:Event::WebM::Communication::Twitter::1.1::TweetReceived"
/>
<transform>
<simple>JMS Channel processing tweet event from
@${header.Status$User$ScreenName} at ${header.$Event$Start}</simple>
</transform>
<to uri="webappWebsocketNERVEndpointOut" />
</route>
</camelContext>
NERVJMS1 bean:
<?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.xsd
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd">
<beans profile="suite-wide">
<bean id="nervJMS1"
class="org.apache.camel.component.jms.JmsComponent">
<property name="connectionFactory" ref="cachedConnectionFactory"
/>
<property name="destinationResolver"
ref="defaultDestinationResolver" />
</bean>
<bean id="cachedConnectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory"
ref="jndiObjectFactoryBean" />
<property name="sessionCacheSize" value="2000" />
<property name="cacheProducers" value="false" />
</bean>
<bean id="jndiObjectFactoryBean"
class="org.springframework.jndi.JndiObjectFactoryBean"
depends-on="defaultDestinationResolver">
<property name="jndiTemplate" ref="jndiTemplateNirvana" />
<property name="jndiName" ref="eventFactory" />
</bean>
<bean id="defaultDestinationResolver"
class="com.softwareag.eda.jndi.NervResolver"
depends-on="jndiTemplateNirvana" init-method="init">
<property name="jndiTemplate" ref="jndiTemplateNirvana" />
<property name="classLoader">
<null />
</property>
</bean>
<bean id="jndiTemplateNirvana"
class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<map>
<entry key="java.naming.factory.initial"
value="com.pcbsys.nirvana.nSpace.NirvanaContextFactory" />
<entry key="java.naming.provider.url"
value="nsp://localhost:9000" />
<entry key="connectionFactory" value-ref="eventFactory"
/>
</map>
</property>
</bean>
<bean id="eventFactory" class="java.lang.String">
<constructor-arg value="EventFactory" />
</bean>
</beans>
</beans>
Two questions:
1. How to prevent the exception from happening?
2. Why does the exception handler not capture the exception?
--
View this message in context:
http://camel.465427.n5.nabble.com/java-lang-ArrayIndexOutOfBoundsException-when-receiving-from-JMS-tp5744262.html
Sent from the Camel - Users mailing list archive at Nabble.com.