【问题标题】:Define OSGi DS Reference Filter with multiple properties定义具有多个属性的 OSGi DS 参考过滤器
【发布时间】:2017-12-21 17:55:41
【问题描述】:

我的问题很简单,是否可以基于多个属性创建 @Reference 过滤器?如果有,语法是什么?

作为背景,我的服务如下所示:

@Component (property = {"myProp1=foo", "myProp2=bar"})
public class MyService implements IMyService
...

使用 IMyService 的东西只需要一个 myProp1=foo 和 myProp2=bar 的东西。我尝试了各种语法形式,但还没有找到一种有效的。

private @Reference (target = "(myProp1=foo)(myProp2=bar)") IMyService svc;

上面确实解决了,我得到了一个参考,但是记录了一个错误,“依赖项的目标属性中的语法无效......”。因此,即使它有效,但它似乎是侥幸,因为语法存在一些问题。

private @Reference (target = "((myProp1=foo)(myProp2=bar))") IMyService svc;
private @Reference (target = "((myProp1=foo) (myProp2=bar))") IMyService svc;
private @Reference (target = "((myProp1=foo), (myProp2=bar))") IMyService svc;
private @Reference (target = "{(myProp1=foo), (myProp2=bar)}") IMyService svc;
private @Reference (target = "[(myProp1=foo), (myProp2=bar)]") IMyService svc;

以上都没有编译,这很好验证。

private @Reference (target = "([myProp1=foo, myProp2=bar])") IMyService svc;
private @Reference (target = "(myProp1=foo, myProp2=bar)") IMyService svc;

上面编译但根本不返回服务。

private @Reference (target = "(myProp1=foo)") IMyService svc;

如上所示过滤单个字段效果很好,但这不是我正在寻找的完整解决方案。

javadoc for the @Reference annotation 不提供有关如何使用“目标”参数的任何指导。

【问题讨论】:

    标签: java osgi apache-felix


    【解决方案1】:

    当然可以,过滤器格式是“ldap 样式”。 and 运算符是 '&',在子表达式之前使用它。

    在你的情况下,它会是这样的:

    (&(myProp1=foo)(myProp2=bar))

    供参考: https://osgi.org/javadoc/r2/org/osgi/framework/Filter.html

    【讨论】:

    • 完美运行。感谢您的文档链接。我自己没有发现。
    • 那个链接真的很老了......它适用于 1999 年左右的 OSGi 第 2 版!幸运的是,该特定方法的文档仍然很好,但有关其他内容,请参阅osgi.org/osgi-release-6-javadoc的最新版本文档@
    • 如果使用xml而不是注解记得把&写成&
    猜你喜欢
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多