Hey John,

I gave read about TypeReference. It could work for the list serde. However, it 
is not directly supported: 
https://github.com/FasterXML/jackson-databind/issues/1490 
<https://github.com/FasterXML/jackson-databind/issues/1490>
The only way is to pass an actual class object into the constructor, something 
like:


It could be an option, but not a pretty one. What do you think of my approach 
to use vanilla java and canonical class name? (As described previously)

Best,
Daniyar Yeralin

> On Jun 20, 2019, at 2:45 PM, Development <d...@yeralin.net> wrote:
> 
> Hi John,
> 
> Thank you for your input! Yes, my idea looks a little bit over engineered :)
> 
> I also wanted to see a feedback from Mathias as well since he gave me an idea 
> about storing fixed/variable size entries.
> 
> Best,
> Daniyar Yeralin
> 
>> On Jun 18, 2019, at 6:06 PM, John Roesler <j...@confluent.io> wrote:
>> 
>> Hi Daniyar,
>> 
>> That's a very clever solution!
>> 
>> One observation is that, now, this is what we might call a polymorphic
>> serde. That is, you're detecting the actual concrete type and then
>> promising to produce the exact same concrete type on read. There are
>> some inherent problems with this approach, which in general require
>> some kind of  schema registry (not necessarily Schema Registry, just
>> any registry for schemas) to solve.
>> 
>> Notice that every serialized record has quite a bit of duplicated
>> information: the concrete type as well as a byte to indicate whether
>> the value type is a fixed size, and, if so, an integer to indicate the
>> actual size. These constitute a schema, of sorts, because they tell us
>> later how exactly to deserialize the data. Unfortunately, this
>> information is completely redundant. In all likelihood, the
>> information will be exactly the same for every record in the topic.
>> This problem is essentially the core motivation for serializations
>> like Avro: to move the schema outside of the serialization itself, so
>> that the records won't contain so much redundant information.
>> 
>> In this light, I'm wondering if it makes sense to go back to something
>> like what you had earlier in which you don't support perfectly
>> preserving the concrete type for _this_ serde, but instead just
>> support deserializing to _some_ List. Then, you could defer full,
>> perfect, type preservation to serdes that have an external system in
>> which to register their type information.
>> 
>> There does exist an alternative, if we really do want to preserve the
>> concrete type (which does seem kind of nice). You can add a
>> configuration option specifically for the serde to configure what the
>> list type will be, and maybe what the element type is, as well.
>> 
>> As far as "related work" goes, you might be interested to take a look
>> at how Jackson can be configured to deserialize into a specific,
>> arbitrarily nested, generically parameterized class structure.
>> Specifically, you might find
>> https://fasterxml.github.io/jackson-core/javadoc/2.0.0/com/fasterxml/jackson/core/type/TypeReference.html
>> interesting.
>> 
>> Thanks,
>> -John
>> 
>> On Mon, Jun 17, 2019 at 12:38 PM Development <d...@yeralin.net> wrote:
>>> 
>>> bump
> 

Reply via email to