尝试使用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)


GetStandardCodesProcessor实现IRequestProcessor
呼叫ServiceRegistry.lookupProviders()从文件META-INF/services/org.confused.servlet.IRequestProcessor获取类列表。
似乎我缺少关于如何从ServiceRegistry.lookupProviders()传递迭代器的细微差别。

This page几乎显示了我在做什么,尽管将lookupProviders()的返回值分配给了无类型的Iterator,然后将其传递给了ServiceRegistry构造函数。该技术给我带来了同样的错误。

最后,如果重要的话,我将在Eclipse Gallileo(内部版本20100218-1602)中运行它。

问候,
德鲁

最佳答案

我以前从未使用过此SPI类,但是,从API documentation中,ServiceRegistry的构造函数接受具有类别而不是提供程序的Iterator。您可能想用registerServiceProviders()注册提供商?

10-05 17:46