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.