2011-06-14 85 views
3

在一個JSF 2.0應用程序(運行在Tomcat 7上並使用weld 1.1.1.Final)中,我想建議我的用戶下載一些二進制文件.doc,.pdf等)。在Tomcat中使用JAX-RS(RESTEasy)和CDI(焊接)7

爲了滿足這個需求,我想使用JAX-RS(RESTEasy 2.2.0.Final)資源bean(註解爲@Path)。問題是,在該bean內部,我想從註釋爲@Inject的註釋字段調用服務。

其實,就像a weld user trying a similar thing我有NullPointerException:焊接不會給我注入我的服務。

所以我讀a post on JBoss community wiki talking about how to integrate RESTEasy with CDI所以我做了我的Maven戰爭項目依賴於org.jboss.resteasy:resteasy-cdi,這裏是我的web.xml

<!-- Weld --> 
<resource-env-ref> 
    <description>Object factory for the CDI Bean Manager</description> 
    <resource-env-ref-name>BeanManager</resource-env-ref-name> 
    <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type> 
</resource-env-ref> 
<listener> 
    <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class> 
</listener> 
<filter> 
    <filter-name>ConversationPropagationFilter</filter-name> 
    <filter-class>org.jboss.weld.servlet.ConversationPropagationFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>ConversationPropagationFilter</filter-name> 
    <url-pattern>*</url-pattern> 
</filter-mapping> 

<!-- Resteasy --> 
<listener> 
    <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class> 
</listener> 
<servlet> 
    <servlet-name>Resteasy</servlet-name> 
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class> 
</servlet> 
<context-param> 
    <param-name>resteasy.injector.factory</param-name> 
    <param-value>org.jboss.resteasy.cdi.CdiInjectorFactory</param-value> 
</context-param> 
<context-param> 
    <param-name>resteasy.scan</param-name> 
    <param-value>true</param-value> 
</context-param> 
<servlet-mapping> 
    <servlet-name>Resteasy</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 
<context-param> 
    <param-name>resteasy.servlet.mapping.prefix</param-name> 
    <param-value>/rest</param-value> 
</context-param> 

現在的問題是,當我的應用程序白手起家,我已經得到了例外:

java.lang.RuntimeException: Unable to instantiate InjectorFactory implementation. 
    at org.jboss.resteasy.spi.ResteasyDeployment.start(ResteasyDeployment.java:141) 
    at org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap.contextInitialized(ResteasyBootstrap.java:28) 
... 
Caused by: java.lang.NullPointerException 
    at org.jboss.resteasy.cdi.CdiInjectorFactory.lookupBeanManager(CdiInjectorFactory.java:116) 
    at org.jboss.resteasy.cdi.CdiInjectorFactory.<init>(CdiInjectorFactory.java:41) 
... 
    at java.lang.Class.newInstance(Class.java:308) 
    at org.jboss.resteasy.spi.ResteasyDeployment.start(ResteasyDeployment.java:133) 

當我刪除resteasy.injector.factory的context-param,我試圖從外地瓦里我的服務時,得到了一個NPE能夠註釋爲@Inject ...

有誰知道如何配置RESTEasy bean以便由Weld管理(並且可以在JAX-RS資源中注入)?

回答

3

該問題已解決在RESTEasy中繼。詳情請參閱https://issues.jboss.org/browse/RESTEASY-558

+0

非常感謝!你知道我如何用Maven測試它嗎? – 2011-06-22 07:51:28

+0

等待2011-06-23發佈的RESTEasy 2.1.1 – 2011-06-22 16:50:20

0

如果您有機會並付出努力是合理的:請嘗試使用與JBoss AS 6相同的方案。如果有效,您可能會確定配置問題。如果失敗,一個類似的(或等於)異常,你就知道它的焊接責怪;-)

兩種結果至少應該給你一個方向,其中旁邊看......