AEM6.2
我有一个Osgi服务,其中引用了org.apache.sling.event.jobs.JobManager
,并向其中添加了工作。
代码类似于:
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);
该作业执行后显示错误
org.apache.sling.api.resource.PersistenceException: Value can't be stored in the repository: {<<filename>>=org.apache.commons.mail.ByteArrayDataSource@3f0f234c}
问题:对此异常有什么解决方案吗?还是我做错了什么?我们可以将ByteArrayInputStream添加到jobmanager吗?
谢谢!
只是一个信息,如果我删除行props.put("files", dataSourceMap)
,它将正常工作。
如果您需要更多信息,请告诉我。
答案 0 :(得分:1)
Sling将作业存储为存储库中的一个节点,并且看起来它仅支持String
,Boolean
,Integer
等“标准”类型,而不支持文件/斑点。
我想不出一种向作业添加文件的方法,但是您可以做的是自己在存储库中创建一个临时节点,其中包含文件/斑点。
吊索在这里存储作业:
/var/eventing/jobs
您可能会做类似的事情:
/var/<project-name>/jobs
然后Sling作业的有效负载包含该作业节点的路径。
答案 1 :(得分:0)
根据Jens的评论,该作业确实会将数据存储为JCR中的节点属性。您可能会探讨将数据作为Binary
存储到jcr:data
属性的可能性,但是我自己尚未对此进行测试。
作为一种快速且可能不是非常优化的解决方法,为什么不将byte[]
序列化为String
甚至将其编码为Base64字符串?