Java 如何在AEM中获取集合中的所有资产?

Java 如何在AEM中获取集合中的所有资产?,java,aem,query-builder,Java,Aem,Query Builder,我试图在给定集合路径的情况下获取AEM中集合内的所有资产 假设集合的路径是 /内容/大坝/集合/公共/-/-XZMZZLLHKJKIA7-Mg15h/测试 我需要得到这个集合中的所有资产 我在content/dam/collections下进行了检查,资产未存储在此位置下 我甚至尝试在AEM的查询生成器中编写一个查询,给出类型:dam:asset 和路径:“集合的位置” 我没有得到任何结果 我只需要在Java或QueryBuilder中获取集合下的所有资产,资源集合API将用于检索集合中的资产

我试图在给定集合路径的情况下获取AEM中集合内的所有资产

假设集合的路径是 /内容/大坝/集合/公共/-/-XZMZZLLHKJKIA7-Mg15h/测试

我需要得到这个集合中的所有资产

我在content/dam/collections下进行了检查,资产未存储在此位置下

我甚至尝试在AEM的查询生成器中编写一个查询,给出类型:dam:asset 和路径:“集合的位置”

我没有得到任何结果


我只需要在Java或QueryBuilder中获取集合下的所有资产,资源集合API将用于检索集合中的资产

下面的代码应该适合您

Resource resource = resourceResolver
            .getResource("/content/dam/collections/k/kXjI0j44sW4pq2mWc9fE/public collections");
    if (null != resource) {
        log.debug("resource path is {}", resource.getPath());
        ResourceCollection resourceCollection = resource.adaptTo(ResourceCollection.class);
        if (null != resourceCollection) {
            Iterator<Resource> resourceIterator = resourceCollection.getResources();
            while (resourceIterator.hasNext()) {
                Resource damResource = resourceIterator.next();
                log.debug("damResource path is {}", damResource.getPath());
                imagePaths.add(damResource.getPath());
            }
        }
    }
Resource-Resource=resourcesolver
.getResource(“/content/dam/collections/k/kXjI0j44sW4pq2mWc9fE/public collections”);
if(null!=资源){
debug(“资源路径为{}”,resource.getPath());
ResourceCollection ResourceCollection=resource.adapto(ResourceCollection.class);
if(null!=resourceCollection){
迭代器resourceIterator=resourceCollection.getResources();
while(resourceIterator.hasNext()){
Resource damResource=resourceIterator.next();
debug(“damResource路径为{}”,damResource.getPath());
add(damResource.getPath());
}
}
}
有关模型类和示例组件,请参阅以下链接


将资产存储在集合中是个坏主意,因为资产可以是多个集合的一部分。与播放列表一样,资产仅在集合中引用

每个集合都有一个子节点“sling:members”。此子节点具有一个(多值)属性sling:resources,该属性保存对此集合成员的每个资产的引用。 除此之外,sling:members还为每个资产提供了类型为nt:unstructured的子节点,其中包含属性sling:resource和资产的路径

因此,您可以迭代属性值或子节点以获取对资源的引用,然后在其原始位置访问它们


HTH

我可以在给定集合路径的情况下,通过查询在Querbuilder中获取集合中资产的所有路径吗?@acus-您甚至不需要查询-所有引用都存储在多值字段中。见我的答案。所有资产都存储在sling:members属性中。节点也在同一节点下创建,您也可以使用如下查询。path=/content/dam/collections/k/kXjI0j44sW4pq2mWc9fE/public collections/sling:members type=nt:unstructured p.limit=-1但是,最好直接读取属性,因为查询又是一项开销。使用
com.day.cq.dam.api.collection.SmartCollection
api而不是sling
ResourceCollection
,它提供了一个
getQuery
方法,还修改了
getResources
以在适用时通过执行查询来获取资产。