The fact that the reflection returns a proxy object does not prevent you from gathering information about the annotation and its values.

The getclass method returns a proxy object:

 log.info("annotation class:" + annotation.getClass());
Output: 
 
 [INFO] annotation class:class com.sun.proxy.$Proxy16class 


The output is that same as in your example, but that is no problem. Having the method (or field) is enough. The additional part is to **just invoke the annotation method**.


 public void analyseClass(Class myClass) {

 for (Method method: myClass.getMethods()) {
 System.out.println("aanotations :" + Arrays.toString(field.getAnnotations()));

 for (Annotation annotation : method.getAnnotations()) {
 
 log.info("annotation class:" + annotation.getClass());
 log.info("annotation class type:" + annotation.annotationType());

 Class<Annotation> type = (Class<Annotation>) annotation.annotationType();
 
 /* extract info only for a certain annotation */
 if(type.getName().equals(MyAnnotation.class.getName())) {
 
 String annotationValue = 
 (String) type.getMethod("MY_ANNOTATION_CERTAIN_METHOD_NAME").invoke(annotation);
 
 log.info("annotationValue :" + annotationValue);
 break;
 }
 }
 }

 //do the same for the fields of the class
 for (Field field : myClass.getFields()) {
 //...
 }

 } 

To come to this solution, I used the following post: 
https://stackoverflow.com/questions/20362493/how-to-get-annotation-class-name-attribute-values-using-reflection