【问题标题】:not able to instantiate osgi bundle class from component jsp无法从组件 jsp 实例化 osgi bundle 类
【发布时间】:2013-12-12 07:46:03
【问题描述】:

我编写了一个简单的 sling 组件,它有一个接口,另一个是实现类。 我正在使用 maven 构建这个 bundle jar,我正在从 CQ felix 控制台安装它。Bundle 已成功上传并处于活动状态。

当我试图从组件 jsp 实例化这个 bundle 类时,由于无法获取该已实现类的引用而发生空指针异常。下面是用于调用此类的 jsp 代码 sn-p。 下面是实例化bundle类的代码:

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

而且我还观察到一件事,我无法看到与此 felix 控制台的组件和服务区域(选项卡)相关的任何内容。

谁能帮助我为什么我不能在我的组件jsp中引用这个类。

谢谢, 基肖尔

【问题讨论】:

  • 请从 pom.xml 中发布 InvokeAEMWorkflowImpl 的源代码(至少是带有 SCR 注释的类声明)和 maven-bundle-plugin 配置。
  • 这是实现类,也包含了bundle插件...@Component(immediate=true) @Service public class InvokeAEMWorkflowImpl implements InvokeNewWorkflow {//这不是完整的结构}

标签: osgi aem sling


【解决方案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 是一个很好的编程习惯,因此使用该接口的类不需要了解有关该接口的任何信息。

【讨论】:

  • 我已经按照你的建议尝试过,但没有运气,我仍然只得到空引用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 2014-01-14
  • 2014-05-27
  • 2012-05-07
  • 1970-01-01
  • 2022-01-03
相关资源
最近更新 更多