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 <https://github.com/leangen/geantyref>, a fork 
of GeTyRef (a library similar to ClassMate), that deeply supports working 
with AnnotatedTypes.
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.



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] 
> <javascript:>> 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] <javascript:>. 
> > To post to this group, send email to [email protected] 
> <javascript:>. 
> > 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.

Reply via email to