harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kevin Zhou (JIRA)" <j...@apache.org>
Subject [jira] Created: (HARMONY-5975) [classlib] [beans] XMLEncoder encodes the static field with customized persistence delegate
Date Tue, 09 Sep 2008 08:13:44 GMT
[classlib] [beans] XMLEncoder encodes the static field with customized persistence delegate
-------------------------------------------------------------------------------------------

                 Key: HARMONY-5975
                 URL: https://issues.apache.org/jira/browse/HARMONY-5975
             Project: Harmony
          Issue Type: Bug
          Components: Classlib
    Affects Versions: 5.0M7
            Reporter: Kevin Zhou
             Fix For: 5.0M8


Consider test case [1], RI and Harmony's beans will generate different results [2] [3]. 
Using the given MockObjectPersistenceDelegate, RI will write the "inst" instance of MockObject
as a field, 
while current Harmony's beans will write this instance by using reflection method Class.getField(...).

This is due to the missing condition in the XMLEncoder.flushStatField(...) method.

[1]
public class XMLEncoderTest extends TestCase {
    public void test_WriteObject_StaticField() {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        XMLEncoder xmlEncoder = new XMLEncoder(bos);
        xmlEncoder.setPersistenceDelegate(MockObject.class,
                new MockObjectPersistenceDelegate());
        xmlEncoder.writeObject(MockObject.inst);
        xmlEncoder.close();
        System.out.println(bos.toString());
    }
    public static class MockObject {
        public static MockObject inst = new MockObject();
    }
    public static class MockObjectPersistenceDelegate extends
            PersistenceDelegate {
        protected Expression instantiate(Object oldInstance, Encoder enc) {
            Expression exp = null;
            try {
                exp = new Expression(MockObject.class.getField("inst"), "get",
                        new Object[] { null });
            } catch (Exception e) {
                e.printStackTrace();
            }
            return exp;
        }
    }
}

[2] RI's XML:
<?xml version="1.0" encoding="UTF-8"?> 
<java version="1.6.0_05" class="java.beans.XMLDecoder"> 
 <object class="tests.java.beans.XMLEncoderTest$MockObject" field="inst"/> 
</java> 

[3] Harmony's XML
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.5.0" class="java.beans.XMLDecoder">
 <object class="tests.java.beans.XMLEncoderTest$MockObject" method="getField">
  <string>inst</string>
 </object>
</java>

-- 
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