And btw I can’t see the need for scanning in the first place : Step 1) While deserializing Collection<T>, when T is known at compile time (damn type erasure), we can check if Class<T> has @JsonbTypeDeserializer annotation. I believe this is what we are already doing (I hope so!). So the specified Deserializer should be called, Polymorphic.DeSerializer.class in this case.
Step 2) Polymorphic.DeSerializer should check if Class<T> has @Polymorphic.JsonChildren annotation, and also if specified children classes have @Polymorphic.JsonId annotation. With all these information deserialization can be done without scanning, I believe. ________________________________ Da: Alessandro Moscatelli <[email protected]> Inviato: Tuesday, April 24, 2018 12:17:12 PM A: [email protected] Oggetto: R: Arrays / Lists elements polymorphic support Conflict will still be possible if you choose the same id, or if you don’t specify the id and the colliding simplenames of different classes will be used. ‘Scanning’ could be done at Deploy time, on each entity with @Polimorphic annotation only. The real gain would be the possibility to use Polymorphism without modifying every entity referencing the polymorphic one, even more when you could not even if you want (for example Collection). Another nice option would be to register children programmatically … Da: Romain Manni-Bucau<mailto:[email protected]> Inviato: martedì 24 aprile 2018 12:06 A: [email protected]<mailto:[email protected]> Oggetto: Re: Arrays / Lists elements polymorphic support 2018-04-24 11:46 GMT+02:00 Alessandro Moscatelli < [email protected]>: > Shouldn’t the @Polymorphic.JsonId (defaulting to simple name if absent) be > the meta to use to know what you will deserialize ? > Yes, that's what it is actually but how do you find it? Scanning? means you are slow for no real gain + you can conflict between libraries and models > > By the way, how the Polymorphic.JsonId will be serialized ? This is not > specified in the index.md. > {_type: <id>,_value: <value>} > > > > > > ________________________________ > Da: Romain Manni-Bucau <[email protected]> > Inviato: Tuesday, April 24, 2018 11:42:13 AM > A: [email protected] > Oggetto: Re: Arrays / Lists elements polymorphic support > > Not it wouldn't work since when you deserialize you don't have any meta on > what you will deserialize. > > There are alternative to this impl but this is the one requiring the least > configuration I think. > > > Romain Manni-Bucau > @rmannibucau <https://twitter.com/rmannibucau> | Blog > <https://rmannibucau.metawerx.net/> | Old Blog > <http://rmannibucau.wordpress.com> | Github <https://github.com/ > rmannibucau> | > LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book > <https://www.packtpub.com/application-development/java- > ee-8-high-performance> > > 2018-04-24 11:39 GMT+02:00 Alessandro Moscatelli < > [email protected]>: > > > I think I would be great if this could be part of the Jsonb spec. > > I noticed the lack of real support for polymorphism. > > > > Regarding your impl : > > > > What if you need a Collection of polymorphic entities ? > > Wouldn’t it be better to declare the > > > > @JsonbTypeSerializer(Polymorphic.Serializer.class) > > @JsonbTypeDeserializer(Polymorphic.DeSerializer.class) > > > > Directly on the root entity instead of declare them on the field ? > > Would it work ? > > > > AM > > > > Da: Romain Manni-Bucau<mailto:[email protected]> > > Inviato: lunedì 23 aprile 2018 19:03 > > A: [email protected]<mailto:[email protected]> > > Oggetto: Re: Arrays / Lists elements polymorphic support > > > > Ok > > > > Will try to adapt the impl we had and push it later today or tmr and ping > > here for feedbacks > > > > Le 23 avr. 2018 18:46, "Jean-Louis MONTEIRO" <[email protected]> a > écrit > > : > > > > > That works for me. > > > I agree that having that extension into a specific module is the way to > > go > > > > > > Le lun. 23 avr. 2018 à 18:44, Romain Manni-Bucau < > [email protected]> > > a > > > écrit : > > > > > > > Maybe raise a spec issue since we tend to be jsonb driven now. Would > be > > > > great to not have a custom api for the id mapping. > > > > > > > > In the mean time we can push a jsonb-extra with that impl > > > > > > > > Le 23 avr. 2018 18:39, "Jean-Louis MONTEIRO" <[email protected]> a > > > écrit > > > > : > > > > > > > > > Hey Roberto, > > > > > > > > > > I think that would be a great feature. > > > > > Already had this case in the past and looks like Jackson and Gson > > > already > > > > > have it. > > > > > > > > > > Gson subtypes on adapters. > > > > > https://github.com/google/gson/blob/master/extras/src/ > > > > > main/java/com/google/gson/typeadapters/ > > RuntimeTypeAdapterFactory.java > > > > > > > > > > > > > > > Jackson annotations with different strategies > > > > > https://github.com/FasterXML/jackson-docs/wiki/ > > > > > JacksonPolymorphicDeserialization > > > > > > > > > > We should consider adding this feature I believe. > > > > > > > > > > > > > > > Le mer. 18 avr. 2018 à 19:42, Roberto Cortez > > > <[email protected] > > > > > > > > > > a écrit : > > > > > > > > > > > Hi Romain, > > > > > > Thanks for the quick response. > > > > > > I'll have a look, > > > > > > Cheers,Roberto > > > > > > On Wednesday, April 18, 2018, 6:35:32 PM GMT+1, Romain > > > Manni-Bucau > > > > < > > > > > > [email protected]> wrote: > > > > > > > > > > > > Hi Roberto > > > > > > > > > > > > Yes, an adapter is the way to go using our mapper or jsonb. > > > > > > > > > > > > There should be an "animal" test showing how to do that. Just > dont > > > > forget > > > > > > to use class aliases or a whitelist logic to not open a backdoor. > > > > > > > > > > > > Since the model doesnt match the java model im not a fan of that > > > > feature > > > > > > being built out of the box. In xml it is more natural but in json > > you > > > > can > > > > > > do it without breaking the model. For me it means the model is > > broken > > > > and > > > > > > must not be used as an input. > > > > > > > > > > > > Le 18 avr. 2018 19:31, "Roberto Cortez" > > <[email protected] > > > > > > > > a > > > > > > écrit : > > > > > > > > > > > > > Hi guys, > > > > > > > I'm trying to serialize a list of elements of multiple types > and > > > then > > > > > > > deserialize it again. It does require to somehow include the > type > > > in > > > > > the > > > > > > > serialization result to know to which type we should map to > > > > > deserialize. > > > > > > I > > > > > > > think this could possible be done with an Adapter and playing > > with > > > > the > > > > > > > JsonArray. > > > > > > > I was just wondering if there any kind of out of the box > support > > > for > > > > > > this. > > > > > > > It doesn't seem so, at least I was not able to find. > > > > > > > Jackson for instance, includes a set of annotations that allow > > you > > > to > > > > > do > > > > > > > exactly this, without any extra / custom code. > > > > > > > Any thoughts? > > > > > > > Thank you. > > > > > > > Cheers,Roberto > > > > > > > > > > > > > > > > >
