Spring と Jersey の両方を使用する Servlet 3.0 Web アプリがあります。@Path
現在、web.xml でフィルターとして構成された SpringServlet と、 と の両方で注釈が付けられたリソース クラスを使用してセットアップしています@Component
。web.xml スニペットは次のとおりです。
<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 をヒットできるという点で機能しますが、自動配線されたプロパティを使用しようとすると NullPointerExceptions がスローされます... リソースが現在ロードされていると推測しているため、これは理にかなっていますJersey であり、Spring 管理の Bean ではないため、自動配線はありません。
かなりの検索にもかかわらず、Jersey リソースを Spring Bean としてアノテーションのみでロードする方法が見つかりません。 そのような方法はありますか? リソースが Spring コンテキストを手動でフェッチして DI を呼び出すために、できる限り多くのコードを作成する必要はありません。
Application
注釈のみが機能しない場合は、スキャンするパッケージのリストの代わりにロードするクラスを指定できれば、web.xml のフィルター構成を使用できます。そこにあるパッケージ リストを削除して、Application
クラス インスタンスを指定するだけで十分です。
明らかに、誰かが私に決定的な答えを持っていれば素晴らしいことですが、他にどこを見ることができるか、または試してみるべきことの指針やヒントにも感謝します.
ありがとう、マット