代码之家  ›  专栏  ›  技术社区  ›  Syed

JCR(JackRabbit)查询返回空结果

  •  0
  • Syed  · 技术社区  · 10 年前

    我在我的一个项目中使用magnolia,在这个项目中我创建了一个REST端点。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 回复  |  直到 10 年前
        1
  •  1
  •   Jan    10 年前

    没有足够的数据,所以只能胡乱猜测:在管理中心执行查询时,您已登录并可以访问节点。当针对REST端点运行时,您未登录,匿名用户无权访问 dinnacoDriven 工作空间。

    其中,
    一月