diff --git a/spring-integration-file/src/main/java/org/springframework/integration/file/FileWritingMessageHandler.java b/spring-integration-file/src/main/java/org/springframework/integration/file/FileWritingMessageHandler.java index 6568e2656db..0a24b651eb2 100644 --- a/spring-integration-file/src/main/java/org/springframework/integration/file/FileWritingMessageHandler.java +++ b/spring-integration-file/src/main/java/org/springframework/integration/file/FileWritingMessageHandler.java @@ -629,6 +629,7 @@ private File handleFileMessage(File sourceFile, File tempFile, File resultFile, if (!FileExistsMode.APPEND.equals(this.fileExistsMode) && this.deleteSourceFiles) { rename(sourceFile, resultFile); + setPermissions(resultFile); return resultFile; } else { diff --git a/spring-integration-file/src/test/java/org/springframework/integration/file/FileWritingMessageHandlerTests.java b/spring-integration-file/src/test/java/org/springframework/integration/file/FileWritingMessageHandlerTests.java index b006fa0336f..a6492c3569a 100644 --- a/spring-integration-file/src/test/java/org/springframework/integration/file/FileWritingMessageHandlerTests.java +++ b/spring-integration-file/src/test/java/org/springframework/integration/file/FileWritingMessageHandlerTests.java @@ -36,6 +36,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledOnOs; +import org.junit.jupiter.api.condition.OS; import org.junit.jupiter.api.io.TempDir; import org.springframework.beans.DirectFieldAccessor; @@ -301,6 +303,23 @@ public void deleteFilesTrueWithFilePayload() throws Exception { assertThat(sourceFile.exists()).isFalse(); } + @Test + @DisabledOnOs(OS.WINDOWS) + public void deleteFilesWithChmod() throws Exception { + QueueChannel output = new QueueChannel(); + handler.setDeleteSourceFiles(true); + handler.setOutputChannel(output); + handler.setChmod(0400); + Message message = MessageBuilder.withPayload(sourceFile).build(); + handler.handleMessage(message); + Message result = output.receive(0); + assertFileContentIsMatching(result); + File resultFile = messageToFile(result); + Set posixFilePermissions = Files.getPosixFilePermissions(resultFile.toPath()); + assertThat(posixFilePermissions).containsOnly(PosixFilePermission.OWNER_READ); + assertThat(sourceFile.exists()).isFalse(); + } + @Test public void deleteSourceFileWithStringPayloadAndFileInstanceHeader() throws Exception { QueueChannel output = new QueueChannel();