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

Я создаю класс с помощью 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);

person Bruno    schedule 17.05.2011    source источник


Ответы (2)


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

person Bruno    schedule 18.05.2011

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

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

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

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

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

person rakwaht    schedule 15.06.2016