AEM的Cloud Services API的文档记录得并不完善,并且提供了许多使用尴尬的方法,这些方法可用于Configuration从资源中查找给定的给定值。以下是一些我在野外发现的示例,可以做到这一点。
方法1:全部获取Configurations并迭代它们,直到找到命名的配置:
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;
}
Run Code Online (Sandbox Code Playgroud)
方法2:查找cq:cloudserviceconfigs适用于该资源的所有资源,并索取所需的资源:
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);
}
Run Code Online (Sandbox Code Playgroud)
方法3:与方法2相似,但是看起来只有在具有cq:cloudserviceconfigs属性的第一个父对象上也定义了所请求的配置时,它才会起作用?
public static Configuration findConfiguration(ConfigurationManager configurationManager, …Run Code Online (Sandbox Code Playgroud)