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.