You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Sean Qiu (JIRA)" <ji...@apache.org> on 2008/09/09 10:49:44 UTC
[jira] Assigned: (HARMONY-5975) [classlib] [beans] XMLEncoder
encodes the static field with customized persistence delegate
[ https://issues.apache.org/jira/browse/HARMONY-5975?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sean Qiu reassigned HARMONY-5975:
---------------------------------
Assignee: Sean Qiu
> [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
> Assignee: Sean Qiu
> Fix For: 5.0M8
>
> Original Estimate: 24h
> Remaining Estimate: 24h
>
> 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.