【问题标题】:How to force (to 1.2.0) OSGi XMLNS for OSGi R7 Metatype annotations如何为 OSGi R7 元类型注释强制(到 1.2.0)OSGi XMLNS
【发布时间】:2019-05-21 11:40:11
【问题描述】:

我正在将一个项目更新为 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>

关于如何实现这一点有什么想法吗?

【问题讨论】:

  • 请澄清这是什么意思:“我的旧 Apache Felix SCR 注释中有破折号,这在 OSGi R6 中是不可能的”。注释的命名由 Java 语言规范控制,而不是由 OSGi。

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


【解决方案1】:

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

因此,如果您想使用 Metatype 1.4 的特性,这些特性需要在运行时理解这些特性,那么您必须使用能够理解这些 Metatype 1.4 特性的运行时组件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2019-06-17
    • 1970-01-01
    • 2017-04-07
    • 2012-01-15
    • 1970-01-01
    • 2016-09-15
    相关资源
    最近更新 更多