harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tim Ellison (JIRA)" <j...@apache.org>
Subject [jira] Updated: (HARMONY-4638) [classlib][luni] ObjectStreamClass.lookup() incorrectly works
Date Thu, 23 Aug 2007 21:26:30 GMT

     [ https://issues.apache.org/jira/browse/HARMONY-4638?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Tim Ellison updated HARMONY-4638:
---------------------------------

    Assignee: Tim Ellison

> [classlib][luni] ObjectStreamClass.lookup() incorrectly works
> -------------------------------------------------------------
>
>                 Key: HARMONY-4638
>                 URL: https://issues.apache.org/jira/browse/HARMONY-4638
>             Project: Harmony
>          Issue Type: Bug
>          Components: App-Oriented Bug Reports, Classlib
>         Environment: Win XP
>            Reporter: Mikhail Markov
>            Assignee: Tim Ellison
>         Attachments: H-4638.patch
>
>
> 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.
> I'll provide a patch soon.

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


Mime
View raw message