可以在 JobManager 中添加 ByteArrayInputStream 吗?
Can we add ByteArrayInputStream in JobManager?
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 吗?
谢谢!
只是一个信息,如果我删除行 props.put("files", dataSourceMap)
,它工作正常。
如果您需要更多信息,请告诉我。
Sling 会将作业作为节点存储在存储库中,看起来它只支持 "standard" 类型,如 String
、Boolean
、Integer
等。而不是 files/blobs.
我想不出将文件添加到作业中的方法,但您可以自己在存储库中创建临时节点,其中包含 files/blobs.
Sling 在此处存储工作:
/var/eventing/jobs
您可能会做类似的事情:
/var/<project-name>/jobs
然后 Sling 作业的有效负载包含到该作业节点的路径。
根据 Jens 的评论,作业确实会将数据存储为 JCR 中的节点属性。您可能会探索将数据存储为 Binary
到 jcr:data
属性 的可能性,但我自己还没有测试过。
作为一种快速且可能不是很优化的解决方法,为什么不将您的 byte[]
序列化为 String
或者甚至将其编码为 Base64 字符串?
样本:Base64 Java encode and decode a string [duplicate]
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 吗?
谢谢!
只是一个信息,如果我删除行 props.put("files", dataSourceMap)
,它工作正常。
如果您需要更多信息,请告诉我。
Sling 会将作业作为节点存储在存储库中,看起来它只支持 "standard" 类型,如 String
、Boolean
、Integer
等。而不是 files/blobs.
我想不出将文件添加到作业中的方法,但您可以自己在存储库中创建临时节点,其中包含 files/blobs.
Sling 在此处存储工作:
/var/eventing/jobs
您可能会做类似的事情:
/var/<project-name>/jobs
然后 Sling 作业的有效负载包含到该作业节点的路径。
根据 Jens 的评论,作业确实会将数据存储为 JCR 中的节点属性。您可能会探索将数据存储为 Binary
到 jcr:data
属性 的可能性,但我自己还没有测试过。
作为一种快速且可能不是很优化的解决方法,为什么不将您的 byte[]
序列化为 String
或者甚至将其编码为 Base64 字符串?
样本:Base64 Java encode and decode a string [duplicate]