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

Reply via email to