Я не пробовал это решение, однако, просматривая Интернет, единственное, что я нашел по этой теме, было решение, предложенное на форуме разработчиков JBoss, которое вы можете найти здесь.
В соответствии с этим решением они узнали, распечатав аннотации из обычного класса, что значение — это имя, которое нужно использовать.
Поэтому я предлагаю вам попробовать это решение, а затем опубликовать здесь в этом ответе, если это сработало для вас.
a = new Annotation("WebResult", cpp);
a.addMemberValue("value", new StringMemberValue("TransactionAttributeType.NOT_SUPPORTED", cpp));
attr.addAnnotation(a);
PS: я также предлагаю указать полное имя атрибута, просто чтобы убедиться, что компилятор времени выполнения правильно его понимает (например, com.my.package.TransactionAttributeType.NOT_SUPPORTED
)
РЕДАКТИРОВАТЬ
Как мы заметили, предлагаемое решение заключается в добавлении свойства в аннотацию в виде строки new StringMemberValue("...")
, ведущей к такому результату:
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
Однако это может быть неправильным решением, если ваш параметр должен отличаться от строки. Вот почему вы должны посмотреть здесь к документации MemberVale в Javassist, где вы можете найти все подтипы, которые вы можете использовать.
Например, если вашим параметром является класс Java, вы должны сделать что-то вроде этого:
a.addMemberValue("value",
new ClassMemberValue("com.package.classname", cpp));
Или, если ваш член является перечислением, вы можете добавить его в свою аннотацию примерно так:
EnumMemberValue emv = new EnumMemberValue(cpp);
emv.setType("TransactionAttributeType");
emv.setValue("NOT_SUPPORTED");
a.addMemberValue("value", emv);
person
rakwaht
schedule
10.03.2017