-
Type:
Bug
-
Status: Resolved (View Workflow)
-
Priority:
Major
-
Resolution: Done
-
Affects Version/s: 1.0.5.FINAL
-
Fix Version/s: 1.1.0 Beta, 1.0.6.FINAL
-
Labels:None
-
Environment:
JBoss EAP 5.2 on JDK 7
JDK 7 changed the writeObject of Vector,
ObjectOutputStreamProxy.writeFields is being called, which write the fields out not as a FinalContainer , writeMyself checks the type and for non FinalContainer it just writes the object in metho FieldsContainer.writeField as:
out.writeByte(DataContainerConstants.OBJECTREF);
out.writeObject(value);
When reading, RegularObjectPersister is expecting all FinalContainer.
So it looks like either FinalContainer.writeField may need to wrap the objects in a FinalContainer or on the reading side it needs to read the non wrapped fields before reading the wrapped fields.
public void writeFields() throws IOException {
if (currentContainer!=null)
JDK 6
--------------------------------------------------------------------------
public class Vector<E>
extends AbstractList<E>
private synchronized void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException
JDK 7
--------------------------------------------------------------------------
private void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException {
final java.io.ObjectOutputStream.PutField fields = s.putFields();
final Object[] data;
synchronized (this)
fields.put("elementData", data);
s.writeFields();
}
org.jboss.serial.exception.SerializationException: Excepted to be int
at org.jboss.serial.objectmetamodel.DataContainer$DataContainerInput.readInt(DataContainer.java:1050)
at org.jboss.serial.persister.RegularObjectPersister.readSlotWithFields(RegularObjectPersister.java:333)
at org.jboss.serial.persister.RegularObjectPersister.defaultRead(RegularObjectPersister.java:290)
at org.jboss.serial.persister.RegularObjectPersister.readData(RegularObjectPersister.java:258)
at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:412)
at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:82)
at org.jboss.serial.objectmetamodel.DataContainer$DataContainerInput.readObject(DataContainer.java:847)
at test.Serial.main(Serial.java:28)
Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to org.jboss.serial.finalcontainers.IntegerContainer
at org.jboss.serial.objectmetamodel.DataContainer$DataContainerInput.readInt(DataContainer.java:1046)
... 7 more
java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:197)
at org.jboss.serial.util.StringUtil.pullDataToBuffer(StringUtil.java:191)
at org.jboss.serial.util.StringUtil.readString(StringUtil.java:238)
at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectInput.readUTF(DataContainer.java:757)
at org.jboss.serial.persister.RegularObjectPersister.readSlotWithFields(RegularObjectPersister.java:322)
at org.jboss.serial.persister.RegularObjectPersister.defaultRead(RegularObjectPersister.java:290)
at org.jboss.serial.persister.RegularObjectPersister.readData(RegularObjectPersister.java:258)
at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:412)
at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:82)
at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectInput.readObject(DataContainer.java:643)
at org.jboss.serial.io.JBossObjectInputStream.readObjectOverride(JBossObjectInputStream.java:163)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:363)
at test.Serial.main(Serial.java:48)
- incorporates
-
JBSER-121 Unable to deserialize java.io.File in java 6
-
- Resolved
-
- is incorporated by
-
JBPAPP-10744 upgrade jboss serialization to 1_0_6
-
- Resolved
-