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.

Reply via email to