2014-04-14 7 views
1

DAM에서 사용자가 업로드 한 XML 파일을 가져와이 파일을 구문 분석하고 내용을 JCR에 저장해야합니다. 여기에 지금까지CQ5의 DAM에서 XML 파일에 액세스

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; 
} 
} 

내가 제대로 노드 객체를 선택할 수 있어요 있지만 (Node.getPath() 반환 올바른 경로를하고), 내가 File 객체로이 노드를 변환 할 수 없으며 나는 무슨이다. (적응할 수 없음). 나는 이것을 파싱을위한 File 객체의 관점에서 접근하고자한다. 이 때문에 자산의 변환을 통해 스트림을 사용하여 파일로 복사했습니다.

그러나 위 코드에서 항상 null이 표시됩니다. 출력은 항상 File not found at all입니다.

올바르게 파싱 할 수 있도록 DAM의 필수 데이터가 포함 된 File 객체를 가져 오는 올바른 방법은 무엇입니까?

답변

2

업로드 된 XML 파일은 jcr:content 노드에 jcr:data 속성이있는 nt:file 노드가 있어야합니다. 당신은 jcr:data 즉에서 XML을 읽을 수 있습니다 : 여기

jcrContent.getProperty("jcr:data").getBinary().getStream();는 어댑터의 빌드입니다 : 나는 당신이 여기의 InputStream를 사용할 수 있다고 생각 http://dev.day.com/docs/en/cq/current/developing/sling-adapters.html

...