aem-6 - 如何获取 AEM DAM 中存在的所有资产列表
问题描述
我们有资产 api 来获取列表,但为此我们需要提供 AEM 用户凭据。
我们是否有任何接口,可以从大坝中获取所有资产列表,就像使用页面管理器获取所有页面一样。
解决方案
为此,您可以结合使用 JCR 的 QueryManager API 和您的特定查询。下面是一个示例 servlet,它列出了路径下的所有资产 - /content/dam/we-retail/en/features
import javax.jcr.Session;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import javax.jcr.query.QueryResult;
import javax.jcr.query.Row;
import javax.jcr.query.RowIterator;
import javax.servlet.Servlet;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.servlets.HttpConstants;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component(immediate = true, service = Servlet.class, property = { "sling.servlet.methods=" + HttpConstants.METHOD_GET,
"sling.servlet.paths=" + "/bin/learning/assetlister" })
public class AssetListerServlet extends SlingSafeMethodsServlet {
// Generated serialVersionUID
private static final long serialVersionUID = 7762806638577908286L;
// Default logger
private final Logger log = LoggerFactory.getLogger(this.getClass());
// Instance of ResourceResolver
private ResourceResolver resourceResolver;
// JCR Session instance
private Session session;
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) {
try {
// Getting the ResourceResolver from the current request
resourceResolver = request.getResourceResolver();
// Getting the session instance by adapting ResourceResolver
session = resourceResolver.adaptTo(Session.class);
QueryManager queryManager = session.getWorkspace().getQueryManager();
String queryString = "SELECT * FROM [dam:Asset] AS asset WHERE ISDESCENDANTNODE(asset ,'/content/dam/we-retail/en/features')";
Query query = queryManager.createQuery(queryString, "JCR-SQL2");
QueryResult queryResult = query.execute();
response.getWriter().println("--------------Result-------------");
RowIterator rowIterator = queryResult.getRows();
while (rowIterator.hasNext()) {
Row row = rowIterator.nextRow();
response.getWriter().println(row.toString());
}
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
if (resourceResolver != null) {
resourceResolver.close();
}
}
}
}
类似地使用您的特定要求,您可以在组件、服务等中使用此逻辑。我希望这会有所帮助。
推荐阅读
- ios - Vapor 3:创建自定义服务器响应
- spring - 如何使用 jpa crud 存储库查询连接表
- javascript - 我的敌人一直在随机拼接,我不知道为什么?
- javascript - 如何在 node.js 中从 MySQL 访问变量?
- regex - htacess URL 重写器在我的主机上不起作用
- reactjs - Gatsby:使用 localStorage 存储数据
- erlang - 强制转换为 `any()` 是让 Dialyzer 接受 ETS 匹配模式的好解决方案吗?
- c++ - 是否可以使用定制的 GUI 来操作另一个程序的文本文件上的信息?如果是这样,怎么做?
- web - Microsoft IIS 虚拟目录:在本地服务器上托管图像,在本地网站上显示
- android - 如何在flutter中创建自定义BottomNavigationBar?