2011-12-06 85 views
4

我使用Spring Security 3.1.0.RC3,因爲在3.1中引入了具有枚舉權限的方法的可能性。Eclipse編譯器說,屬性未定義的情況下,在枚舉字段數組的情況下

這裏是我的註解:

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(靛藍SR1)編譯器會發出後一個錯誤項目 - >清潔:

The attribute value is undefined for the annotation type SecuredEnum  

,並建議速戰速決:

Create attribute 'value()' 

因此,這裏是我的解決方法:正確

public @interface SecuredEnum 
{ 
    // public PrivilegeEnum[] value(); 

    public PrivilegeEnum value(); 
} 

之後日食編譯所有類(除了那些@SecuredEnum有兩個:我應用此修復程序,並在註釋註釋掉陣列場或更多特權)。下一步是取消註釋舊數組字段並刪除快速修復創建的新字段。因此,一切都完美編譯。 因此,每次清理項目時都很煩人。另一個問題是,我無法用示例項目重現此問題,因此可能存在此問題文本中缺少的重要信息。 這是誰的錯誤,以及如何修復它?

UPDATE: 既不在註釋參數使用顯式陣列(即加括號{}),也沒有定義的參數名稱(「值」)明確,也沒有使用完全合格的枚舉值,而不是靜態的進口有助於

+0

其他的答案並沒有幫助我。只有解決方案爲我工作是從日食juno切換回日食靛藍。它解決了這個問題。 – sertug

回答

0

莫非是保留策略的問題,您尚未在自定義註釋中定義該保留策略。所以保留策略默認爲類。它應該是運行時的,至少這就是Spring Security人員用於@Secured註釋的內容。

@Retention(RetentionPolicy.RUNTIME) 
@Target({ElementType.TYPE, ElementType.METHOD})  
public @interface SecuredEnum { 
    public PrivilegeEnum[] value(); 
} 
+0

它的工作方式,雖然我不使用Eclipse。所以我想你的問題是由於IDE ... – hub

0

隨着我只是需要改變的Eclipse的Juno(4.2)(插入空白,刪除空白),並保存爲誤報的文件,以擺脫「未定義值」錯誤的。

我不得不這樣做一次,每次我更改編譯器設置時間,但隨後就消失了,直到然後...

相關問題