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/