У меня есть пользовательская аннотация, называемая @Pojo, которую я использую для создания автоматической вики-документации:
package com.example.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.METHOD)
public @interface Pojo {
Class<?> value();
}
Я использую его следующим образом:
@Pojo(com.example.restserver.model.appointment.Appointment.class)
для аннотации метода ресурса, чтобы обработчик аннотации мог автоматически генерировать страницу вики, описывающую ресурс и тип, который он ожидает.
Мне нужно прочитать значение поля value
в обработчике аннотаций, но я получаю ошибку времени выполнения.
В исходном коде для моего процессора у меня есть следующие строки:
final Pojo pojo = element.getAnnotation(Pojo.class);
// ...
final Class<?> pojoJavaClass = pojo.value();
но фактический класс недоступен для процессора. Думаю, мне нужен javax.lang.model.type.TypeMirror
вместо этого как суррогат для настоящего класса. Я не уверен, как его получить.
Ошибка, которую я получаю:
javax.lang.model.type.MirroredTypeException: Attempt to access Class object for TypeMirror com.example.restserver.model.appointment.Appointment
Appointment
- это класс, упомянутый в одной из моих аннотаций @Pojo
.
К сожалению, документация и/или учебники по обработке аннотации Java кажутся скудными. Пробовал поиск в Интернете.