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.