質問

javax.imageio.spi.ServiceRegistryを使用してHttpServletのリクエストプロセッサを動的に登録しようとしています:

    private static final Class PROVIDER_CLASS = IRequestProcessor.class;

 private void loadProviders() throws ClassNotFoundException {
  _serviceRegistry = new ServiceRegistry(ServiceRegistry.lookupProviders(PROVIDER_CLASS));
 }
.

私が得るエラーは次のとおりです:

 java.lang.ClassCastException: org.confused.servlet.GetStandardCodesProcessor
javax.imageio.spi.ServiceRegistry.<init>(ServiceRegistry.java:103
org.confused.servlet.MyServlet.loadProviders(.java:100)
 org.confused.servlet.MyServlet.checkProviders(.java:106)
 org.confused.servlet.MyServlet.service(.java:44)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
.

クラスGetStandardCodesProcessorIRequestProcessorを実装しています。 Call ServiceRegistry.lookupProviders()は、ファイルMETA-INF/services/org.confused.servlet.IRequestProcessorからクラスのリストを取得しています。 それは私がServiceRegistry.lookupProviders()からイテレータに渡す方法についてのニュアンスがありません。

このページは、私がしていることをかなり多く示しています。lookupproviders()からの戻り値をuntyped reteratorに割り当てますが、これはServiceRegistryコンストラクタに渡されます。その技術は私に同じエラーを与えます。

最後に、それが重要であれば、私はこれをEclipse Gallileo(Build 20100218-1602)で実行しています。

ドリュー

役に立ちましたか?

解決

私は API Documentation ServiceRegistryのコンストラクタは、プロバイダではなくカテゴリを含むIteratorを取ります。代わりにProviesにregisterServiceProviders()を登録することをお勧めします。

他のヒント

YLIAN、「頭の上のボンク」をありがとう。

コンストラクタは確かに「カテゴリ」のリストを期待しており、これはレジストリが検索できるインタフェースです。私がその部分を修正したら、あなたが言ったように奉仕者に移住したら、残りは素晴らしい作品です。

新しいコード:

private void loadProviders() throws ClassNotFoundException {
    Iterator iterCategories = (Collections.singletonList(PROVIDER_CLASS)).iterator();
    _serviceRegistry = new ServiceRegistry(iterCategories);
    _serviceRegistry.registerServiceProviders(ServiceRegistry.lookupProviders(PROVIDER_CLASS));
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top