Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;“正确”;在AEM 6中从Java查找云服务配置的方法_Java_Aem - Fatal编程技术网

&引用;“正确”;在AEM 6中从Java查找云服务配置的方法

&引用;“正确”;在AEM 6中从Java查找云服务配置的方法,java,aem,Java,Aem,AEM的云服务API并没有很好的文档记录,并且提供了一些使用起来有点笨拙的方法,可用于从资源中查找给定的配置。下面是我在“野外”中发现的几个例子 方法1:获取所有配置并迭代它们,直到找到命名配置: public static Configuration findConfiguration(ConfigurationManager configurationManager, Resource resource, String serviceName) { Iterator configur

AEM的云服务API并没有很好的文档记录,并且提供了一些使用起来有点笨拙的方法,可用于从资源中查找给定的
配置。下面是我在“野外”中发现的几个例子

方法1:获取所有
配置
并迭代它们,直到找到命名配置:

public static Configuration findConfiguration(ConfigurationManager configurationManager, Resource resource, String serviceName) {
    Iterator configurations = configurationManager.getConfigurations(resource);
    while (configurations.hasNext()) {
        Configuration configuration = (Configuration) configurations.next();
        if (serviceName.equals(configuration.get("cq:cloudservicename", ""))) {
            return configuration;
        }
    }
    return null;
}
方法2:查找所有应用于资源的
cq:cloudserviceconfigm
,并请求您想要的:

public static Configuration findConfiguration(ConfigurationManager configurationManager, Resource resource, String serviceName) {
    HierarchyNodeInheritanceValueMap pageProperties = 
        new HierarchyNodeInheritanceValueMap(resource);

    String[] allServices = 
        pageProperties.getInherited("cq:cloudserviceconfigs", new String[0]);

    return configurationManager.getConfiguration(serviceName, allServices);
}
方法3:与方法2类似,但看起来只有在具有
cq:cloudserviceconfigs
属性的第一个父级上也定义了请求的配置时,它才会起作用

public static Configuration findConfiguration(ConfigurationManager configurationManager, Resource resource, String serviceName) {

    Resource configurationResource = 
        configurationManager.getConfigurationResource(resource);

    if (configurationResource != null) {
        String[] cloudServiceConfigs = configurationResource.adaptTo(Page.class)
            .getProperties().get("cq:cloudserviceconfigs", String[].class);

        if (cloudServiceConfigs != null && cloudServiceConfigs.length > 0) {
            return configurationManager.getConfiguration(serviceName, cloudServiceConfigs);
        }
    }
    return null;
}
我觉得奇怪的是,无论是谁设计了这个界面,都没有简单地添加像
ConfigurationManager#getService(Resource-Resource,String-serviceName)
这样的方法——为了实现一个看似常见的用例,您必须跳出的障碍令人沮丧,但显然是这样的

所以我的问题是:

  • 是否有比
    ConfigurationManager
    更好的API或库用于查找页面或资源的特定云服务配置

  • 如果没有,使用
    ConfigurationManager
    执行此操作的好的、健壮的、高性能的方法是什么


  • 谢谢。

    根据adobe自己的代码,method2似乎是实现这一点的标准方法。