Java 从CQ5中的DAM访问XML文件

Java 从CQ5中的DAM访问XML文件,java,xml,file-io,aem,dam,Java,Xml,File Io,Aem,Dam,我需要从DAM获取一个用户上传的XML文件,解析该文件并将内容存储在JCR中。这是我到目前为止所拥有的 public class foo implements Runnable { private static final Logger log = LoggerFactory .getLogger(foo.class); @Reference ResourceResolverFactory resourceResolverFactory; @Reference Resource

我需要从DAM获取一个用户上传的XML文件,解析该文件并将内容存储在JCR中。这是我到目前为止所拥有的

public class foo implements Runnable {
private static final Logger log = LoggerFactory
        .getLogger(foo.class);

@Reference
ResourceResolverFactory resourceResolverFactory;
@Reference
ResourceProvider resourceProvider;
ResourceResolver resourceResolver = null;
@Reference
SlingRepository repository;
Session session;

// private static ReadXMLFileUsingDomparserTest readxml;
File tempFile;

public void run(){
    log.info("\n ***  Seems okay ***\n");
    ResourceResolver resourceResolver = null;

    try {
        resourceResolver = resourceResolverFactory.getAdministrativeResourceResolver(null);

        Resource resource =  resourceResolver.getResource("/content/dam/foo/file.xml");
        Node node = resource.adaptTo(Node.class);

        boolean isAssest = DamUtil.isAsset(resource);
        if (isAssest) {
            Asset asset = resource.adaptTo(Asset.class);
            List<Rendition> rendition = asset.getRenditions();
            for (Rendition re : rendition) {
                InputStream in = re.getStream();

                File xmlFile = copy(in,tempFile);
                if(filetest.exists()){
                    ReadXMLFileUsingDomparserTest.parseXML(filetest,null);
                }else {
                    log.info("File not found at all");
                }               
            }       
        }

        File xmlFile = copy(in,tempFile);*/

        }catch (Exception e) {
            log.error("Exception while running foo" , e);
        }
}

private File copy(InputStream in, File file) {
    try {
        OutputStream out = new FileOutputStream(file);
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        out.close();
        in.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return file;
}
}
public类foo实现Runnable{
专用静态最终记录器日志=LoggerFactory
.getLogger(食品级);
@参考文献
ResourceResolverFactory ResourceResolverFactory;
@参考文献
资源提供者资源提供者;
ResourceResolver ResourceResolver=null;
@参考文献
SlingRepository;
会议;
//私有静态ReadXMLFileUsingDomparserTest readxml;
文件tempFile;
公开募捐{
log.info(“\n***似乎没问题***\n”);
ResourceResolver ResourceResolver=null;
试一试{
resourceResolver=resourceResolverFactory.getAdministrativeResourceResolver(null);
Resource=resourceResolver.getResource(“/content/dam/foo/file.xml”);
Node=resource.adapto(Node.class);
布尔值isAsset=DamUtil.isAsset(资源);
如果(isAssest){
资产=资源.adapto(资产.class);
列表格式副本=asset.getRenderations();
对于(格式副本:格式副本){
InputStream in=re.getStream();
文件xmlFile=copy(in,tempFile);
if(filetest.exists()){
ReadXMLFileUsingDomparserTest.parseXML(filetest,null);
}否则{
log.info(“根本找不到文件”);
}               
}       
}
文件xmlFile=copy(in,tempFile)*/
}捕获(例外e){
log.error(“运行foo时异常”,e);
}
}
专用文件副本(输入流输入,文件文件){
试一试{
OutputStream out=新文件OutputStream(文件);
字节[]buf=新字节[1024];
内伦;
而((len=in.read(buf))>0){
out.write(buf,0,len);
}
out.close();
in.close();
}捕获(例外e){
e、 printStackTrace();
}
返回文件;
}
}
虽然我能够正确地拾取节点对象(执行
Node.getPath()
返回正确的路径),但我无法将此节点转换为文件对象。(无法调整)。我想通过一个文件对象来访问它以进行解析。这就是为什么我检查了资产的格式副本,并使用流将其复制到文件中

但是,对于上述代码,这始终显示null;输出总是
文件根本找不到


从DAM中获取包含必要数据的文件对象的正确方法是什么,以便我能够成功解析它?

上载的xml文件应该有一个
nt:File
节点,该节点具有
jcr:content
属性。您可以从
jcr:data
读取xml,即:
jcrContent.getProperty(“jcr:data”).getBinary().getStream()

以下是内置适配器:

我想你可以在这里使用InputStream