I'm writing a context aware upcaster that should extract event data from an IntermediateEventRepresentation and store it in context.
I see that IntermediateEventRepresentation has a getData method which returns SerializedObject<?>. SerializedObject has a getData method that returns T, but this return type doesn't contain the event data I expect.
class MyUpcaster : ContextAwareSingleEventUpcaster<Context>() {
override fun doUpcast(intermediateRepresentation: IntermediateEventRepresentation, context: Context): IntermediateEventRepresentation {
val eventData: MyEventType = intermediateRepresentation.data.data // error
val eventData: MyEventType = intermediateRepresentation.getData(MyEventType::class.java).data // error
}
}
Updated Answer
TLDR - I was passing the wrong class as an argument to
IntermediateEventRepresentation.getData(). I needed to passJsonNode::class.javarather thanMyEventType::class.java.My original idea of deserializing to
MyEventTypeproved misguided. IfMyEventTypeever changes, or if it contains nested objects that change, you'll end up needing to maintain a record of all those object structures within your upcaster, which is undesirable.It seems better just to work with the
JsonNodereturned fromIntermediateEventRepresentation.getData(JsonNode::class.java).data:Original Answer (Bad)
The
SerializedObjectreturned byIntermediateEventRepresentation.getData()must be (surprise!) deserialized using the appropriate serializer (JacksonSerializer, in this case):Important Caveat: This only works if the structure of
MyEventTypedoes not change, which cannot be guaranteed.