ジャージー: 1.12 春: 3.11 JDK: 1.6.0_35 Tomcat: 6..0.33
SpringServlet のコンテキストで Spring IoC コンテナーによってインスタンス化された Jersey サーブレットの ExceptionMapper インスタンスを登録しようとしていますが、Jersey サーブレット中に古い「コンポーネント クラス X のスコープはシングルトンでなければなりません」という例外が発生しています。初期化。現時点では実際のコードを投稿する立場にないので、実装の要点を示して、誰かに明らかな何かが飛び出すかどうか、または私が持っているドキュメントを指摘できるかどうかを確認します。逃した。
ExceptionMapper インスタンスは基本的に次のとおりです。
// ... package definitions omitted ...
@Provider
@Singleton
public class MyExceptionMapper
implements ExceptionMapper<MyException>
{
// ... injected attributes omitted ...
@Override
public Response toResponse(MyException exception)
{
// ... specific handling logic omitted ...
return Response.status(Status.BAD_REQUEST).entity(exception.getMessage()).build();
}
}
applicationContext.xml の Bean 定義は次のとおりです。デフォルトはシングルトン スコープです (明示的なスコープ指定子を追加しても動作は変わらないようです)。
<bean id="myExceptionMapper" class="my.package.MyExceptionMapper" />
web.xml の Spring コンテキスト ローダー リスナーと SpringServlet 構成は基本的にボイラープレートであり、MyExceptionMapper の Bean 定義が applicationContext.xml からコメント アウトされている場合、サーブレットは他の注入属性を使用して適切にロード、初期化、および動作します。しかし、Bean 定義が applicationContext.xml に存在する場合、次のようなログ メッセージが表示されます。
SpringProviderFactory - Registering Spring bean, myExpectionMapper, of type my.package.MyExceptionMapper as a provider class
SpringProviderFactory - Registering Spring bean, myServiceController, of type my.package.MyServiceController as a root resource class
... other root resource classes loading ...
SpringServlet - Exception occurred when initialization
java.lang.RuntimeException: The scope of the component class my.package.MyExceptionMapper must be a singleton
at som.sun.jersey.core.spi.component.ioc.IoCProviderFactory.wrap(...)
初期化中に SpringServlet によって取得されるように、スキャンされたパッケージ階層に MyExceptionMapper を配置しようとしましたが、別のパッケージ階層に配置しようとしましたが、結果は変わりません。
これに関する支援やガイダンスをいただければ幸いです。