我爲我的一個項目使用了玉蘭,並且創建了REST端點。其餘端點將從我的自定義工作區中讀取節點並將結果返回給客戶端。這很簡單。JCR(JackRabbit)查詢返回空結果
如果我在magnolia JCR Utils查詢應用程序中運行以下查詢,它工作正常,並返回正確的結果。
SELECT * FROM [mgnl:contentIndex]
下面是截圖
http://s1.postimg.org/gl59arw2n/correct_result.png
如果我在REST端點處理程序運行下面的代碼它返回空的結果集。
// 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
好吧,是的,這可能是這樣,但它不應該拋出一些授權異常,而不是返回查詢結果爲空的。 – Syed
謝謝@Jan這確實是問題所在。但是這個查詢我想以匿名用戶身份運行。有兩種選擇是在管理上下文中執行查詢,另一種是向匿名用戶添加dinnacoDriven工作區讀/寫權限(這可以從web上完成,但我希望在安裝模塊時執行此操作)。你能指出這兩個例子嗎? – Syed
個人而言,我不會授予匿名寫入權限。這只是要求麻煩。最好你想在系統上下文中執行它。至於示例,檢查文檔或Magnolia論壇,不能想到從我的頭頂上的任何鏈接,但應該像調用MgnlContext.doInSystemContext(new Op(){...})一樣簡單; – Jan