尝试使用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()
注册提供商?