You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Mikhail Markov (JIRA)" <ji...@apache.org> on 2007/08/05 16:53:54 UTC

[jira] Created: (HARMONY-4602) [classlib][luni] ObjectStreamClass.lookup() incorrectly works

[classlib][luni] ObjectStreamClass.lookup() incorrectly works
-------------------------------------------------------------

                 Key: HARMONY-4602
                 URL: https://issues.apache.org/jira/browse/HARMONY-4602
             Project: Harmony
          Issue Type: Bug
          Components: App-Oriented Bug Reports, Classlib
         Environment: Win XP
            Reporter: Mikhail Markov


ObjectStreamClass.lookup() method returns incorrect ObjectStreamClass, which could not be used for replacement in ObjectInputStream.readClassDescriptor(). The test below demonstrates the problem.
Output on RI: Passed
Output on Harmony: FAILED: expected - It's a test, but got - null

--------- Test.java -----------
import java.io.*;

public class Test implements Serializable {
    public String str;

    public static void main(String[] args) throws Exception {
        Test t = new Test();
        t.str = "It's a test";
        PipedOutputStream pout = new PipedOutputStream();
        PipedInputStream pin = new PipedInputStream(pout);
        ObjectOutputStream out = new ObjectOutputStream(pout);
        TestObjectInputStream in = new TestObjectInputStream(pin);
        out.writeObject(t);
        Test t1 = (Test) in.readObject();

        if (!t.str.equals(t1.str)) {
            System.out.println("FAILED: expected - " + t.str + ", but got - " + t1.str);
        } else {
            System.out.println("PASSED.");
        }
    }

    static class TestObjectInputStream extends ObjectInputStream {
        private static ObjectStreamClass testOsc = ObjectStreamClass.lookup(Test.class);

        TestObjectInputStream(InputStream in) throws IOException {
            super(in);
        }

        protected ObjectStreamClass readClassDescriptor() throws ClassNotFoundException, IOException {
            ObjectStreamClass osc = super.readClassDescriptor();

            if(osc.getName().equals("Test")) {
                return testOsc;
            }
            return osc;
        }
    }
}
-------------------------

I've investigated the problem a bit and found that ObjectStreamClass has package-protected method getLoadFields() which is used by ObjectInputStream to get an array of ObjectStreaFields-s to be loaded from the stream in case of default de-serialization. For ObjectStreamClass created by ObjectStreamClass.lookup() method, this method returns an empty array, thus in case of default de-serialization ObjectInputStream does not try to read any field value from the stream - although there are data to be read in the stream.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.