harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mikhail Markov (JIRA)" <j...@apache.org>
Subject [jira] Created: (HARMONY-4602) [classlib][luni] ObjectStreamClass.lookup() incorrectly works
Date Sun, 05 Aug 2007 14:53:54 GMT
[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);
        Test t1 = (Test) in.readObject();

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

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

        TestObjectInputStream(InputStream in) throws IOException {

        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.

View raw message