Я использую магнолию для одного из моих проектов и тем, что создал конечную точку REST. Остальная конечная точка будет считывать узлы из моего пользовательского рабочего пространства и возвращать результат клиенту. Это очень просто.JCR (JackRabbit) Запрос, возвращающий пустые результаты
Если я запустил нижеследующий запрос в приложении для запросов мануала JCR Utils, он работает нормально и возвращает правильные результаты.
SELECT * FROM [mgnl:contentIndex]
Ниже приведен скриншот
http://s1.postimg.org/gl59arw2n/correct_result.png
Если я запускаю приведенный ниже код в моем REST ENDPOINT Handler она возвращается пустой результирующий набор.
// 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 часов с тех пор, как я пытаюсь выяснить, что не так с этим кодом, но я ничего не могу найти.
Что является проблемой с моим кодом? Почему он возвращает пустой набор результатов?
EDIT: Добавление дополнительной информации. Когда я получаю доступ к коду, я не авторизовался. Я обращаюсь анонимно.
Узлы ContentIndex хранятся в рабочем пространстве dinnacoDriven под корневым узлом contentIndex.
Некоторые больше информации, я экспортировал рабочее пространство dinnacoDriven в XML, это файл XML
https://gist.github.com/riteshsangwan/efe93ee4c5077236c0c0
Хорошо, да, это может быть, но это не должно проливают исключение авторизации вместо возврата пустой результирующий набор. – Syed
Спасибо @Jan, это действительно проблема. Но этот запрос я хочу запустить как анонимный пользователь. Существует два варианта выполнения запроса в контексте администратора, а другой - добавление разрешения на чтение/запись в рабочем пространстве dinnacoDriven для анонимного пользователя (это я могу сделать из Интернета, но я хочу сделать это, пока модуль устанавливается). Можете ли вы указать на примеры обоих из них. – Syed
Лично я бы не дал анонимного доступа для записи. Это просто просит неприятностей. Желательно выполнить это в системном контексте. Что касается примеров, проверьте документацию или форум Magnolia, не можете придумать какую-либо ссылку сверху, но она должна быть такой же простой, как вызов MgnlContext.doInSystemContext (new Op() {...}); – Jan