Я использую Spring Security 3.1.0.RC3, потому что возможность защищать методы с привилегиями enum была введена в 3.1.
Вот моя аннотация:
public @interface SecuredEnum
{
public PrivilegeEnum[] value();
}
А вот как я это использую:
import static somepath1.PrivilegeEnum.SOME_PRIV1;
public interface MyService extends BaseService {
@SecuredEnum(SOME_PRIV1)
void insertOrUpdateMyObject(MyObject myObject);
}
javac правильно компилирует этот код каждый раз, но компилятор eclipse (Indigo SR1) выдает ошибку после Project -> Clean:
The attribute value is undefined for the annotation type SecuredEnum
и предлагает быстрое решение:
Create attribute 'value()'
Итак, вот мой обходной путь: я применяю это исправление и закомментирую поле массива в аннотации:
public @interface SecuredEnum
{
// public PrivilegeEnum[] value();
public PrivilegeEnum value();
}
После этого eclipse правильно компилирует все классы (кроме тех, где @SecuredEnum имеет две или более привилегий). Следующий шаг - раскомментировать старое поле массива и удалить новое поле, созданное с помощью быстрого исправления. В результате все отлично скомпилировано.
Так что это довольно неприятно делать каждый раз, когда проект очищается. Другая проблема заключается в том, что я не могу воспроизвести эту проблему в примере проекта, поэтому, возможно, в этом тексте вопроса отсутствует некоторая важная информация.
Чья это ошибка и как ее можно исправить?
UPDATE:
ни использование явного массива в аргументе аннотации (т.е. добавление скобок {}), ни явное определение имени аргумента ('значения'), ни использование полностью определенного значения перечисления вместо статического импорта помогает