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>