동적으로 HttpServlet
에 대한 요청 프로세서를 등록 javax.imageio.spi.ServiceRegistry
를 사용하려고 구상 클래스에 ClassCastException이 실패합니다되어 ServiceRegistry 생성자는
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
을 구현합니다. META-INF/services/org.confused.servlet.IRequestProcessor
파일에서 을 호출하면 클래스 목록이 표시됩니다. ServiceRegistry.lookupProviders()
에서 이터레이터를 전달하는 방법에 대한 미묘한 차이가 누락 된 것 같습니다.
This page은 lookupProviders()에서 반환되는 유형화되지 않은 반복기에 할당되는 것은 아니지만 내가 수행하고있는 것을 거의 보여줍니다.이 반복자는 ServiceRegistry
생성자로 전달됩니다. 그 기술은 나에게도 같은 오류를 준다.
마지막으로 Eclipse Gallileo (빌드 20100218-1602)에서이 문제를 해결하려고합니다.
감사합니다, 드류
감사합니다. registerServiceProviders()를 통해 클래스를 '수동으로 추가'할 수 있지만 ServiceRegistry.lookupProviders()가 제공하는 automagic 클래스 인식을 활용하려고했습니다. ServiceRegistry의 Iterator (Iterator>)가 등록 할 클래스 목록이 될 것으로 예상됩니다. 대신 인터페이스를 찾고 있습니까? –
Werd
사실, 생성자 (Iterator>)는 공급자가 공급자를 등록하기위한 것이 아니라 공급자 범주를 의미합니다. –
yclian
감사합니다. 이제는 이해합니다. 답변을 +1 하겠지만 아직 가치가 없습니다. ( – Werd