4

JSF 2.0アプリケーション(Tomcat 7で実行され、weld 1.1.1.Finalを使用)で、いくつかのバイナリファイル(.doc、.pdfなど)をダウンロードするようにユーザーに提案したいと思います。

そのニーズを満たすために、JAX-RS(RESTEasy 2.2.0.Final)リソースBean(注釈付き)を使用したいと思います@Path。問題は、そのBean内で、@Injectアノテーションが付けられたフィールドからサービスを呼び出したいということです。

実際、同じようなことを試みている溶接ユーザーのように、私はNullPointerException:溶接は私のサービスを注入しません。

そこで、RESTEasyをCDIと統合する方法について話しているJBossコミュニティwikiの投稿を読んだので、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.factorycontext-paramを削除すると、 ...NPEで注釈が付けられたフィールド変数からサービスを取得しようとすると、が発生します。@Inject

Weldによって管理されるようにRESTEasyBeanを構成する方法(およびJAX-RSリソースへのインジェクションを可能にする方法)を知っている人はいますか?

4

2 に答える 2

3

これは RESTEasy トランクで修正されました。詳細はhttps://issues.jboss.org/browse/RESTEASY-558を参照してください。

于 2011-06-21T13:55:58.567 に答える
0

機会があり、努力が合理的である場合: JBoss AS 6 で同じシナリオを試してください。同様の(または同等の)例外で失敗した場合、それは Weld の責任であることがわかります;-)

どちらの結果も、少なくとも次の方向性を示すはずです...

于 2011-06-15T19:13:04.860 に答える