首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从JCR回购访问资源数据

从JCR回购访问资源数据
EN

Stack Overflow用户
提问于 2013-06-05 06:15:17
回答 4查看 11.5K关注 0票数 3

使用吊索资源接口,我试图将保存为二进制属性的数据访问到JCR节点。目前,我正在以以下方式执行此操作,这将返回一个空值。

代码语言:javascript
复制
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 

有人能让我知道缺少什么吗?或者读取jcr:data属性的最佳方法是什么,它是二进制数据。nt:unstructured是dataResource。

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

EN

回答 4

Stack Overflow用户

发布于 2013-06-10 08:23:32

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

代码语言:javascript
复制
Resource dataResource = resourceResolver.getResource("/testNode/A/test.txt/jcr:content");
InputStream is = dataResource.adaptTo(InputStream.class);

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

从这里,你可以从InputStream读到他在回答中所建议的。

您可以从以下单元测试中看到此功能的示例:http://svn.apache.org/repos/asf/sling/whiteboard/fmeschbe/resource/jcr.resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceTest.java

票数 12
EN

Stack Overflow用户

发布于 2013-06-05 07:54:48

如果我没记错的话,你的道路应该更像是:

代码语言:javascript
复制
Resource dataResource = resourceResolver.getResource("/testNode/A/test.txt/jcr:content");

我会亲自将该资源调整为JCR (javax.jcr.Node),并从那里使用JCR (#getProperty()、#getBinary()),但这可能是我以前的学校教养方式。

票数 1
EN

Stack Overflow用户

发布于 2013-06-05 18:33:12

下面的代码对我有效:

代码语言:javascript
复制
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;

//skip here

Session session = (Session) resourceResolver.adaptTo(Session.class);
Node root = session.getRootNode();
Node jcrContent = root.getNode("testNode/A/test.txt/jcr:content");

InputStream is = jcrContent.getProperty("jcr:data").getBinary().getStream();

BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayOutputStream buf = new ByteArrayOutputStream();
int result = bis.read();
while (result != -1) {
    byte b = (byte) result;
    buf.write(b);
    result = bis.read();
}

System.out.println("plain text: " + buf.toString());

此外,您还可以在另一个职位上找到更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16932789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档