Java 从CQ5中的DAM访问XML文件
我需要从DAM获取一个用户上传的XML文件,解析该文件并将内容存储在JCR中。这是我到目前为止所拥有的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
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