You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Tim Ellison (JIRA)" <ji...@apache.org> on 2007/08/23 23:32:31 UTC
[jira] Resolved: (HARMONY-4638) [classlib][luni]
ObjectStreamClass.lookup() incorrectly works
[ https://issues.apache.org/jira/browse/HARMONY-4638?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Tim Ellison resolved HARMONY-4638.
----------------------------------
Resolution: Fixed
Thanks Mikhail.
Patch applied to LUNI module at repo revision r569151.
Please check it was applied as you expected.
> [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.