Ich verwende Spring Security 3.1.0.RC3, weil die Möglichkeit, Methoden mit Enum-Privilegien zu sichern, in 3.1 eingeführt wurde.
Hier ist meine Anmerkung:
public @interface SecuredEnum
{
public PrivilegeEnum[] value();
}
Und so verwende ich es:
import static somepath1.PrivilegeEnum.SOME_PRIV1;
public interface MyService extends BaseService {
@SecuredEnum(SOME_PRIV1)
void insertOrUpdateMyObject(MyObject myObject);
}
javac kompiliert diesen Code jedes Mal korrekt, aber eclipse (Indigo SR1) Compiler gibt einen Fehler nach Project -> Clean:
The attribute value is undefined for the annotation type SecuredEnum
und schlägt eine schnelle Lösung vor:
Create attribute 'value()'
Hier ist also meine Abhilfe: Ich wende diesen Fix an und kommentiere das Array-Feld in der Annotation aus:
public @interface SecuredEnum
{
// public PrivilegeEnum[] value();
public PrivilegeEnum value();
}
Danach kompiliert eclipse alle Klassen korrekt (außer denen, bei denen @SecuredEnum zwei oder mehr Privilegien benötigt). Der nächste Schritt besteht darin, das alte Array-Feld zu entfernen und das neue Feld zu löschen, das durch die Schnelllösung erstellt wurde. Das Ergebnis ist, dass alles perfekt kompiliert wird. Es ist also ziemlich lästig, dies jedes Mal zu tun, wenn das Projekt bereinigt wird. Ein weiteres Problem ist, dass ich dieses Problem nicht mit einem Beispielprojekt reproduzieren kann, so dass vielleicht einige wichtige Informationen in diesem Fragetext fehlen. Um welchen Fehler handelt es sich und wie kann man ihn beheben?
UPDATE: Weder die Verwendung eines expliziten Arrays im Anmerkungsargument (d.h. das Hinzufügen von { } Klammern), noch die explizite Definition des Argumentnamens ("Wert") oder die Verwendung eines voll qualifizierten Enum-Werts anstelle eines statischen Imports sind hilfreich