You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Gert Villemos <gv...@yahoo.de> on 2011/04/07 20:49:58 UTC
'Class not found' when Creating Camel route through Activemq
console
I post this here and not in the activemq forum, as its a Camel route that
courses the problem.
In our setup I have Camel routes configured to inject to / read from a
activemq topic called 'Parameters'. Each message in the body contains a POJO
of type 'org.hbird.exchange.type.Parameter'. I have no problems with this
from my Camel routes.
But when I use the Activemq console to create a new test route as shown
below, it fails;
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
This is an example route.
The topic is not created. Looking at the activemq log, I see the error
messages below repeated fro each message;
2011-04-07 20:44:35,603 | WARN | Execution of JMS message listener failed,
and no ErrorHandler has been set. |
org.springframework.jms.listener.DefaultMessageListenerContainer |
DefaultMessageListenerContainer-1
org.apache.camel.RuntimeCamelException: Failed to extract body due to:
javax.jms.JMSException: Failed to build body from content. Serializable
class not available to broker. Reason: java.lang.ClassNotFoundException:
org.hbird.business.simpleparametersimulator.ConstantParameter. Message:
ActiveMQObjectMessage {commandId = 8299, responseRequired = true, messageId
= ID:DE-L071208-50054-1302201283142-0:4:8:1:1035, originalDestination =
null, originalTransactionId = null, producerId =
ID:DE-L071208-50054-1302201283142-0:4:8:1, destination = topic://Parameters,
transactionId = null, expiration = 0, timestamp = 1302201875305, arrival =
0, brokerInTime = 1302201875305, brokerOutTime = 1302201875305,
correlationId = null, replyTo = null, persistent = true, type = null,
priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null,
compressed = false, userID = null, content =
org.apache.activemq.util.ByteSequence@70c64bc2, marshalledProperties =
org.apache.activemq.util.ByteSequence@6a97e765, dataStructure = null,
redeliveryCounter = 0, size = 2093, properties = {timestamp=1302201278281,
unit=State, description=The State of the Payload. '1' means enabled. '0'
means disabled., name=Payload State,
logger=org.apache.log4j.Logger@48dbb335, value=1.0,
serialVersionUID=-5803219773253020746,
objectid=1f530039-9c06-45a5-8841-23bd6358150e, clazz=java.lang.Double,
firedTime=Thu Apr 07 20:44:35 CEST 2011, datasetidentifier=0},
readOnlyProperties = true, readOnlyBody = true, droppable = false}
at
org.apache.camel.component.jms.JmsBinding.extractBodyFromJms(JmsBinding.java:158)
at
org.apache.camel.component.jms.JmsMessage.createBody(JmsMessage.java:183)
at org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:42)
at org.apache.camel.impl.DefaultUnitOfWork.(DefaultUnitOfWork.java:65)
at
org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:90)
at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
at
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:91)
at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:85)
at
org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:85)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:560)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:498)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:467)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:323)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:261)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1056)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1048)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947)
at java.lang.Thread.run(Thread.java:662)
Caused by: javax.jms.JMSException: Failed to build body from content.
Serializable class not available to broker. Reason:
java.lang.ClassNotFoundException:
org.hbird.business.simpleparametersimulator.ConstantParameter
at
org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:35)
at
org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:186)
at
org.apache.camel.component.jms.JmsBinding.extractBodyFromJms(JmsBinding.java:125)
... 20 more
Caused by: java.lang.ClassNotFoundException:
org.hbird.business.simpleparametersimulator.ConstantParameter
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at
org.apache.activemq.util.ClassLoadingAwareObjectInputStream.load(ClassLoadingAwareObjectInputStream.java:63)
at
org.apache.activemq.util.ClassLoadingAwareObjectInputStream.resolveClass(ClassLoadingAwareObjectInputStream.java:37)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1574)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)
at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at
org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:184)
... 21 more
Copying the library containing the type into the library path of activemq
solves the problem, but I wonder why the routing depends on knowledge of the
class? Why cant I route any message? The answer is most likely that JMS
tries to serialize the bean and fails because it doesnt know it, but cant
this be done in a generic manner? Why does the 'middleware' activemq have to
know about the types I route in my business tier?
--
View this message in context: http://camel.465427.n5.nabble.com/Class-not-found-when-Creating-Camel-route-through-Activemq-console-tp4289185p4289185.html
Sent from the Camel - Users mailing list archive at Nabble.com.
Re: 'Class not found' when Creating Camel route through Activemq console
Posted by Claus Ibsen <cl...@gmail.com>.
Hi
You can disable mapping JMX messages using mapJmsMessage=false option
See
http://camel.apache.org/jms
On Thu, Apr 7, 2011 at 8:49 PM, Gert Villemos <gv...@yahoo.de> wrote:
> I post this here and not in the activemq forum, as its a Camel route that
> courses the problem.
>
> In our setup I have Camel routes configured to inject to / read from a
> activemq topic called 'Parameters'. Each message in the body contains a POJO
> of type 'org.hbird.exchange.type.Parameter'. I have no problems with this
> from my Camel routes.
>
> But when I use the Activemq console to create a new test route as shown
> below, it fails;
>
> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
>
> This is an example route.
>
>
>
>
> The topic is not created. Looking at the activemq log, I see the error
> messages below repeated fro each message;
>
> 2011-04-07 20:44:35,603 | WARN | Execution of JMS message listener failed,
> and no ErrorHandler has been set. |
> org.springframework.jms.listener.DefaultMessageListenerContainer |
> DefaultMessageListenerContainer-1
> org.apache.camel.RuntimeCamelException: Failed to extract body due to:
> javax.jms.JMSException: Failed to build body from content. Serializable
> class not available to broker. Reason: java.lang.ClassNotFoundException:
> org.hbird.business.simpleparametersimulator.ConstantParameter. Message:
> ActiveMQObjectMessage {commandId = 8299, responseRequired = true, messageId
> = ID:DE-L071208-50054-1302201283142-0:4:8:1:1035, originalDestination =
> null, originalTransactionId = null, producerId =
> ID:DE-L071208-50054-1302201283142-0:4:8:1, destination = topic://Parameters,
> transactionId = null, expiration = 0, timestamp = 1302201875305, arrival =
> 0, brokerInTime = 1302201875305, brokerOutTime = 1302201875305,
> correlationId = null, replyTo = null, persistent = true, type = null,
> priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null,
> compressed = false, userID = null, content =
> org.apache.activemq.util.ByteSequence@70c64bc2, marshalledProperties =
> org.apache.activemq.util.ByteSequence@6a97e765, dataStructure = null,
> redeliveryCounter = 0, size = 2093, properties = {timestamp=1302201278281,
> unit=State, description=The State of the Payload. '1' means enabled. '0'
> means disabled., name=Payload State,
> logger=org.apache.log4j.Logger@48dbb335, value=1.0,
> serialVersionUID=-5803219773253020746,
> objectid=1f530039-9c06-45a5-8841-23bd6358150e, clazz=java.lang.Double,
> firedTime=Thu Apr 07 20:44:35 CEST 2011, datasetidentifier=0},
> readOnlyProperties = true, readOnlyBody = true, droppable = false}
> at
> org.apache.camel.component.jms.JmsBinding.extractBodyFromJms(JmsBinding.java:158)
> at
> org.apache.camel.component.jms.JmsMessage.createBody(JmsMessage.java:183)
> at org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:42)
> at org.apache.camel.impl.DefaultUnitOfWork.(DefaultUnitOfWork.java:65)
> at
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:90)
> at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
> at
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
> at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
> at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
> at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:91)
> at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:85)
> at
> org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:85)
> at
> org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:560)
> at
> org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:498)
> at
> org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:467)
> at
> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:323)
> at
> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:261)
> at
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1056)
> at
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1048)
> at
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947)
> at java.lang.Thread.run(Thread.java:662)
> Caused by: javax.jms.JMSException: Failed to build body from content.
> Serializable class not available to broker. Reason:
> java.lang.ClassNotFoundException:
> org.hbird.business.simpleparametersimulator.ConstantParameter
> at
> org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:35)
> at
> org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:186)
> at
> org.apache.camel.component.jms.JmsBinding.extractBodyFromJms(JmsBinding.java:125)
> ... 20 more
> Caused by: java.lang.ClassNotFoundException:
> org.hbird.business.simpleparametersimulator.ConstantParameter
> at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
> at java.security.AccessController.doPrivileged(Native Method)
> at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
> at java.lang.Class.forName0(Native Method)
> at java.lang.Class.forName(Class.java:247)
> at
> org.apache.activemq.util.ClassLoadingAwareObjectInputStream.load(ClassLoadingAwareObjectInputStream.java:63)
> at
> org.apache.activemq.util.ClassLoadingAwareObjectInputStream.resolveClass(ClassLoadingAwareObjectInputStream.java:37)
> at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1574)
> at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)
> at
> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
> at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
> at
> org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:184)
> ... 21 more
>
>
> Copying the library containing the type into the library path of activemq
> solves the problem, but I wonder why the routing depends on knowledge of the
> class? Why cant I route any message? The answer is most likely that JMS
> tries to serialize the bean and fails because it doesnt know it, but cant
> this be done in a generic manner? Why does the 'middleware' activemq have to
> know about the types I route in my business tier?
>
>
> --
> View this message in context: http://camel.465427.n5.nabble.com/Class-not-found-when-Creating-Camel-route-through-Activemq-console-tp4289185p4289185.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
--
Claus Ibsen
-----------------
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
CamelOne 2011: http://fusesource.com/camelone2011/
Twitter: davsclaus
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/