ClassCastException을 사용하여 벽을 치고 있습니다. 잘못된 것을 궁금해합니다. 나는 API 인터페이스클래스 내에서 클래스 내에서 캐스팅을 수행하십시오.
public class ServiceImpl implements MyService{
//methods here
}
다른 확장하는 클래스에 의해 구현
public interface MyService{
method A()
method B()
}
있습니다
@Component("service")
public class ExtendedServiceImpl extends ServiceImpl
{
//overriden methods
}
및
<osgi:service ref="service"
interface="my.package.api.MyService" />
이제 스프링 components.xml에서
다른 플러그에 에서 나는 서비스에 접근하고 싶습니다. 그래서 호출하고 있습니다.ServiceReference s_reference = context.getServiceReference(MyService.class.getName());
MyService s=(MyService)context.getService(s_reference);
이것은 ClassCastException을 던집니다. 콘솔 인쇄로 볼 수 있습니다. s_reference는 해당 플러그인에서 참조가없는 ExtendedServiceImpl 유형입니다.
편집 : 클라이언트의 매니페스트 트림 가 :
Export-Service: org.hibernate.boot.registry.selector.StrategyRegistrationProvider
Import-Package: com.atlassian.confluence.plugins.questions.overriden;version="1.0.469", com.atlassian.confluence.plugins.questions.service;version="1.0.469"
내가 샘플 클래스를 사용하여 일부 상속 문제가있는 줄 알았는데 시작시 서비스
Bnd-LastModified: 1412434741719
Bundle-ClassPath: .,META-INF/lib/aspectjweaver-1.8.2.jar,META-INF/lib/
atlassian-cache-compat-1.0.1.jar,META-INF/lib/atlassian-pocketknife-d
ynamic-modules-0.20.jar,META-INF/lib/confluence-questions-api-1.0.469
.jar,META-INF/lib/jooq-3.3.1.jar,META-INF/lib/jsp-api-2.0.jar
Bundle-Description: Confluence Questions
Bundle-DocURL: http://www.atlassian.com/
Bundle-License: http://www.atlassian.com/end-user-agreement/
Bundle-ManifestVersion: 2
Bundle-Name: Confluence Questions Plugin
Bundle-SymbolicName: com.atlassian.confluence.plugins.confluence-quest
ions
Bundle-Vendor: Atlassian
Bundle-Version: 1.0.469
Export-Package:
com.atlassian.confluence.plugins.questions.api.model,
com.atlassian.confluence.plugins.questions.overriden.admin,
com.atlassian.confluence.plugins.questions.overriden;uses:="com.atlassian.bandana,
com.atlassian.confluence.setup.bandana,
com.atlassian.spring.container,com.atlassian.confluence.plugins.questions.service,
com.atlassian.confluence.plugins.questions.api.service,
org.springframework.beans.factory.annotation,
com.atlassian.confluence.plugins.questions.api.model,
com.atlassian.confluence.plugins.questions.api.repository,
com.atlassian.confluence.plugins.questions.service.mapper,
com.atlassian.event.api,
com.atlassian.confluence.plugins.questions.api.permission,
com.atlassian.confluence.user,
com.atlassian.sal.api.message,
com.atlassian.confluence.plugins.questions.api.dto,
org.springframework.stereotype,
com.atlassian.user,
com.atlassian.hibernate,
com.atlassian.bonnie.analyzer,
com.atlassian.confluence.plugins.search.api";version="1.0.469",
com.atlassian.confluence.plugins.questions.api.service
의 매니페스트 트림. MyService 인터페이스는 com.atlassian.confluence.plugins.questions.api.service에 위치합니다. ServiceImpl은 com.atlassian.confluence.plugins.questions.service에 위치합니다. ExtendedServiceImpl은 com.atlassian.confluence.plugins.questions에 있습니다. 재정의
도움이 되길 바랍니다. :)
또한 전체 스택 추적을 게시하십시오. – John
'getServiceReference (Service.class.getName());',''서비스'는 여기에서 사용합니까? [이 하나] (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/stereotype/Service.html)? –
아마도 Service.class 대신 MyService.class가되어야할까요? – John