首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们可以在JobManager中添加ByteArrayInputStream吗?

我们可以在JobManager中添加ByteArrayInputStream吗?
EN

Stack Overflow用户
提问于 2019-05-23 14:51:45
回答 2查看 50关注 0票数 0

AEM6.2.我有一个Osgi Service,其中在org.apache.sling.event.jobs.JobManager中引用了job并将其添加到其中。

代码类似于:

代码语言:javascript
复制
Map dataSourceMap = new HashMap<String, DataSource>
dataSourceMap.put(fileName, new ByteArrayDataSource(byte[], mimeTypeOfFile))

final Map<String, Object> props = new HashMap<String, Object>();
props.put("item1", "/something");
props.put("count", 5);
props.put("files", dataSourceMap)

jobManager.addJob("my/special/jobtopic", props);

当执行此作业时,它会显示一些错误

代码语言:javascript
复制
org.apache.sling.api.resource.PersistenceException: Value can't be stored in the repository: {<<filename>>=org.apache.commons.mail.ByteArrayDataSource@3f0f234c}

问:这个异常有什么解决方案吗?还是我做错了什么?我们可以将ByteArrayInputStream添加到作业管理器中吗?

谢谢!

这只是一个信息,如果我删除行props.put("files", dataSourceMap),它工作得很好。

如果你需要更多关于它的信息,请告诉我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-23 15:11:33

Sling会将作业作为节点存储在存储库中,看起来它只支持StringBooleanInteger等“标准”类型,而不支持文件/blobs。

我想不出将文件添加到作业的方法,但您可以自己在存储库中创建临时节点,其中包含文件/blobs。

Sling在此处存储工作:

/var/eventing/jobs

您可能会执行类似的操作:

/var/<project-name>/jobs

然后,吊索作业的有效负载包含到该作业节点的路径。

票数 1
EN

Stack Overflow用户

发布于 2019-05-24 00:09:47

根据Jens的评论,作业确实会将数据作为节点属性存储在JCR中。您可能会探索将数据作为Binary存储到jcr:data属性的可能性,但我还没有亲自测试过这一点。

作为一种可能不太优化的快速解决方法,为什么不将byte[]序列化为String,甚至将其编码为Base64字符串?

示例:Base64 Java encode and decode a string [duplicate]

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

https://stackoverflow.com/questions/56269543

复制
相关文章

相似问题

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