AEM6.2.我有一个Osgi Service,其中在org.apache.sling.event.jobs.JobManager中引用了job并将其添加到其中。
代码类似于:
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添加到作业管理器中吗?
谢谢!
这只是一个信息,如果我删除行props.put("files", dataSourceMap),它工作得很好。
如果你需要更多关于它的信息,请告诉我。
发布于 2019-05-23 15:11:33
Sling会将作业作为节点存储在存储库中,看起来它只支持String、Boolean、Integer等“标准”类型,而不支持文件/blobs。
我想不出将文件添加到作业的方法,但您可以自己在存储库中创建临时节点,其中包含文件/blobs。
Sling在此处存储工作:
/var/eventing/jobs
您可能会执行类似的操作:
/var/<project-name>/jobs
然后,吊索作业的有效负载包含到该作业节点的路径。
发布于 2019-05-24 00:09:47
根据Jens的评论,作业确实会将数据作为节点属性存储在JCR中。您可能会探索将数据作为Binary存储到jcr:data属性的可能性,但我还没有亲自测试过这一点。
作为一种可能不太优化的快速解决方法,为什么不将byte[]序列化为String,甚至将其编码为Base64字符串?
https://stackoverflow.com/questions/56269543
复制相似问题