2013-11-26 2 views
0

하나의 인터페이스가 있고 다른 하나는 클래스로 구현 된 간단한 슬링 구성 요소를 작성했습니다. maven을 사용하여이 번들 jar를 빌드 중입니다. CQ felix console.Bundle에서 설치하면 성공적으로 업로드되고 활성 상태입니다.구성 요소 jsp에서 osgi 번들 클래스를 인스턴스화 할 수 없습니다.

구성 요소 jsp에서이 번들 클래스의 인스턴스를 만들려고 할 때 Null 포인터 예외가 발생했습니다. 구현 된 클래스에 대한 참조를 가져올 수 없기 때문에 발생합니다. 아래 클래스는이 클래스를 호출 할 때 사용하는 JSP 코드 단편입니다. 아래는 번들 클래스 인스턴스화하는 코드입니다 :

InvokeAEMWorkflowImpl wfService = sling.getService(InvokeAEMWorkflowImpl.class); 

를 또한 내가 한 가지 더 관찰, 나는이 펠릭스 콘솔의 구성 요소 및 서비스 영역 (탭)에 관련된 아무것도 볼 수 없습니다입니다.

내 구성 요소 jsp에서이 클래스를 참조 할 수없는 이유를 누군가 도와 줄 수 있습니까?

덕분에, 키 쇼어

귀하의 코멘트에서
+0

pom.xml에서 InvokeAEMWorkflowImpl (최소한 SCR 주석이있는 클래스 선언 이상) 및 maven-bundle-plugin 구성의 소스 코드를 게시하십시오. –

+0

이것은 구현 클래스이며 포함 된 번들 플러그인입니다. @ Component (즉 치 = true) @Service public class InvokeAEMWorkflowImpl은 InvokeNewWorkflow를 구현합니다. {// 이것은 완전한 구조가 아닙니다. – kishore

답변

1

나는 다음과 같이 서비스를 등록했다고 가정하십시오 SCR Annotation documentation에 따르면

@Component(immediate=true) 
@Service 
public class InvokeAEMWorkflowImpl implements InvokeNewWorkflow { 
... 

@Service 주석 모든 구현 된 인터페이스를 사용하여 서비스를 (에 등록 귀하의 경우는 InvokeNewWorkflow입니다.) 따라서 당신은 OSGi에서 서비스를 얻기 위해이 인터페이스를 사용한다 :

InvokeNewWorkflow wfService = sling.getService(InvokeNewWorkflow.class); 

그것은 좋은 프로그래밍 습관이다 separate interface and implementation에, 인터페이스를 사용하여 클래스는 인터페이스에 대해 아무것도 알 필요하지 않도록.

+0

제안했지만 시도했지만 행운을 빕니다, 아직도 널 참조만을 얻고 있습니다. – kishore

관련 문제