2013-12-19 33 views
0

我有一個REST資源類(所以需要監聽來自Web的傳入REST連接),它需要訪問託管bean庫控制器。 但是,當我調用一個空指針異常。REST資源中的JSF託管屬性注入null

@ApplicationPath("webresources") 
@Path("/record") 
@Stateless 
public class RecordResource 
{ 
    @ManagedProperty(value = "#{libraryController}") // this references the @ManagedBean named libraryController 
    private LibraryController libraryController; 

    @POST 
    @Path("/upload") 
    @Consumes(MediaType.MULTIPART_FORM_DATA) 
    public Response uploadWeb(InputStream inputStream) 
    { 
     //Null exception below ! 
     getLibraryController().function(); 
    } 

    public LibraryController getLibraryController() 
    { 
     return libraryController; 
    } 

    public void setLibraryController(LibraryController libraryController) 
    { 
     this.libraryController = libraryController; 
    } 
} 

getters/setters是好的,所以我不知道爲什麼沒有調用LibraryController的正確構造函數。

回答

2

注入失敗,因爲客戶端類不是@ManagedBean,因此容器沒有RecordResource內的JSF上下文的概念。

請參閱this question作進一步說明。

作爲一種解決方法,請考慮使用@EJB控制器並通過@EJB註釋進行注入。否則,請解釋這個設計背後的商業邏輯。

+0

這是有道理的,我也只是認識到@ManagedBean註釋是goind不贊成CDI注入。所以我將不得不回顧這個項目的所有當前結構。 – dendini