如何摆脱 OSGi 包的相应配置("service.pid" 等)中不存在的属性?
How to get rid of OSGi bundle's properties that are not exist in their corresponding configuration ("service.pid", etc.)?
我有 class 类似于以下内容:
@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.pid
、felix.fileinstall.dir
等),所以我的程序被破坏了。我想以某种方式摆脱它们。
我尝试使用 ConfigurationAdmin.getConfiguration.getProperties
和蓝图 cm-properties
但这产生了相同的效果。
我无法硬编码要排除的属性的名称,因为我不知道它们是什么。
有什么方法可以告诉 OSGi 运行时不要将它们放在我的地图中吗?
我正在使用 ServiceMix 的 OSGi 支持(本质上是 Karaf、Felix 和 Aries)来执行此操作。
目前无法排除这些人工属性,但我同意这很糟糕。
您可以打开一个问题和Apache felix project jira。
只需忽略您不需要的属性 like/understand。该系统的设计使得进行配置的一方可以添加任何 属性,并且 属性 将被传递到您的组件,因此成为您组件服务上的服务 属性。删除组件开发人员不理解的属性过于严格。您将消除部署过程中某人以对其他人有意义的方式装饰您的服务的能力。
我有 class 类似于以下内容:
@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.pid
、felix.fileinstall.dir
等),所以我的程序被破坏了。我想以某种方式摆脱它们。
我尝试使用 ConfigurationAdmin.getConfiguration.getProperties
和蓝图 cm-properties
但这产生了相同的效果。
我无法硬编码要排除的属性的名称,因为我不知道它们是什么。
有什么方法可以告诉 OSGi 运行时不要将它们放在我的地图中吗?
我正在使用 ServiceMix 的 OSGi 支持(本质上是 Karaf、Felix 和 Aries)来执行此操作。
目前无法排除这些人工属性,但我同意这很糟糕。
您可以打开一个问题和Apache felix project jira。
只需忽略您不需要的属性 like/understand。该系统的设计使得进行配置的一方可以添加任何 属性,并且 属性 将被传递到您的组件,因此成为您组件服务上的服务 属性。删除组件开发人员不理解的属性过于严格。您将消除部署过程中某人以对其他人有意义的方式装饰您的服务的能力。