use*_*418 2 java osgi sling aem
我创建了一个sling:OsgiConfig节点,它具有String []类型的属性路径.我需要在java类中访问此属性.我想在java类中创建一个我可以从JSP调用的方法.我正在使用taglib这样做.我知道我们可以使用下面的代码在JSP中实现相同的目标:
    Configuration conf = sling.getService(org.osgi.service.cm.ConfigurationAdmin.class).getConfiguration("Name of the config");
String[] myProp = (String[]) conf.getProperties().get("propertyPath");
我怎样才能在Java类中执行此操作.
您没有说过您希望获得哪种类型的Java类配置.我们来看看选项:
1.任何OSGi服务(如servlet,过滤器或事件监听器)
将以下字段添加到OSGi组件类:
@Reference
private ConfigurationAdmin configurationAdmin;
并以与JSP中相同的方式使用它.
2.吊索:OsgiConfig所属的OSGi服务
如果添加了sling:OsgiConfig节点来配置自己的OSGi组件,请遵循Chris建议:
@Component
@Properties({
    @Property(name = "propertyPath")
})
public class MyComponent {
    private String[] propertyPath;
    @Activate
    public void activate(ComponentContext ctx) {
        propertyPath = PropertiesUtil.toStringArray(context.getProperties().get("propertyPath"));
    }
    public void myMethod() {
        // do something with the propertyPath field
    }
}
OSGi自动调用activate方法.合格的名称ComponentContext是org.osgi.service.component.ComponentContext
3.普通的旧Java对象
如果您的类不是OSGi组件,则至少需要访问该SlingHttpServletRequest对象.如果您这样做,您可以从中提取SlingScriptHelper并使用它来获取ConfigurationAdmin:
SlingHttpServletRequest request = ...;
SlingBindings bindings = (SlingBindings) request.getAttribute(SlingBindings.class.getName());
SlingScriptHelper sling = bindings.getSling();
// here you can use your JSP code