JCR(JackRabbit)查询返回空结果

时间:2015-09-03 09:02:08

标签: java rest jcr jackrabbit magnolia

我正在使用magnolia作为我的一个项目,并且我创建了一个REST端点。其余端点将从我的自定义工作区读取节点并将结果返回给客户端。这很简单。

如果我在magnolia JCR Utils查询应用程序中运行以下查询,它可以正常工作并返回正确的结果。

SELECT * FROM [mgnl:contentIndex]

下面是截图

http://s1.postimg.org/gl59arw2n/correct_result.png

如果我在REST ENDPOINT处理程序中运行以下代码,则返回空结果集。

    // 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());将打印我在上面运行的完全相同的查询,但next node永远不会打印。它返回空结果。

自从我试图弄清楚这段代码出了什么问题以来已经过了12个小时,但我找不到任何东西。

我的代码有什么问题?为什么它返回空结果集?

编辑: 添加一些其他信息。 当我从代码访问时,我没有登录。我正在匿名访问。

contentIndex节点存储在根节点contentIndex。下的dinnacoDriven工作区中。

更多信息,我将dinnacoDriven工作区导出到xml中,这是xml文件

https://gist.github.com/riteshsangwan/efe93ee4c5077236c0c0

1 个答案:

答案 0 :(得分:1)

数据不够,所以只是猜测:在管理中心执行查询时,您已登录并可以访问节点。在针对REST端点运行时,您尚未登录,并且匿名用户没有分配对dinnacoDriven工作区的访问权限。

HTH,

相关问题