SpringとJerseyの両方を使用するServlet 3.0 Webアプリケーションがあります。私は現在、web.xmlのフィルタとして設定されたSpringServletと、@Path
と@Component
の両方で注釈が付けられたリソースクラスを使用して設定しています。ここでのweb.xmlの抜粋です:Annotationのみを使用してSpringでJerseyを設定する方法
<filter>
<filter-name>jersey-serlvet</filter-name>
<filter-class>
com.sun.jersey.spi.spring.container.servlet.SpringServlet
</filter-class>
<init-param>
<param-name>
com.sun.jersey.config.property.packages
</param-name>
<param-value>com.foo;com.bar</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.feature.FilterForwardOn404</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jersey-serlvet</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
このセットアップは動作しますが、私は本当にこれが唯一の注釈で設定を取得したい - なしのweb.xmlの設定。私の最初の試みは、上記のSpringServlet設定を削除し、Application
を拡張するクラスを作成することでした。ここではその抜粋です:
@ApplicationPath("/*")
public class MyApplication extends PackagesResourceConfig {
public MyApplication() {
super("com.foo;com.bar");
HashMap<String, Object> settings = new HashMap<String, Object>(1);
settings.put(ServletContainer.FEATURE_FILTER_FORWARD_ON_404, true);
this.setPropertiesAndFeatures(settings);
}
}
これは、JAX-RSリソースが登録されていることで動作し、私はそのURLでそれらを打つことができますが、彼らは試してみて、自分のautowiredプロパティを使用するとき、彼らはNullPointerExceptionsがを投げる...これは作りますなぜなら、リソースは現在Jerseyによってロードされており、Spring管理beanではないと推測しているので、autowiringはありません。
Jerseyのリソースを注釈付きのSpring Beanとしてロードする方法はありません。 このような方法がありますか? Springコンテキストを手動でフェッチし、私がそれを助けることができるなら、DIを呼び出すためのリソースのコードを書く必要はありません。
注釈のみが動作しない場合、スキャンするパッケージのリストの代わりにApplication
クラスを指定することができれば、web.xmlにフィルタ設定で保存できます。私がパッケージリストを取り除いてApplication
クラスインスタンスを指定することができれば、私は満足できるでしょう。
明らかに誰かが私にとって決定的な答えを持っていれば素晴らしいかもしれませんが、私は他にどこに見えるか、試してみるべき点やヒントについても感謝しています。
おかげで、 マット
おかげ
Hibernate設定が、私はニュージャージー1使用していると私はトラブルになっていない:
config.package
で設定クラスがありますJerseyのリソースがロードされ実行されています。私がautowiringするように、私はそれらが春に管理されることが問題です。 – Doughnuts
この場合、これはあなたにとって解決策ではありません。しかし、これはSpringのautowiringを可能にします。 – rustyx