如何为OSGi R7元类型注释强制(至1.2.0)OSGi XMLNS

时间:2018-12-20 23:19:02

标签: java osgi apache-felix osgi-bundle felix-dependency-manager

我正在将项目更新为OSGi R6批注(由于将依赖项部署到了我的容器,因此我在运行OSGi R7时遇到了限制),并且遇到了一个问题,我的旧Apache Felix SCR批注中带有破折号,而这不是可以使用OSGi R6。

在尝试移至OSGi R6批注时,我试图保持现有的OSGi属性(包含破折号),但是事实证明这很困难。

我现在想做的是使用OSGi R7批注,该批注通过$_$支持破折号,并寻找某种方式可以强制/target/classes/OSGI-INF/metatype XML文件具有

<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.2.0"...

代替

<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.4.0"...

..这是我的应用程序中的不兼容性(无法解析1.4.0命名空间,也不可以更新我的Metatype服务)。

有什么方法可以在我的元类型XML生成上强制使用XMLNS?我可以通过指定@Component(xmlns="http://www.osgi.org/xmlns/metatype/v1.2.0")在/ target / classes / OSGI-INF上的组件XML文件上强制它,但是这是为组件而不是元类型设置的(我需要它作为元类型的设置)。

我正在使用:

   <groupId>org.apache.felix</groupId>
   <artifactId>maven-bundle-plugin</artifactId>
   <version>4.1.0</version>

关于如何实现此目标的任何想法?

1 个答案:

答案 0 :(得分:1)

Bnd唯一会发出Metatype 1.4名称空间的时间是,如果您使用PREFIX_常量为元素名称添加前缀,或者使用单个元素注释(其中名称来自类型而不是元素),或者您使用$_$-的名称映射。由于要使用最后一项,因此xml必须使用1.4名称空间,因为xml的所有处理器都必须了解新的名称映射规则。如果您可以将命名空间版本强制为较低版本,则较旧的处理器将无法识别xml文档使用的较新功能,并会错误地处理它们。

因此,如果要使用需要运行时了解这些功能的Metatype 1.4功能,则必须使用了解那些Metatype 1.4功能的运行时组件。