java - OSGi 组件的默认配置值包含转义的反斜杠

标签 java osgi aem

下面是我的简单 OSGi 组件的代码

@Component(metatype = true, label = "My Component", policy = ConfigurationPolicy.REQUIRE)
@Property(label = "My Component's expression", name = "my.expression", value = "/5 * * * * ? *")
public class MyComponent {

    private static final Logger log = LoggerFactory.getLogger(MyComponent.class);

    @Reference
    private Scheduler scheduler;

    @Activate
    public void activate(final ComponentContext context) {
        final String quartzExpression = PropertiesUtil.toString(
                context.getProperties().get("my.expression"), "");
        ScheduleOptions options = scheduler.EXPR(quartzExpression).name("MyJob");
        scheduler.schedule(new Runnable() {

            @Override
            public void run() {
                log.info("Hello World!");

            }
        }, options);
    }
}

它应该做什么:它采用一个作为 Quartz 表达式的配置值,并使用它来安排一个记录简单问候语的作业。

默认情况下,我希望作业每 5 秒执行一次,这是属性的默认值。现在,因为我还指定了 ConfigurationPolicy.REQUIRE,所以我实际上需要创建配置。为此,我转到 OSGi 控制台的配置管理器,在列表中找到 My Component 并单击它。此时,发送请求以获取配置对话框数据。响应包含标签、名称以及默认值等内容。在我的例子中,默认值返回为 /5\\*\\*\\*\\*\\?\\*,并在对话框中显示为 /5\*\*\*\*\?\*.

现在,如果我手动删除所有反斜杠,配置将被保存,稍后被正确提取并使组件按预期工作。我的问题是,为什么代码中指定的默认值与我在配置管理器中从 OSGi 收到的值不同?

编辑:经过进一步调查,我认为这可能是由我用来生成组件描述符的 Maven SCR 插件引起的。它生成这两个文件:.\target\classes\OSGI-INF\MyComponent.xml:

<?xml version="1.0" encoding="UTF-8"?><components xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0">
    <scr:component name="MyComponent" configuration-policy="require" activate="activate">
        <implementation class="MyComponent"/>
        <property name="my.expression" value="/5 * * * * ? *"/>
        <property name="service.pid" value="MyComponent"/>
        <reference name="scheduler" interface="org.apache.sling.commons.scheduler.Scheduler" cardinality="1..1" policy="static" bind="bindScheduler" unbind="unbindScheduler"/>
    </scr:component>
</components>

还有这个:.\target\classes\OSGI-INF\metatype\MyComponent.xml

<?xml version="1.0" encoding="UTF-8"?><metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0" localization="OSGI-INF/metatype/MyComponent">
    <OCD id="MyComponent" name="%MyComponent.name" description="%MyComponent">
        <AD id="my.expression" type="String" name="%MyComponent.my.expression" />
    </OCD>
    <Designate pid="MyComponent">
        <Object ocdref="MyComponent"/>
    </Designate>
</metatype:MetaData>

看起来 metatype 元数据没有正确生成。

最佳答案

这实际上是两年前为解决 problem with encoding regular expressions 而实现的 Maven SCR 插件的预期行为。作为默认值 - 可以找到提交 here .

找到了。

关于java - OSGi 组件的默认配置值包含转义的反斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30777568/

相关文章:

java - 如何解决 JPMS 和 OSGi Bundle for Eclipse plugin project an Tycho 之间的冲突

adobe - 如何通过 Adob​​e CQ 更改视口(viewport)设置?

java - 警告 EclipseJavaCompiler 使用不受支持的 java 版本 '11' ,假设在 Java 11 上运行 AEM 6.5 时最新支持的版本 '9'

aem - 在 AEM/CQ5 中,使用/etc/map 的 URL 重定向不起作用

java - 列表不同数据类型之间的转换

java - 是否可以在 SonarQube 的时间机器中卡住一个版本?

java - 使用 Java 的回文测试器,忽略空格和标点符号

java - 如何从文件夹中获取随机文件?

OSGI + Spring-DM 交叉捆绑依赖死锁

java - Eclipse:如何导出插件中的文件夹