嘗試使用javax.imageio.spi.ServiceRegistry
動態註冊請求處理器爲HttpServlet
:ServiceRegistry構造失敗,並拋出ClassCastException混凝土類
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()的返回值分配給了一個無類型的迭代器,而後者又被傳遞給ServiceRegistry
的構造器。這種技術給我同樣的錯誤。
最後,我在Eclipse Gallileo(build 20100218-1602)中運行此操作,如果這很重要的話。
問候, 德魯
感謝您抽出寶貴時間來回答。 雖然我可以通過registerServiceProviders()手動添加類,但我期待利用ServiceRegistry.lookupProviders()提供的automagic類識別優勢。我認爲ServiceRegistry中的迭代器(迭代器>)預計將成爲要註冊的類的列表;它是在尋找接口嗎? –
Werd
2010-07-22 13:28:12
但事實是,構造函數(Iterator>)不是供提供者註冊的,而是提供者的類別。 –
yclian
2010-07-22 13:32:14
謝謝,現在我明白了。 我會+1你的答案,但我還不配。 :( – Werd 2010-07-22 13:42:15