Service OSGi:使用自定义属性注册服务

Service OSGi:使用自定义属性注册服务,service,properties,osgi,Service,Properties,Osgi,我正在使用Equinox和DS,我有一些服务我想注册自定义属性。我正在使用: Hashtable<String, Object> properties = new Hashtable<String,Object>(); properties.put("service.market","ch"); context.registerService(Workflow.class.getName(), new WorkflowAlternate(), pr

我正在使用Equinox和DS,我有一些服务我想注册自定义属性。我正在使用:

    Hashtable<String, Object> properties = new Hashtable<String,Object>();
    properties.put("service.market","ch");
    context.registerService(Workflow.class.getName(), new WorkflowAlternate(), properties);
Hashtable properties=newhashtable();
物业出售(“服务市场”、“ch”);
context.registerService(Workflow.class.getName(),new WorkflowAlternate(),properties);
这不是在耍花招。当我获取所有ServiceReferences(WorkFlow,null)并查询键时,它们都只显示objectclass、service.id、service.bundleid和service.scope

我需要做什么才能用自定义属性(以编程方式)注册服务

根据下面的注释,我正在编辑添加用于查询密钥的代码。找到了正确的捆绑包并正常工作,但当我这样要求钥匙时,我只得到上面的四把钥匙

public void dumpReferences() throws Exception
{
    ServiceReference<?>[] references = context.getAllServiceReferences(Workflow.class.getName(), null);
    for(ServiceReference<?> reference : references)
    {
        String[] keys = reference.getPropertyKeys();
        System.out.println("Bundle: "+reference.getBundle().getSymbolicName());
        for(String key:keys)
        {
            System.out.println("\tKey: "+key+ " ["+reference.getProperty(key)+"]");

        }
    }
}
public void dumpReferences()引发异常
{
ServiceReference[]references=context.getAllServiceReferences(Workflow.class.getName(),null);
对于(ServiceReference:引用)
{
String[]keys=reference.getPropertyKeys();
System.out.println(“Bundle:+reference.getBundle().getSymbolicName());
用于(字符串键:键)
{
System.out.println(“\tKey:“+key+”[“+reference.getProperty(key)+”]);
}
}
}

这正是您需要做的。也许询问代码有问题,你能发布吗?PS如果你使用DS(从我们在Twitter上的互动中,我想你是),你可以发布一个带有属性的服务,使用
@组件
注释及其
属性
属性。这非常令人费解。我看不出你的代码有任何问题,我相信它应该能工作。是否确实正在执行注册码(第一个代码段)?你能试试下面的吗。。。
registerService
调用返回一个
ServiceRegistration
对象。尝试调用
getReference
,并以相同的方式转储属性。