Javassist-добавление аннотации к классу не работает на отражениях



Я создаю класс с помощью javassist и добавляю к нему аннотацию. Когда я использую CtClass.writeFile и я вижу class file с Java decompiler аннотация есть, но когда я использую class.getAnnotations () или класс.getDeclaredAnnotations () список пуст.



ClassPool pool = ClassPool.getDefault();
pool.insertClassPath(new ClassClassPath(cl.loadClass("javax.jws.WebService")));
CtClass pikoClass = pool.makeClass("br.com.stuff.Piko");
ConstPool constPool = pikoClass.getClassFile().getConstPool();
AnnotationsAttribute attr = new AnnotationsAttribute(constPool, annotationsAttribute.visibleTag);
Annotation annoWebService = Annotation(constPool, pool.get("javax.jws.WebService"));
attr.setAnnotation(annoWebService);
pikoClass.getClassFile().addAttribute(attr);
Class piko = pikoClass.toClass();
piko.getDeclaredAnnotations(); // this is always empty
// Also tried
Annotation annoWebService = new Annotation("WebService", constPool);
Annotation annoWebService = new Annotation("@WebService", constPool);
Annotation annoWebService = new Annotation("javax.jwsWebService", constPool);
Annotation annoWebService = new Annotation("@javax.jwsWebService", constPool);
615   2  

2 ответов:

Проблема решена, я использовал версию 3.1, теперь я использую 3.12.1.GA (последний на Maven repository) и на этой версии аннотации работает.

Может быть, я тупой, и это бесполезный ответ, но если вы получаете ошибку, которая говорит

Аннотация абстрактна; не может быть создана

Не забудьте проверить импорт и убедитесь, что вы импортируете правильную аннотацию:

Импорт javassist.байткод.аннотация.Аннотация;

И не ошибочная библиотека, автоматически импортированная Eclipse, которая заставила меня потратить двадцать минут моей жизни (java.яз..аннотация.Аннотация )

Comments

    Ничего не найдено.