2016-11-08 22 views
0

我具有类似于下面的类:如何摆脱不存在于其相应配置(“service.pid”等)中的OSGi包的属性?

@Component(configurationPid = "foo.bar", configurationPolicy = ConfigurationPolicy.REQUIRE) 
public class MyClass { 

    @Activate 
    public void activate(Map<String, Object> properties) throws Exception { 
     for (String property : properties.keySet()) { 
      if (!isValidProperty(property)) { 
       throw new IllegalArgumentException("Unknown property: " + property); 
      } 
      ... 
     } 
    } 

} 

properties地图必须包含从相应的配置源特性(例如由用户提供的文件)。它也是,但它也包含一些并不存在的属性(service.pidfelix.fileinstall.dir等),所以我的程序被破坏了。我想以某种方式摆脱它们。
我试图使用ConfigurationAdmin.getConfiguration.getProperties和蓝图cm-properties,但是这给出了相同的效果。
我无法硬编码要排除的属性的名称,因为我不知道它们是什么。
是否有任何方法可以告诉OSGi运行时不要在我的地图中放置它们?
我正在使用ServiceMix的OSGi支持(本质上是Karaf,Felix和白羊座)。

回答

1

目前没有办法排除这些人为的属性,但我同意这很糟糕。

您可以打开问题和Apache felix project jira

+1

这些属性是规范强制要求的,所以我不确定Felix如何'合法'摆脱它们 –

2

只是忽略你不喜欢/理解的属性。该系统的设计使配置方可以添加任何属性,并将该属性传递给组件,从而成为组件服务的服务属性。删除组件开发人员无法理解的属性过于严格。您将删除部署过程中某人以某种对其他人有意义的方式装饰您的服务的能力。