【问题标题】:@Reference("(service.label=TESTCALL)") Felix SCR annotation error@Reference("(service.label=TESTCALL)") Felix SCR 注释错误
【发布时间】:2017-07-29 23:05:46
【问题描述】:

我正在尝试实现一个 OSGI 服务,它可以作为 ConfigurationFactory 为我服务,该服务实现只有两个属性,如下所示。

@Property(value="this is service variable property value")
static final String MY_SERVICE_VARIABLE = "service.variable";

@Property(description="Label for this MyService")
private static final String MY_SERVICE_LABEL = "service.label";

我正在从一个 OSGI servlet 中检索此服务配置数据,我试图通过以下代码调用此服务,该代码编译良好并从多个服务配置中随机检索数据。

@Reference
MyService myservice;

但是当我想通过使用service.label 获取每个配置数据并通过在我的 OSGI servlet 中使用以下代码 sn-p 调用服务时,在编译时遇到以下错误。

@Reference("(service.label=TESTCALL)")
MyService myservice;

找不到符号 [ERROR] 符号:方法 value() [ERROR] 位置: @interface org.apache.felix.scr.annotations.Reference。

【问题讨论】:

    标签: osgi aem apache-felix


    【解决方案1】:

    对于 AEM 6.x 版本使用 @Reference(target = "(service.label=TESTCALL)"),它应该可以编译。我已经上传了我之前在我的gourivar github 使用的示例 POC 以及您可以在我的aemvardhan.wordpress.com 找到的相同 POC 示例

    【讨论】:

      【解决方案2】:

      您的服务很可能缺少Service Factory 注释。比如:

          @Service
          @Component(
              metatype=true,label="my service", 
              description="sample my service implementation",
              configurationFactory=true)
              public class MyServiceImpl implements MyService { 
      
          } 
      

      注意 configurationFactory=true 属性。这使得服务可以有多种配置。

      【讨论】:

      • 我的服务已经包含了注解,当我将它用作@Reference MyService myservice;时它可以工作,当我用作@Reference( "(service.label=TESTCALL)") MyService myservice; 因为我想单独检索配置数据(即所有配置数据属于多个服务)
      • 让我问另一个同样的问题,如何检索工厂服务多个配置数据。?任何代码 sn-p 都有帮助。
      • 您的方法很好,无需查看代码 sn-p (也许您可以掌握它?)我看不出编译错误的任何原因。您可以尝试cqdump.wordpress.com/2014/08/05/… 中的代码剪辑器,看看它是否可以正常工作,因为我只是在本地尝试过并且编译正常(尚未测试绑定,但我想这不是这里的问题)。
      • 是的,已经引用了同一篇文章,并试图为我的服务实现 @Reference(“(mailservice.label=INTERNET)”) MailService mailService; 但没有任何参数给@参考注释它可以编译并且工作正常,如果我将参数添加到它上面,它会失败。是否可以将您的本地代码作为包共享?这样我就可以比较,可能有助于调试
      • 您是否有机会使用 6.x,就像在 6.x 上尝试过的一样,但它不起作用?我已经在 5.6 上编译了示例(从上面的站点复制粘贴)并且它可以工作。带有新 OSGi 的 6.x 有不同的方法。
      猜你喜欢
      • 1970-01-01
      • 2015-08-07
      • 2011-10-15
      • 2016-10-23
      • 2018-04-27
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多