Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
Win XP
-
Moderate
Description
The testcase below passed on RI but failed on Harmony with the following stacktrace:
java.io.StreamCorruptedException: Wrong format: 0x0
at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:842)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2128)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:283)
at Test.main(Test.java:18)
--------------------------- Test.java --------------------------------
import java.io.*;
public class Test {
static ObjectStreamClass[] objs = new ObjectStreamClass[1000];
static int pos = 0;
public static void main(String[] args) {
try
catch (Exception ex)
{ ex.printStackTrace(); }}
public static class TestExtObject implements Externalizable {
public void writeExternal(ObjectOutput out) throws IOException
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
{ in.readInt(); }}
static class TestObjectOutputStream extends ObjectOutputStream {
public TestObjectOutputStream(OutputStream out) throws IOException
protected void writeClassDescriptor(ObjectStreamClass osc) throws IOException
{ objs[pos++] = osc; }}
static class TestObjectInputStream extends ObjectInputStream {
public TestObjectInputStream(InputStream in) throws IOException
protected ObjectStreamClass readClassDescriptor() throws IOException, ClassNotFoundException
{ return (ObjectStreamClass) objs[pos++]; } }
}
-------------------------------------------------------------------------
This test actually saves the incoming ObjectStreamClass-es in local array and does not write them to ObjectOutputStream (and takes them from this array in de-serialization). It seems like Externalizable class does not properly de-serialized as the exception occured during the next readObject() call.