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

CQ5.6.1-从OSGi捆绑包中的servlet读取CQ中的xml文件时出错,xml,servlets,aem,filenotfoundexception,osgi-bundle,Xml,Servlets,Aem,Filenotfoundexception,Osgi Bundle,我正在Windows 8中开发CQ5.6.1。我正在使用一个部署在OSGi包中的servlet。在servlet中,我试图打开一个xml文件,该文件存储在CQ的路径/etc/clientlibs/geometricxx中。这是我用来阅读的代码 import javax.xml.parsers.DocumentBuilderFactory; ... DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); Doc

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

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存储库中的文件?我很感激你能给我的任何建议。谢谢。

当我在开发类似的功能时,我使用了
javax.jcr.Session
javax.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();
    }
}

从流中读取文件有不同的方法。你用谷歌搜索过吗?你可以参考这个