Запрос JCR (JackRabbit), возвращающий пустые результаты

Я использую магнолию для одного из своих проектов, и в этом я создал конечную точку 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 хранятся в рабочей области dinnacoDriven под корневым узлом contentIndex.

Еще немного информации, я экспортировал рабочую область dinnacoDriven в xml, это файл xml

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


person Syed    schedule 03.09.2015    source источник


Ответы (1)


Недостаточно данных, так что просто предположение: при выполнении запроса в центре администрирования вы вошли в систему и имеете доступ к узлам. При работе с конечной точкой REST вы не вошли в систему, а анонимный пользователь не имеет назначенного доступа к рабочей области dinnacoDriven.

HTH,
январь

person Jan    schedule 03.09.2015
comment
Хорошо, да, это может быть так, но разве это не должно вызывать какое-то исключение авторизации вместо возврата пустого набора результатов. - person Syed; 03.09.2015
comment
Спасибо @Jan, это действительно была проблема. Но этот запрос я хочу запустить как анонимный пользователь. Есть два варианта: один — выполнить запрос в контексте администратора, а другой — добавить разрешение на чтение/запись рабочей области dinnacoDriven для анонимного пользователя (это я могу сделать из Интернета, но я хочу сделать это во время установки модуля). Можете ли вы привести примеры того и другого. - person Syed; 03.09.2015
comment
Лично я бы не дал анонимному доступ на запись. Это просто напрашивается на неприятности. Предпочтительно вы хотите выполнить это в системном контексте. Что касается примеров, проверьте документацию или форум Magnolia, я не могу придумать ни одной ссылки, но это должно быть так же просто, как вызов MgnlContext.doInSystemContext(new Op() { ... }); - person Jan; 04.09.2015