2011-06-14 52 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相同的方案。如果有效,您可能会确定配置问题。如果失败,一个类似的(或等于)异常,你就知道它的焊接责怪;-)

两种结果至少应该给你一个方向,其中旁边看......