在一個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資源中注入)?
非常感謝!你知道我如何用Maven測試它嗎? – 2011-06-22 07:51:28
等待2011-06-23發佈的RESTEasy 2.1.1 – 2011-06-22 16:50:20