Brian Cullen created AVRO-3010:
----------------------------------

             Summary: Support for Meta Annotations when using Schema 
Annotations on Java Objects
                 Key: AVRO-3010
                 URL: https://issues.apache.org/jira/browse/AVRO-3010
             Project: Apache Avro
          Issue Type: Improvement
          Components: java
            Reporter: Brian Cullen


I'd like to propose (and offer to implement) support for meta annotations when 
using the schema annotations from the org.apache.avro.reflect package to 
generate schemas from Java POJOs. 

As a simple example from my use case consider a object that could hold a number 
of optional UUIDs. Currently I would probably annotate it as follows.
{code:java}
@AvroMeta(key = "logicalType", value = "UUID")
@Nullable
private String someUUID;
{code}
Whereas if the use of meta annotation were allowed you could define an 
annotation along these lines to use instead.
{code:java}
@AvroMeta(key = "logicalType", value = "UUID")
@Nullable
public @interface OptionalUUID {

}
{code}
An additional benefit is where custom annotations are already being used on the 
class for validation or persistence purposes these annotation could be updated 
without having to change the annotated code at all.

I have experimented with this idea in the code base and it does appear to work, 
although there are some details that would need to be confirmed. The changes 
required involve changing how annotation are accessed in the ReflectData class 
and updating the target annotation of the existing annotations to include 
ElementType.ANNOTATION_TYPE, so that they can be applied to other annotations.

On the surface this change does not appear to be a large one and should not 
affect existing functionality. It would however give developers the ability to 
cut down on repeated code if they are using annotation a lot.

Do you think this fits in with the rest of the system or are there issues that 
I'm not aware of?

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to