JCR (JackRabbit) 查询返回空结果
JCR (JackRabbit) Query returning empty results
我在我的一个项目中使用了 magnolia,并且我已经创建了一个 REST 端点。其余端点将从我的自定义工作区读取节点,并将结果 return 发送给客户端。很简单。
如果我 运行 在 magnolia JCR Utils 查询应用程序中进行以下查询,它工作正常并且 return 得到正确的结果。
SELECT * FROM [mgnl:contentIndex]
下面是截图
http://s1.postimg.org/gl59arw2n/correct_result.png
如果我 运行 我的 REST 端点处理程序中的以下代码是 return 空结果集。
// Get JCR session for "dinnacoDriven" workspace
try {
Session session = MgnlContext.getJCRSession("dinnacoDriven");
StringBuilder queryBuilder = new StringBuilder("SELECT * FROM [mgnl:contentIndex]");
System.out.println(queryBuilder.toString());
Query query = session.getWorkspace().getQueryManager().createQuery(queryBuilder.toString(), Query.JCR_SQL2);
List<String> suggestions = new ArrayList<String>();
NodeIterator iterator = query.execute().getNodes();
while(iterator.hasNext()) {
System.out.println("next node");
Node node = iterator.nextNode();
suggestions.add(node.getProperty("title").getString());
}
return suggestions;
} catch(RepositoryException ex) {
throw new ServiceException("Internal Server Error", ex);
}
我可以在日志中看到 System.out.println(queryString.toString());
将打印与我在上面 运行ning 完全相同的查询,但 next node
永远不会打印。这是 return 空结果。
自从我试图找出这段代码有什么问题以来已经 12 小时了,但我找不到任何东西。
我的代码有什么问题?为什么它是 return 空结果集?
编辑:
添加一些额外的信息。
当我从代码访问时,我没有登录。我正在匿名访问。
contentIndex 节点存储在根节点contentIndex 下的dinnacoDriven 工作空间中。
更多信息,我将 dinnacoDriven 工作区导出到 xml,这是 xml 文件
没有足够的数据,所以只是胡乱猜测:在管理中心执行查询时,您已登录并可以访问节点。 运行 针对 REST 端点时,您未登录且匿名用户没有分配对 dinnacoDriven
工作区的访问权限。
HTH,
一月
我在我的一个项目中使用了 magnolia,并且我已经创建了一个 REST 端点。其余端点将从我的自定义工作区读取节点,并将结果 return 发送给客户端。很简单。
如果我 运行 在 magnolia JCR Utils 查询应用程序中进行以下查询,它工作正常并且 return 得到正确的结果。
SELECT * FROM [mgnl:contentIndex]
下面是截图
http://s1.postimg.org/gl59arw2n/correct_result.png
如果我 运行 我的 REST 端点处理程序中的以下代码是 return 空结果集。
// Get JCR session for "dinnacoDriven" workspace
try {
Session session = MgnlContext.getJCRSession("dinnacoDriven");
StringBuilder queryBuilder = new StringBuilder("SELECT * FROM [mgnl:contentIndex]");
System.out.println(queryBuilder.toString());
Query query = session.getWorkspace().getQueryManager().createQuery(queryBuilder.toString(), Query.JCR_SQL2);
List<String> suggestions = new ArrayList<String>();
NodeIterator iterator = query.execute().getNodes();
while(iterator.hasNext()) {
System.out.println("next node");
Node node = iterator.nextNode();
suggestions.add(node.getProperty("title").getString());
}
return suggestions;
} catch(RepositoryException ex) {
throw new ServiceException("Internal Server Error", ex);
}
我可以在日志中看到 System.out.println(queryString.toString());
将打印与我在上面 运行ning 完全相同的查询,但 next node
永远不会打印。这是 return 空结果。
自从我试图找出这段代码有什么问题以来已经 12 小时了,但我找不到任何东西。
我的代码有什么问题?为什么它是 return 空结果集?
编辑: 添加一些额外的信息。 当我从代码访问时,我没有登录。我正在匿名访问。
contentIndex 节点存储在根节点contentIndex 下的dinnacoDriven 工作空间中。
更多信息,我将 dinnacoDriven 工作区导出到 xml,这是 xml 文件
没有足够的数据,所以只是胡乱猜测:在管理中心执行查询时,您已登录并可以访问节点。 运行 针对 REST 端点时,您未登录且匿名用户没有分配对 dinnacoDriven
工作区的访问权限。
HTH,
一月