INT-832: Add File Relative Path to Message Headers
JIRA: https://jira.spring.io/browse/INT-832 When we scan directory recursively for files (e.g. `WatchServiceDirectoryScanner`), it can be useful to get access to the relative path from the `Message`, e.g. on the `FileWritingMessageHandler` side to restore the original structure * Add a `FileHeaders.FILENAME` into the outbound `Message` from the `FileReadingMessageSource` * The result of that header is like a removal of leading `this.directory.getAbsolutePath()` in the target `File.getAbsolutePath()`. In case of not recursion we get just only regular file name. * Introduce `FileHeaders.RELATIVE_PATH` * Populated `FileHeaders.RELATIVE_PATH`, `FileHeaders.FILENAME`, `FileHeaders.ORIGINAL_FILE` in the `FileReadingMessageSource` * File `FileTailingMessageProducerSupport` to populate `FileHeaders` properly * Introduce ctor for the `LastModifiedFileListFilter` for better Java configuration experience * Add docs for changes Doc Polishing
This commit is contained in:
committed by
Gary Russell
parent
7d9c65a108
commit
8f0fa3468f
@@ -48,6 +48,7 @@ import org.springframework.expression.Expression;
|
||||
import org.springframework.expression.ExpressionParser;
|
||||
import org.springframework.expression.spel.SpelParserConfiguration;
|
||||
import org.springframework.expression.spel.standard.SpelExpressionParser;
|
||||
import org.springframework.integration.file.FileHeaders;
|
||||
import org.springframework.integration.file.filters.AcceptOnceFileListFilter;
|
||||
import org.springframework.integration.file.filters.CompositeFileListFilter;
|
||||
import org.springframework.integration.file.filters.FileListFilter;
|
||||
@@ -85,8 +86,8 @@ public class FtpInboundRemoteFileSystemSynchronizerTests {
|
||||
|
||||
@Test
|
||||
public void testCopyFileToLocalDir() throws Exception {
|
||||
File localDirectoy = new File("test");
|
||||
assertFalse(localDirectoy.exists());
|
||||
File localDirectory = new File("test");
|
||||
assertFalse(localDirectory.exists());
|
||||
|
||||
TestFtpSessionFactory ftpSessionFactory = new TestFtpSessionFactory();
|
||||
ftpSessionFactory.setUsername("kermit");
|
||||
@@ -118,7 +119,7 @@ public class FtpInboundRemoteFileSystemSynchronizerTests {
|
||||
|
||||
ms.setAutoCreateLocalDirectory(true);
|
||||
|
||||
ms.setLocalDirectory(localDirectoy);
|
||||
ms.setLocalDirectory(localDirectory);
|
||||
ms.setBeanFactory(mock(BeanFactory.class));
|
||||
CompositeFileListFilter<File> localFileListFilter = new CompositeFileListFilter<File>();
|
||||
localFileListFilter.addFilter(new RegexPatternFileListFilter(".*\\.TEST\\.a$"));
|
||||
@@ -132,6 +133,8 @@ public class FtpInboundRemoteFileSystemSynchronizerTests {
|
||||
// The test remote files are created with the current timestamp + 1 day.
|
||||
assertThat(atestFile.getPayload().lastModified(), Matchers.greaterThan(System.currentTimeMillis()));
|
||||
|
||||
assertEquals("A.TEST.a", atestFile.getHeaders().get(FileHeaders.FILENAME));
|
||||
|
||||
Message<File> btestFile = ms.receive();
|
||||
assertNotNull(btestFile);
|
||||
assertEquals("B.TEST.a", btestFile.getPayload().getName());
|
||||
@@ -142,7 +145,7 @@ public class FtpInboundRemoteFileSystemSynchronizerTests {
|
||||
assertNull(nothing);
|
||||
|
||||
// two times because on the third receive (above) the internal queue will be empty, so it will attempt
|
||||
verify(synchronizer, times(2)).synchronizeToLocalDirectory(localDirectoy, Integer.MIN_VALUE);
|
||||
verify(synchronizer, times(2)).synchronizeToLocalDirectory(localDirectory, Integer.MIN_VALUE);
|
||||
|
||||
assertTrue(new File("test/A.TEST.a").exists());
|
||||
assertTrue(new File("test/B.TEST.a").exists());
|
||||
|
||||
Reference in New Issue
Block a user