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

Aem 我们可以在JobManager中添加ByteArrayInputStream吗?,aem,sling,Aem,Sling,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

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);
Map dataSourceMap=newhashmap
dataSourceMap.put(文件名,新的ByteArrayDataSource(字节[],mimeTypeOfFile))
final Map props=new HashMap();
道具。放置(“item1”,“某物”);
道具。放置(“计数”,5);
props.put(“文件”,数据源映射)
addJob(“我的/特别的/工作主题”,道具);
执行此作业时,会显示一些错误

org.apache.sling.api.resource.PersistenceException: Value can't be stored in the repository: {<<filename>>=org.apache.commons.mail.ByteArrayDataSource@3f0f234c}
org.apache.sling.api.resource.PersistenceException:值不能存储在存储库中:{=org.apache.commons.mail。ByteArrayDataSource@3f0f234c}
问题:这个例外有什么解决办法吗?还是我做错了什么?我们可以向jobmanager添加ByteArrayInputStream吗

谢谢大家!

只是一个信息,如果我删除行
props.put(“files”,dataSourceMap)
,它可以正常工作


如果您需要更多信息,请告诉我。

Sling将作业作为节点存储在存储库中,它似乎只支持“标准”类型,如
字符串
布尔
整数
等,而不支持文件/blob

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

Sling在此处存储作业:

/var/eventing/jobs

你可以做类似的事情:

/var//jobs


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

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

作为一种快速且可能不是非常优化的解决方法,为什么不将
字节[]
序列化为
字符串
,甚至将其编码为Base64字符串


示例:

谢谢Jens!这是有道理的,但我正在尝试将blob/文件存储到对象中,并尝试将该对象存储到sling作业中。谢谢!这也很好,但似乎只是一个解决办法。