<Swing Dev> [8] Review request for 8027066: XMLDecoder in java 7 cannot properly deserialize object arrays
sergey malenkov
sergey.malenkov at oracle.com
Wed Oct 23 16:44:38 UTC 2013
The fix looks fine. It was my fault.
SAM
On 23.10.2013 20:18, anton nashatyrev wrote:
> Hello,
> could you please review the following fix:
>
> fix: http://cr.openjdk.java.net/~alitvinov/8027066/webrev.01
> <http://cr.openjdk.java.net/%7Ealitvinov/8027066/webrev.01>
> bug: https://bugs.openjdk.java.net/browse/JDK-8027066
>
> The problem: when serializing-deserializing an object which fields
> refer to the same array instance, one of the fields is not initialized
>
> The reason: The ElementHandler.isArgument() returns false when the
> serialized element contains 'id' which is our case since the second
> object field refers the first field value by 'id':
> <java version="1.7.0_45" class="java.beans.XMLDecoder">
> <object class="XMLEncoderTests$Wrapper">
> <void property="detailedMessages">
> <array class="java.lang.String" length="2" id="StringArray0">
> <void index="0">
> <string>First message</string>
> </void>
> <void index="1">
> <string>Second message</string>
> </void>
> </array>
> </void>
> <void property="messages">
> <object idref="StringArray0"/>
> </void>
> </object>
> </java>
>
> When the isArgument() returns false the value created isn't passed up
> to its parent. This issue resolved in the ObjectElementHandler by
> overriding isArgument() to always return true. Though the same is not
> done in the ArrayElementHandler.
>
> The solution: override the isArgument() in the ArrayElementHandler the
> same way as in ObjectElementHandler
>
> Thanks!
> Anton.
More information about the swing-dev
mailing list