Spring 集成 FileHeader.OriginalFile 被忽略
Spring Integration FileHeader.OriginalFile gets ignored
我的应用程序如下所示:读入文件,将它们路由一些,将它们转换为 POJO 并返回,然后再次将它们写入磁盘。
我正在使用 FileWritingMessageHandler 写出我的文件并设置
handler.setDeleteSourceFiles(true);
现在这适用于我没有转换为 POJO 的文件,但我有一些 JSON 文件我转换为 POJO,然后又转换回 JSON 文件我也想回信删除旧的。我正在设置 OriginalFile Header 并在将其 POJO 转换回 JSON 之前和之后检查它,它是正确的路径,但它没有被删除。
如果 FileWritingMessageHandler 看到包含文件作为负载的消息,它会忽略 header 吗?如果是这样,我如何让它在不手动删除源文件的情况下删除它?
编辑
我更深入地研究了 FileWritingMessageHandler 的实现,如果它是一个文件 object,它确实会忽略 header。所以我只能手动删除它。
是的,你的调查是正确的。
见代码:
if (payload instanceof File) {
resultFile = this.handleFileMessage((File) payload, tempFile, resultFile);
}
所以,FileWritingMessageHandler
originalFileFromHeader
在这种情况下因为它没有意义,因为我们已经有一个原始的 File
作为 payload
.
执行此操作后:
if (this.deleteSourceFiles) {
if (sourceFile.renameTo(resultFile)) {
return resultFile;
}
因此,您在 payload
中的文件无论如何都会被删除。
但由于它与您 headers 中的文件不同,因此它实际上并没有被自动删除。为此,您可以使用如下内容:
<file:outbound-channel-adapter>
<file:request-handler-advice-chain>
<bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
<property name="onSuccessExpressionString" value="headers[file_originalFile].delete()"/>
</bean>
</file:request-handler-advice-chain>
</file:outbound-channel-adapter>
我的应用程序如下所示:读入文件,将它们路由一些,将它们转换为 POJO 并返回,然后再次将它们写入磁盘。
我正在使用 FileWritingMessageHandler 写出我的文件并设置
handler.setDeleteSourceFiles(true);
现在这适用于我没有转换为 POJO 的文件,但我有一些 JSON 文件我转换为 POJO,然后又转换回 JSON 文件我也想回信删除旧的。我正在设置 OriginalFile Header 并在将其 POJO 转换回 JSON 之前和之后检查它,它是正确的路径,但它没有被删除。
如果 FileWritingMessageHandler 看到包含文件作为负载的消息,它会忽略 header 吗?如果是这样,我如何让它在不手动删除源文件的情况下删除它?
编辑
我更深入地研究了 FileWritingMessageHandler 的实现,如果它是一个文件 object,它确实会忽略 header。所以我只能手动删除它。
是的,你的调查是正确的。 见代码:
if (payload instanceof File) {
resultFile = this.handleFileMessage((File) payload, tempFile, resultFile);
}
所以,FileWritingMessageHandler
originalFileFromHeader
在这种情况下因为它没有意义,因为我们已经有一个原始的 File
作为 payload
.
执行此操作后:
if (this.deleteSourceFiles) {
if (sourceFile.renameTo(resultFile)) {
return resultFile;
}
因此,您在 payload
中的文件无论如何都会被删除。
但由于它与您 headers 中的文件不同,因此它实际上并没有被自动删除。为此,您可以使用如下内容:
<file:outbound-channel-adapter>
<file:request-handler-advice-chain>
<bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
<property name="onSuccessExpressionString" value="headers[file_originalFile].delete()"/>
</bean>
</file:request-handler-advice-chain>
</file:outbound-channel-adapter>