Jörg Schaible wrote:

> Jörg Schaible wrote:
> 
>> Hi Kay,
>> 
>> Kay Masslow wrote:
>> 
>>> Hi all,
>>> 
>>> The FAQ recommends "implement a custom mapper to ignore unknown fields
>>> automatically (see acceptance test
>>> customMapperTest.testCanBeUsedToOmitUnexpectedElements())". However
>>> using this code seems to cause trouble with handling of collections.
>> 
>> You get trouble with *implicit* collections/arrays.
>> 
>>> Am I doing something wrong here?
>> 
>> Nothing, but the custom mapper interferes with the handling of the
>> implicit collection. The problem is, that those elements ("Item" in your
>> case) are no fields of Root. The reflection converter will now ask the
>> mapper if it should deserialize a field named "Item" and the custom
>> mapper says no now, because that field is not declared anywhere in the
>> class hierarchy. If the converter is told, not to deserialize this item,
>> it stops .. and will not look for a possible implicit element.
>> 
>>> Using XStream 1.4.4 Please see JUnit
>>> 4 code below: testFailsWithUnknownElements() notNull-Assertion fails
>>> because the List is not initialized.
>> 
>> This is another caveat of implicit collections (covered by FAQ): If no
>> element was found, the collection itself is not initialized i.e. the
>> field keeping the collection instance is null. Because of the "implicit"
>> declaration of the collection, XStream can no longer separate between an
>> empty collection and null, because the collection has no representation
>> in the XML at all. You may use a readResolve method to initialize it with
>> an empty collection (also FAQ).
>> 
>> It is possible to implement the custom mapper for implicit collections
>> though, but it costs a bit more runtime:
>> 
>> new MapperWrapper(next) {
>>   public boolean shouldSerializeMember(Class definedIn, String fieldName)
>>   {
>>     if (getImplicitCollectionDefForFieldName(definedIn, fieldName) !=
>>     null)
>> {
>>       return true;
>>     }
>>     return definedIn != Object.class ?
>>       super.shouldSerializeMember(definedIn, fieldName) : false;
>>     }
>>   }
> 
> Sorry, this modification does not work either ... :-/

Latest trunk has no method XStream.ignoreUnknownElements()

- Jörg


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to