最近、2 フェーズ インジェクションに切り替えたところ、サーブレット バインディングでエラーが発生しました。現在、2 つのエラー モードを切り替えていますが、どちらの方向に進むのが最適かわかりません。
最初に遭遇したエラーは次のとおりです。
com.sun.jersey.api.container.ContainerException: ResourceConfig インスタンスにルート リソース クラスが含まれていません。
私のサーブレットモジュールは次のようになりました:
public class MyServletModule extends JerseyServletModule {
@Override
protected void configureServlets() {
bind(MyServlet.class).asEagerSingleton();
serve("/*").with(GuiceContainer.class);
}
}
com.sun.jersey.config.property.packages パラメータを明示的に指定することで、このエラーを取り除くことができました。
public class MyServletModule extends JerseyServletModule {
@Override
protected void configureServlets() {
bind(MyServlet.class).asEagerSingleton();
Map<String,String> parameters = new HashMap<String, String>();
parameters.put(PackagesResourceConfig.PROPERTY_PACKAGES, MyServlet.class.getPackage().getName());
serve("/*").with(GuiceContainer.class, parameters);
}
}
しかし、これを行うと、Guice は、サーブレット コンストラクターで @Inject を尊重しないジャスト イン タイム バインディングを試みます。
com.google.inject.ConfigurationException: Guice 構成エラー:
1) MyServlet のバインドを作成できません。MyServletModule.configureServlets(MyServletModule.java:44) でバインドされた 1 つ以上の子インジェクターまたはプライベート モジュールで既に構成されていました。それが PrivateModule にあった場合、バインドを公開するのを忘れましたか? MyServlet の検索中
com.google.inject.internal.InjectorImpl.getBinding(InjectorImpl.java:150) で 1 エラー
私のサーブレットには、引数のジャスト イン バインドができない @Inject コンストラクターがあります。InjectorImpl にデバッグした後、これが PROPERTY_PACKAGES を使用すると失敗する理由だと思います。
PROPERTY_PACKAGES の使用が正しいかどうかわからないので、いくつかのバインディングを修正する必要がありますか? または、それが間違った方向であり、元の ResourceConfig エラーを別の方法で修正する必要がある場合。
ヘルプまたは正しい方向へのプッシュを歓迎します。