That may well be, but I think it's better to summarize the situation and drop the longer discussions when there's been a long pause.
-+ Tatu +- On Wed, Nov 3, 2021 at 11:09 AM [email protected] <[email protected]> wrote: > In all fairness, I don't think the situation has changed at all regarding > this, so the info and the question is still fresh :) > > On Monday, November 1, 2021 at 6:00:12 PM UTC+1 [email protected] wrote: > >> On Sun, Oct 31, 2021 at 9:56 AM 遗迹 <[email protected]> wrote: >> >>> Are there any solution for this? In my case, I use it for OAS >>> discriminator annotation. It looks like: >> >> >> That thread is from 2017. Please start a new one with your question... >> >> -+ Tatu +- >> >> >>> >>> ```kotlin >>> class Pet(val pet: Discriminator("petType") OneOf2<Dog, Cat>) >>> ``` >>> >>> Without TYPE_USE annotation support, I can't get the discriminator >>> information. >>> Or are there any better choice to storage the information? >>> >>> Thank you. >>> 在2017年12月29日星期五 UTC+8 上午5:08:49<Tatu Saloranta> 写道: >>> >>>> On Thu, Dec 28, 2017 at 2:16 AM, Bojan Tomic <[email protected]> wrote: >>>> > Yes, TYPE_USE annotations and AnnotatedType were added in Java 8. >>>> > As you noted, processing these can get quite hairy, but at least some >>>> > support in Jackson would be very welcome. >>>> > I am intimately familiar with the complexities involved, as I am the >>>> > developer behind GeAnTyRef, a fork of GeTyRef (a library similar to >>>> > ClassMate), that deeply supports working with AnnotatedTypes. >>>> >>>> Ah. Yes, your help here is appreciated and we could use your expertise. >>>> Especially since you have an actual use case -- it's much easier to >>>> add support for existing >>>> use case, as opposed to expected or potential one. >>>> >>>> > I'm of the opinion Jackson would greatly gain in versatility if this >>>> style >>>> > of annotations was supported (as it makes it possible to convey >>>> > (de)serialization hints on a very granular level). >>>> > As I've mentioned, I'd be happy to contribute in order to get this >>>> feature >>>> > faster, if you'd be interested. >>>> >>>> Yes, I think that would make sense. >>>> >>>> As I said, `master` branch would be the the way to go at this point. >>>> Code has been refactored quite a bit >>>> since 2.9 in some places, but not so much wrt functionality for this, >>>> I think. But code for 3.0 requires Java 8, >>>> and 2 out of 3 modules (parameter names, Optional and other new types) >>>> are part of `jackson-databind` now. >>>> >>>> -+ Tatu +- >>>> >>>> >>>> > >>>> > >>>> > >>>> > On Thursday, December 28, 2017 at 6:42:28 AM UTC+1, Tatu Saloranta >>>> wrote: >>>> >> >>>> >> On Wed, Dec 27, 2017 at 9:33 AM, Bojan Tomic <[email protected]> >>>> wrote: >>>> >> > Just for the sake of experimentation, I've cobbled together the >>>> >> > following >>>> >> > wrapper class: >>>> >> > >>>> >> > class AnnotatedJavaType extends JavaType implements >>>> AnnotatedElement { >>>> >> > >>>> >> > private final JavaType base; >>>> >> > private final Annotation[] annotations; >>>> >> > >>>> >> > AnnotatedJavaType(JavaType base, Annotation[] annotations) { ... } >>>> >> > >>>> >> > //all methods simply delegate to this.base >>>> >> > } >>>> >> > >>>> >> > >>>> >> > >>>> >> > And the corresponding TypeFactory wrapper: >>>> >> > >>>> >> > class AnnotatedTypeFactory { >>>> >> > >>>> >> > JavaType construct(AnnotatedType type, TypeFactory typeFactory) { >>>> >> > if (type instanceof AnnotatedParameterizedType) { >>>> >> > JavaType[] args = Arrays.stream(((AnnotatedParameterizedType) >>>> >> > type).getAnnotatedActualTypeArguments()) >>>> >> > .map(arg -> fromJavaType(arg, typeFactory)) >>>> >> > .toArray(JavaType[]::new); >>>> >> > >>>> >> > TypeBindings bindings = >>>> >> > TypeBindings.create(ClassUtils.getRawType(type.getType()), args); >>>> >> > >>>> >> > return new >>>> >> > AnnotatedJavaType(typeFactory.constructType(type.getType(), >>>> >> > bindings), type.getAnnotations()); >>>> >> > } >>>> >> > >>>> >> > //handle wildcards, arrays, variables in the similar fashion >>>> >> > >>>> >> > return new >>>> >> > AnnotatedJavaType(typeFactory.constructType(type.getType()), >>>> >> > type.getAnnotations()); >>>> >> > } >>>> >> > } >>>> >> > >>>> >> > Amusingly enough, it works! I'd never keep it in my code base, but >>>> it >>>> >> > was an >>>> >> > interesting experiment. >>>> >> > >>>> >> > If the functionality I'm after is impossible (and I really hope it >>>> is >>>> >> > not), >>>> >> > would you be open to a contribution? I'd of course need some >>>> >> > consultation/guidance on the approach, but would be happy to >>>> develop it. >>>> >> >>>> >> As per my other note, this would need to be in Jackson 3.0 I think, >>>> >> due to multiple reasons. >>>> >> >>>> >> I am bit hesitant to say much more since I really fear all >>>> complexity >>>> >> that would come from trying >>>> >> to create parallel annotation processing system. I can see some >>>> >> benefits from type annotations, >>>> >> but it wouldn't come for free, if we are talking about whole >>>> >> AnnotationIntrospector style system. >>>> >> >>>> >> However: if the idea would be to do something simpler -- I don't >>>> >> really see need for full AnnotationIntrospector >>>> >> in this case, to be honest -- for example, simply keep track of >>>> >> annotations for type, offer access... well, >>>> >> that seems quite doable and useful. If so, `JavaType` could just >>>> have >>>> >> `findAnnotation(Class<?> type)` method >>>> >> or something? >>>> >> >>>> >> -+ Tatu +- >>>> >> >>>> >> >>>> >> >>>> >> > >>>> >> > >>>> >> > >>>> >> > >>>> >> > On Wednesday, December 27, 2017 at 11:34:37 AM UTC+1, Bojan Tomic >>>> wrote: >>>> >> >> >>>> >> >> I have a rather exotic use-case that I have to support. Types >>>> annotated >>>> >> >> with @Id need custom deserialization logic, e.g. the value should >>>> be >>>> >> >> Base64 >>>> >> >> decoded before deserializing it (not the only case). >>>> >> >> >>>> >> >> This means a type such as List<@Id Key> will be represented as a >>>> list >>>> >> >> of >>>> >> >> Base64 Strings that I deserialize using my custom logic. >>>> >> >> >>>> >> >> I originally have an AnnotatedType that I convert to JavaType >>>> using >>>> >> >> TypeFactory.constructType(annotatedType.getType()) prior to >>>> >> >> deserialization, >>>> >> >> which of course looses all the annotations. >>>> >> >> Later, in my custom Deserializers instance, in its various >>>> >> >> findXXXDeserializer methods, I have no way to find the correct >>>> >> >> deserializer >>>> >> >> as the annotations needed for the decision are gone... >>>> >> >> >>>> >> >> I was hoping the JDK8 module would have it's own TypeFactory-like >>>> >> >> mechanism to construct JavaType subclasses that preserve the >>>> >> >> annotations >>>> >> >> from AnnotatedTypes (e.g. >>>> >> >> AnnotatedTypeFactory.constructType(annotatedType)), but it >>>> doesn't seem >>>> >> >> to >>>> >> >> be the case. >>>> >> >> >>>> >> >> Is there any way at all to implement what I'm after? >>>> >> > >>>> >> > -- >>>> >> > You received this message because you are subscribed to the Google >>>> >> > Groups >>>> >> > "jackson-user" group. >>>> >> > To unsubscribe from this group and stop receiving emails from it, >>>> send >>>> >> > an >>>> >> > email to [email protected]. >>>> >> > To post to this group, send email to [email protected]. >>>> >> > For more options, visit https://groups.google.com/d/optout. >>>> > >>>> > -- >>>> > You received this message because you are subscribed to the Google >>>> Groups >>>> > "jackson-user" group. >>>> > To unsubscribe from this group and stop receiving emails from it, >>>> send an >>>> > email to [email protected]. >>>> > To post to this group, send email to [email protected]. >>>> > For more options, visit https://groups.google.com/d/optout. >>>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "jackson-user" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> >> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/jackson-user/e5f815f4-fac5-495a-9201-ca4f2a97acf0n%40googlegroups.com >>> <https://groups.google.com/d/msgid/jackson-user/e5f815f4-fac5-495a-9201-ca4f2a97acf0n%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- > You received this message because you are subscribed to the Google Groups > "jackson-user" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/jackson-user/90cca472-18e0-400b-b402-269413237120n%40googlegroups.com > <https://groups.google.com/d/msgid/jackson-user/90cca472-18e0-400b-b402-269413237120n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "jackson-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jackson-user/CAGrxA25WGQEhYTSHJ0CNTdt1VhJ4shcggrJ%3DgpU7H2z1D_R-Ug%40mail.gmail.com.
