2013-11-26 2 views
0

Я написал простой элемент sling, который имеет один интерфейс, а другой - реализованный класс. Я строю этот пакет, используя maven, я устанавливаю его из консоли CQ felix. Пакет успешно загружен, и он находится в активном состоянии.не удалось создать экземпляр класса пакета osgi из компонента jsp

Когда я пытаюсь создать экземпляр класса этого пакета из компонента jsp, возникает исключение Null-указателя из-за того, Ниже приведен код для создания экземпляра класса расслоение:

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

А также я наблюдал еще одну вещь, я не могу видеть, что связано с компонентов и зон обслуживания этой ФЕЛИКС консоли (вкладки).

Может кто-нибудь помочь мне, почему я не могу передать этот класс в свой компонент jsp.

Спасибо, Кишор

+0

Пожалуйста, отправьте исходный код InvokeAEMWorkflowImpl (по крайней мере, объявление класса с аннотациями SCR) и конфигурацию maven-bundle-plugin из pom.xml. –

+0

Это класс реализации, а также включен плагин bundle ... @ Компонент (немедленный = истинный) @Service public class InvokeAEMWorkflowImpl реализует InvokeNewWorkflow {// Это не полный struture} – kishore

ответ

1

Из вашего комментария я предполагаю, что вы зарегистрировали службу следующим образом:

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

Согласно SCR Annotation documentation, то @Service аннотацию регистрирует услугу, используя все реализованные интерфейсы (в ваш случай это InvokeNewWorkflow). Поэтому вы должны использовать этот интерфейс, чтобы получить услугу от OSGi:

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

Это хорошая практика программирования для separate interface and implementation, поэтому классы с использованием интерфейса не нужно ничего знать об интерфейсе.

+0

Я пробовал, как вы предложили, но не повезло, но я получаю только нулевую ссылку. – kishore