Annotation CordaSerializationTransformEnumDefault

  • All Implemented Interfaces:
    java.lang.annotation.Annotation

    @Target(value = TYPE)@Retention(value = RUNTIME)@Repeatable(value = CordaSerializationTransformEnumDefaults.class) 
    public @interface CordaSerializationTransformEnumDefault
    
                        

    This annotation is used to mark an enumerated type as having had a new constant appended to it. For each additional constant added, a new annotation should be appended to the class. If more than one is required, the wrapper annotation CordaSerializationTransformEnumDefaults should be used to encapsulate them.

    For example:

    Enum before modification:

     enum class ExampleEnum {
       A, B, C
     }
    

    Assuming at some point a new constant is added, it is required we have some mechanism by which to tell nodes with an older version of the class on their Class Path what to do if they attempt to deserialize an example of the class with that new value.

     @CordaSerializationTransformEnumDefault(newName = "D", oldName = "C")
     enum class ExampleEnum {
       A, B, C, D
     }
    

    So, on deserialisation treat any instance of the enum that is encoded as D as C.

    Adding a second new constant requires the wrapper annotation CordaSerializationTransformEnumDefaults.

     @CordaSerializationTransformEnumDefaults(
         @CordaSerializationTransformEnumDefault(newName = "E", oldName = "D"),
         @CordaSerializationTransformEnumDefault(newName = "D", oldName = "C")
     )
     enum class ExampleEnum {
       A, B, C, D, E
     }
    
    It's fine to assign the second new value a default that may not be present in all versions as in this case it will work down the transform hierarchy until it finds a value it can apply, in this case it would try E -> D -> C (when E -> D fails).
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
    • Field Summary

      Fields 
      Modifier and Type Field Description
    • Constructor Summary

      Constructors 
      Constructor Description
    • Enum Constant Summary

      Enum Constants 
      Enum Constant Description
    • Method Summary

      Modifier and Type Method Description
      abstract String newName()
      abstract String oldName()
      • Methods inherited from class java.lang.annotation.Annotation

        annotationType, equals, hashCode, toString
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait