Javassist - добавление аннотации к классу не работает с отражениями - PullRequest
2 голосов
/ 17 мая 2011

Я создаю класс с использованием javassist и добавляю к нему аннотацию. Когда я использую CtClass.writeFile и вижу файл класса с декомпилятором Java, аннотация присутствует, но когда я использую class.getAnnotations () или class.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);

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

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

1 голос
/ 15 июня 2016

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

Аннотация является абстрактной; невозможно создать экземпляр

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

импорт javassist.bytecode.annotation.Annotation;

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

...