2015-09-03 8 views
0

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

ответ

1

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

НТН,
Jan

+0

Хорошо, да, это может быть, но это не должно проливают исключение авторизации вместо возврата пустой результирующий набор. – Syed

+0

Спасибо @Jan, это действительно проблема. Но этот запрос я хочу запустить как анонимный пользователь. Существует два варианта выполнения запроса в контексте администратора, а другой - добавление разрешения на чтение/запись в рабочем пространстве dinnacoDriven для анонимного пользователя (это я могу сделать из Интернета, но я хочу сделать это, пока модуль устанавливается). Можете ли вы указать на примеры обоих из них. – Syed

+0

Лично я бы не дал анонимного доступа для записи. Это просто просит неприятностей. Желательно выполнить это в системном контексте. Что касается примеров, проверьте документацию или форум Magnolia, не можете придумать какую-либо ссылку сверху, но она должна быть такой же простой, как вызов MgnlContext.doInSystemContext (new Op() {...}); – Jan

Смежные вопросы