2015-01-16 42 views
0

我正在使用Windows 8中的CQ5.6.1。我正在使用部署在OSGi包中的servlet。從servlet中,我試圖打開存儲在CQ的路徑/ etc/clientlibs/geometrixx中的xml文件。這是我用來閱讀的代碼。CQ5.6.1 - 在CQG中從Servlet讀取xml文件時出錯在OSGi包中

import javax.xml.parsers.DocumentBuilderFactory; 
... 

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
Document amSetupDoc = null ; 
amSetupDoc = factory.newDocumentBuilder().parse(new File("/etc/clientlibs/geometrixx/am/BaseAMStock_Settings.xml")); 

在這一點上,我收到以下例外。

java.io.FileNotFoundException: D:\etc\clientlibs\geometrixx\am\BaseAMStock_Settings.xml (The system cannot find the path specified) 

我不知道爲什麼路徑被轉換爲Windows路徑。有沒有更好的方法從我的servlet中讀取CQ存儲庫中的文件?我很感激你可以給我的任何建議。謝謝。

+1

有不同的方法來讀取從流你用Google搜索這些文件?你可以參考這個http://www.wemblog.com/2011/10/how-to-read-external-file-in-cq.html –

回答

0

當我在研究類似功能時,我使用了javax.jcr.Sessionjavax.jcr.Node。此外,請注意,您的所有數據都未存儲在/etc/clientlibs/geometrixx/am/BaseAMStock_Settings.xml中,而是存儲在名爲jcr:content的子節點的屬性jcr:data中。

可以輕鬆地檢查這個使用CRXDE:http://localhost:4502/crx/de/index.jsp#/etc/clientlibs/geometrixx/am/BaseAMStock_Settings.xml

嘗試下面的代碼示例:

String path = "/etc/clientlibs/geometrixx/am/BaseAMStock_Settings.xml/jcr:content"; 
if(session.nodeExists(path)) { 
    Node node = session.getNode(path); 
    if(node.hasProperty("jcr:data")) { 
     Property jcrData = node.getProperty("jcr:data"); 
     //here you can use one of the methods from javax.jcr.Property: 
     // - jcrData.getBinary().getStream(); 
     // - jcrData.getString(); 
    } 
}