java - 定义具有多个属性的 OSGi DS 引用过滤器

标签 java osgi apache-felix

我的问题很简单,是否可以基于多个属性创建 @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不提供任何有关如何使用“目标”参数的指导。

最佳答案

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

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

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

供引用: https://osgi.org/javadoc/r2/org/osgi/framework/Filter.html

关于java - 定义具有多个属性的 OSGi DS 引用过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47930298/

相关文章:

java - 如何模拟 springcontext?

java - 为什么我会收到 java.lang.StringIndexOutOfBoundsException?

java - 如何测试 List<? extends Object> 是一个 UnmodifableList?

分布式基础架构中的 OSGi

java - OSGi (felix) 忽略 OSGI-INF

java - 如何使用 ImageView 而不是菜单项制作底部导航栏?

java - 在 Eclipse RCP 应用程序中动态加载 Web 服务包

java - 如何从 eclipse/osgi 应用程序中包含对 jar 文件的依赖?

osgi - 为什么吊带配置有两种不同的格式

java - 解析 FuseESB 和 Jersey Servlet 中的两个依赖链