2015-04-08 48 views
1

我的应用程序如下所示:读取文件,将它们路由一段时间,将它们转换为POJO并返回,然后再将它们写入磁盘。Spring集成FileHeader.OriginalFile被忽略

我使用FileWritingMessageHandler写出自己的文件和设置

handler.setDeleteSourceFiles(true); 

现在,这工作得很好,我不转化为一个POJO中的文件,但我有我的一些变换JSON文件到POJO,然后返回到一个JSON文件,我也想回写并删除旧的文件。我设置了OriginalFile Header,并在将POJO转换回JSON之前和之后检查它,这是正确的路径,但它不会被删除。

如果FileWritingMessageHandler将包含文件的消息看作有效内容,它会忽略头文件吗?如果是这样,我怎么得到它删除源文件,而无需手动删除它?

编辑

我在FileWritingMessageHandler的实施看深一点,它确实忽略了头,如果它是一个文件对象。所以我只需要手动删除它。

回答

0

是的,你的调查是正确的。 看到代码:

if (payload instanceof File) { 
    resultFile = this.handleFileMessage((File) payload, tempFile, resultFile); 
} 

所以,FileWritingMessageHandleroriginalFileFromHeader在这种情况下,因为它没有任何意义,因为我们已经有一个原始File为​​。

它这样做后:

if (this.deleteSourceFiles) { 
    if (sourceFile.renameTo(resultFile)) { 
     return resultFile; 
    } 

所以,你在​​文件将被删除反正。

但是由于它和头文件不一样,所以它不会自动删除。为此目的,你可以使用类似这样的东西:

<file:outbound-channel-adapter> 
    <file:request-handler-advice-chain> 
     <bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice"> 
      <property name="onSuccessExpression" value="headers[file_originalFile].delete()"/> 
     </bean> 
    </file:request-handler-advice-chain> 
</file:outbound-channel-adapter>