2015-04-08 49 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>