2015-11-05 88 views
1

所以我有一個RequestScoped bean,我試圖使用Context註釋來注入UriInfo。該應用程序是在Wildfly 8上運行的基於JAX-RS的RESTful Web服務(並且隨後易於使用)。如果我將UriInfo注入資源本身,它將正確注入。如果我嘗試將它注入任何注入的孩子,它將不會注入並結束爲空。Wildfly 8/JAX-RS:當注入RequestScoped bean時,UriInfo爲空

這對我在Web Sphere 8.5上工作...但現在它不適用於Wildfly 8.任何想法?源代碼是https://github.com/rpg-maker-repo/rmmv-api。資源是「com.trinary.rpgmaker.resource.PluginResource」,我注入UriInfo的地方是「com.trinary.rpgmaker.service.LinkGenerator」。目前我已經刪除了注入的UriInfo,並將實現它的代碼註釋掉了。我嘗試了很多方法來嘗試注入它們,但都沒有工作。

回答

1

所以,你有一個JAX-RS資源A中注入一個CDI豆B並要使用@Context注入UriInfoB

Java EE規範中是否有任何參考指出這應該起作用?

我不這麼認爲。

@Context特定於JAX-RS,未在CDI 1.2規範中提及。它不被CDI支持(不像@PersistenceContext,@Resource和其他遺留注射)。

0

你可以嘗試使用Provider它訪問@Context:Altough我不知道這是很好的做法,

@javax.ws.rs.ext.Provider 
public class ContextInformationProducer { 
    @Produces 
    @RequestScoped 
    public ContextInformation create() { 
     ContextInformation contextInformation = new ContextInformation(); 
     contextInformation.setBrowserUserAgent(httpHeaders.getHeaderString("User-Agent")); 
} 

對此我有以下問題: Using @Context in JAX-RS Provider to provide context information to CDI beans

4

是, jaxrs-cdi集成沒有完全指定,並且實現可以自由地將其增強到他們想要的程度。 Jersey(例如glassfish)具有非常強大的集成功能,您可以將jaxrs的@Context注入到cdi beans中(請參閱http://hnusfialovej.cz/2015/02/25/jersey-further-improves-cdi-integration/)。 Resteasy的(例如Wildfly)集成並不是那麼直截了當,但是你可以通過jaxrs提供者將UriInfo注入到cdi bean中(參見http://blog.christianbauer.name/Accessing%20request%20details%20with%20JAX-RS%20and%20CDI/)(在wfly 10上測試)。

+0

這樣做的竅門!非常感謝你的回覆!我以爲我只是一時糊塗=)。 – deusprogrammer

相關問題