Sed and mismatches

Revision as of 11:33, 2 March 2010 by Manus (Talk | contribs) (Fixing attribute type/name mismatches)

Let's find out how to fix mismatches when retrieving a serialized objects.

Fixing type name mismatches

The first kind of mismatches that can occur is when a type was renamed or a generic parameters was either added or removed. If you know the old name and the new name, you can pass to {SED_INDEPENDENT_DESERIALIZER}.set_class_type_translator an agent that will return the new type name given the old type name. This agent will be called each time we cannot find the name in the retrieving system.

When all types have found their corresponding type name, we can continue and solve attribute type/name mismatches.

Fixing attribute type/name mismatches

There are various kind of mismatches:

  • The type of the attribute was changed from X to Z. There are different scenarios:
    1. The old type conforms to the new type: if {SED_INDEPENDENT_DESERIALIZER}.is_conforming_mismatch_allowed is true, then no mismatch is reported, otherwise we report one which will be handled when retrieving the object data.
    2. The types differ only by their attachment mark: if the new type is attached while the other is not, then we will only trigger a mismatch when retrieving the object data when we get Void; otherwise no mismatch is being raised.
    3. If the old type without attachment mark conforms to the new type without attachment mark, we apply first #1 and if True we apply #2 above.
    4. The types are completely unrelated: we trigger a mismatch when retrieving the object data.
  • The name of some attributes have changed: if an attribute name translator has been provided via {SED_INDEPENDENT_DESERIALIZER}.set_attribute_name_translator, we use this to find out the new name of the attribute and then apply the above in case the type has also changed. If no translator was provided, we simply trigger a mismatch when retrieving the object data.
  • Some attributes have been removed: if {SED_INDEPENDENT_DESERIALIZER}.is_attribute_removal_allowed is true, then no mismatch is reported, otherwise we report one which will be handled when retrieving the object data.