CQ5.6.1 - 从OSGi包中的servlet读取CQ中的xml文件时出错

时间:2015-01-16 06:09:57

标签: xml servlets cq5 filenotfoundexception osgi-bundle

我正在使用Windows 8中的CQ5.6.1。我正在使用部署在OSGi包中的servlet。从servlet,我试图打开一个存储在CQ的路径/ etc / clientlibs / geometrixx中的xml文件。这是我用来阅读的代码。

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 个答案:

答案 0 :(得分:0)

当我处理类似的功能时,我使用了javax.jcr.Sessionjavax.jcr.Node。另外,请注意,您的所有数据都不会存储在/etc/clientlibs/geometrixx/am/BaseAMStock_Settings.xml中,而是存储在名为jcr:data的子节点的属性jcr:content中。

您可以使用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();
    }
}