Hi,
I just ran into a class loading exception when trying to serialize a
proxy instance (an instance of java.lang.reflect.Proxy). I have no
problems serializing our non-proxy objects. My proxy handler class is
serializable (as required) and located in the same class path as the
non-proxy classes. I have found that if I construct my proxy using jdk
interfaces only (i.e., java.util.Collection), then it works, but if I
use one of our own interfaces, ActiveMQ fails to load it as follows:
Caused by: java.lang.IllegalArgumentException: interface
com.referentia.liveaction.common.core.camel.clientstream.StreamIdProvider is
not visible from class loader
at java.lang.reflect.Proxy.getProxyClass(Proxy.java:353)
at
org.apache.activemq.util.ClassLoadingAwareObjectInputStream.resolveProxyClass(ClassLoadingAwareObjectInputStream.java:48)
... 34 more
Here's the entire stack trace:
2010-11-09 17:02:37,660 [DefaultMessageListenerContainer-1] WARN
org.springframework.jms.listener.DefaultMessageListenerContainer -
Execution of JMS message listener failed
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.
Message: ActiveMQObjectMessage {commandId = 19, responseRequired = true,
messageId = ID:rsi-eng-newsham-56811-1289358131963-0:2:3:1:3,
originalDestination = null, originalTransactionId = null, producerId =
ID:rsi-eng-newsham-56811-1289358131963-0:2:3:1, destination =
queue://ServiceExport, transactionId = null, expiration = 1289358177656,
timestamp = 1289358157656, arrival = 0, brokerInTime = 1289358157656,
brokerOutTime = 1289358157658, correlationId =
215512f0-0d7e-4f3c-8cc2-5e459d59b582, replyTo =
temp-queue://ID:rsi-eng-newsham-56811-1289358131963-0:2:1, persistent =
true, type = null, priority = 4, groupID = null, groupSequence = 0,
targetConsumerId = null, compressed = false, userID = null, content =
org.apache.activemq.util.byteseque...@115e628, marshalledProperties =
org.apache.activemq.util.byteseque...@b977bc, dataStructure = null,
redeliveryCounter = 0, size = 1860, properties =
{sessionId=04fd4b1b-0a01-40f7-8bf8-fda514c773e9}, 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.<init>(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:543)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:482)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:451)
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:982)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:974)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:876)
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
at
org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:35)
at
org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:179)
at
org.apache.camel.component.jms.JmsBinding.extractBodyFromJms(JmsBinding.java:125)
... 20 more
Caused by: java.lang.ClassNotFoundException
at
org.apache.activemq.util.ClassLoadingAwareObjectInputStream.resolveProxyClass(ClassLoadingAwareObjectInputStream.java:50)
at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1530)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1492)
at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at
org.apache.camel.component.bean.BeanInvocation.readExternal(BeanInvocation.java:105)
at
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1791)
at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)
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:177)
... 21 more
Caused by: java.lang.IllegalArgumentException: interface
com.referentia.liveaction.common.core.camel.clientstream.StreamIdProvider is
not visible from class loader
at java.lang.reflect.Proxy.getProxyClass(Proxy.java:353)
at
org.apache.activemq.util.ClassLoadingAwareObjectInputStream.resolveProxyClass(ClassLoadingAwareObjectInputStream.java:48)
... 34 more
Thanks,
Jim