从JCR仓库访问资源数据

Raj*_*aja 3 java jackrabbit jcr sling aem

使用sling资源接口我试图访问保存为二进制属性的数据到我的JCR节点.目前我正在通过以下方式进行操作,即返回null值.

Resource dataResource = resourceResolver.getResource("/testNode/A/test.txt");
ValueMap properties = dataResource.adaptTo(ValueMap.class);        

String expected = properties.get("jcr:data").toString(); // null
InputStream content = (InputStream) actualProp.get("jcr:data");  // null 
Run Code Online (Sandbox Code Playgroud)

任何人都可以让我知道缺少什么,或者读取jcr:data属性的最佳方法是什么,它以二进制数据的形式出现.dataResource是一个非结构化的:非结构化的.

它显示的输出是: - org.apache.sling.jcr.resource.internal.helper.LazyInputStream@4f4c8085

dif*_*ffa 9

您提到您使用的是Sling资源API而不是JCR API.您可以直接从资源调整资源到InputStream,如下所示:

Resource dataResource = resourceResolver.getResource("/testNode/A/test.txt/jcr:content");
InputStream is = dataResource.adaptTo(InputStream.class);
Run Code Online (Sandbox Code Playgroud)

只要资源是nt:file或nt:resource,jcr:data属性的内容就应该作为InputStream返回.

从那里你可以阅读来自InputStream的Tuan在他的回答中建议的.

您可以从以下单元测试中看到此功能的示例:http: //svn.apache.org/repos/asf/sling/whiteboard/fmeschbe/resource/jcr.resource/src/test/java/org/apache/吊带/ JCR /资源/内部/帮手/ JCR/JcrNodeResourceTest.java