8 Replies Latest reply on Jul 18, 2006 5:18 AM by timfox

    Failed to read payload

    rtm333

      Hi,

      We are using JBoss Messaging 1.0.1 CR3 with JBoss 4.0.4 GA.

      Receiving ObjectMessages succeeds for many payload types, but there is at least one payload type in our application that leads to the following exception on the consumer side (running on a separate VM and machine). These messages work with the MQ implementation.

      Anybody got an idea what might be the problem?


      java.lang.RuntimeException: Failed to read payload
       at org.jboss.messaging.core.message.MessageSupport.getPayload(MessageSupport.java:226)
       at org.jboss.jms.message.JBossObjectMessage.getObject(JBossObjectMessage.java:137)
       at org.jboss.jms.message.ObjectMessageProxy.getObject(ObjectMessageProxy.java:59)
       at dreba.prj.quotranet.client.comm.MessageDelegator.forwardObjectMessage(MessageDelegator.java:103)
       at dreba.prj.quotranet.client.comm.MessageDelegator.onMessage(MessageDelegator.java:75)
       at org.jboss.jms.client.remoting.MessageCallbackHandler.callOnMessage(MessageCallbackHandler.java:82)
       at org.jboss.jms.client.remoting.MessageCallbackHandler$ClientDeliveryRunnable.run(MessageCallbackHandler.java:751)
       at EDU.oswego.cs.dl.util.concurrent.QueuedExecutor$RunLoop.run(QueuedExecutor.java:89)
       at java.lang.Thread.run(Thread.java:595)
      Caused by: java.io.IOException
       at org.jboss.serial.persister.RegularObjectPersister.readSlotWithMethod(RegularObjectPersister.java:107)
       at org.jboss.serial.persister.RegularObjectPersister.defaultRead(RegularObjectPersister.java:269)
       at org.jboss.serial.persister.RegularObjectPersister.readData(RegularObjectPersister.java:241)
       at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:411)
       at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:81)
       at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectInput.readObject(DataContainer.java:634)
       at org.jboss.serial.persister.RegularObjectPersister.readSlotWithFields(RegularObjectPersister.java:353)
       at org.jboss.serial.persister.RegularObjectPersister.defaultRead(RegularObjectPersister.java:273)
       at org.jboss.serial.persister.RegularObjectPersister.readData(RegularObjectPersister.java:241)
       at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:411)
       at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:81)
       at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectInput.readObject(DataContainer.java:634)
       at org.jboss.serial.io.JBossObjectInputStream.readObjectOverride(JBossObjectInputStream.java:163)
       at java.io.ObjectInputStream.readObject(ObjectInputStream.java:333)
       at org.jboss.messaging.core.message.RoutableSupport.internalReadObject(RoutableSupport.java:183)
       at org.jboss.messaging.core.message.MessageSupport.readPayloadExternal(MessageSupport.java:350)
       at org.jboss.messaging.core.message.MessageSupport.getPayload(MessageSupport.java:211)
       ... 8 more
      Caused by: java.lang.reflect.InvocationTargetException
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:585)
       at org.jboss.serial.persister.RegularObjectPersister.readSlotWithMethod(RegularObjectPersister.java:103)
       ... 24 more
      Caused by: java.io.IOException
       at org.jboss.serial.persister.RegularObjectPersister.readSlotWithMethod(RegularObjectPersister.java:107)
       at org.jboss.serial.persister.RegularObjectPersister.defaultRead(RegularObjectPersister.java:269)
       at org.jboss.serial.persister.RegularObjectPersister.readData(RegularObjectPersister.java:241)
       at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:411)
       at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:81)
       at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectInput.readObject(DataContainer.java:634)
       at org.jboss.serial.persister.RegularObjectPersister.readSlotWithFields(RegularObjectPersister.java:353)
       at org.jboss.serial.persister.RegularObjectPersister.defaultRead(RegularObjectPersister.java:273)
       at org.jboss.serial.persister.RegularObjectPersister.readData(RegularObjectPersister.java:241)
       at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:411)
       at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:81)
       at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectInput.readObject(DataContainer.java:634)
       at org.jboss.serial.persister.RegularObjectPersister.readSlotWithFields(RegularObjectPersister.java:353)
       at org.jboss.serial.persister.RegularObjectPersister.defaultRead(RegularObjectPersister.java:273)
       at org.jboss.serial.persister.RegularObjectPersister.readData(RegularObjectPersister.java:241)
       at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:411)
       at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:81)
       at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectInput.readObject(DataContainer.java:634)
       at org.jboss.serial.persister.ObjectInputStreamProxy.readObjectOverride(ObjectInputStreamProxy.java:68)
       at java.io.ObjectInputStream.readObject(ObjectInputStream.java:333)
       at java.util.HashSet.readObject(HashSet.java:278)
       ... 29 more
      Caused by: java.lang.reflect.InvocationTargetException
       at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:585)
       at org.jboss.serial.persister.RegularObjectPersister.readSlotWithMethod(RegularObjectPersister.java:103)
       ... 49 more
      Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:585)
       at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:426)
       at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:81)
       at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectInput.readObject(DataContainer.java:634)
       at org.jboss.serial.persister.ObjectInputStreamProxy.readObjectOverride(ObjectInputStreamProxy.java:68)
       at java.io.ObjectInputStream.readObject(ObjectInputStream.java:333)
       at java.util.HashMap.readObject(HashMap.java:1012)
       ... 53 more
      




        • 1. Re: Failed to read payload
          timfox

          What is the object you are trying to send that fails?

          • 2. Re: Failed to read payload
            rtm333

            Unfortunately, this is a rather complex object consisting of several layers of custom classes and collection types.

            At the "leaves" is an "enumeration" object type, that uses readResolve() to enforce uniqueness. These objects are nested within a HashMap, within two layers of wrapper classes and a HashSet within the top level payload object :-(

            Unless you've got an inspiration what might cause the problem, I will have to invest the time to reduce this to a small example that shows the symptoms.

            Thanks.

            • 3. Re: Failed to read payload
              timfox

              Sometimes JBoss Serialization has a problem serializing complex objects.

              I suspect this is what is happening in your case, especially since you are doing stuff with readresolve.

              As a workaround you can use java serialization instead. Just need to change "serialiaztiontype" to "java" in remoting-service.xml.

              • 4. Re: Failed to read payload
                rtm333

                Setting the serializationtype to java did not change the behaviour or stack trace at all.

                • 5. Re: Failed to read payload
                  timfox

                  Ok, so what we need to do is find out what part of the complex object is causing the problems.

                  Can you send me the class (you can remove any confidential/irrelevant suff) we can investigate what is going on.

                  Thx

                  • 6. Re: Failed to read payload
                    clebert.suconic

                    You are probably playing with readResolves. Can you send us any piece of code showing what you're doing?

                    Also, are you playing with inner classes on the complex object?

                    Thanks,


                    Clebert

                    • 7. Re: Failed to read payload
                      clebert.suconic
                      • 8. Re: Failed to read payload
                        timfox

                        Just so everyone is aware, Clebert has fixed this, and will be available in the next messaging release which will contain the latest jboss serialization.