Difference between revisions of "Sed and mismatches"
(→Fixing attribute type/name mismatches) |
(→Fixing attribute type/name mismatches) |
||
Line 14: | Line 14: | ||
*#The types are completely unrelated: we trigger a mismatch when retrieving the object data. | *#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, 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. | + | *The name of some attributes have changed: if an attribute name translator has been provided via <e>{SED_INDEPENDENT_DESERIALIZER}.set_attribute_name_translator</e>, 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 <e>{SED_INDEPENDENT_DESERIALIZER}.is_attribute_removal_allowed</e> is true, then no mismatch is reported, otherwise we report one which will be handled when retrieving the object data. | *Some attributes have been removed: if <e>{SED_INDEPENDENT_DESERIALIZER}.is_attribute_removal_allowed</e> is true, then no mismatch is reported, otherwise we report one which will be handled when retrieving the object data. |
Revision as of 10:33, 2 March 2010
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:
- 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. - 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.
- 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.
- The types are completely unrelated: we trigger a mismatch when retrieving the object data.
- The old type conforms to the new type: if
- 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.