문제

하려고 사용 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().

이 페이지 쇼 꽤 많은 내가 무슨 일을,이기는 하지만 할당하는 반환에서 lookupProviders()에서 형식화되지 않은 반복기,서 얻을 전달 ServiceRegistry 생성자입니다.는 기술을 제공합 같은 오류가 나를 위해.

마지막으로,실행하고 이에 Eclipse Gallileo(빌 20100218-1602),경우에는 문제입니다.

감사합니다, 린

도움이 되었습니까?

해결책

나는 사용하지 않은 이 SPI 클래스하기 전에,그러나, API 설명서, 생성자의 ServiceRegistry 에 걸리 Iterator 카테고리,지 않 공급자입니다.할 수 있습 등록하려는 귀하의 공급자 registerServiceProviders() 까요?

다른 팁

yclian,감사"와 플레에서"머리.

생성자를 실제로 기대 목록의'종류',는 인터페이스 는 레지스트리를 검색 할 수 있습니다.면 나는 수정되는 부분을,그리고 채워 서비스 레지스트리를 따라 당신이 말했듯이,나머지는 잘 작동합니다.

새 코드:

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