INT-4304 (S)FTP Outbound Gateway Delete After GET

JIRA: https://jira.spring.io/browse/INT-4304

Add an option to delete remote file(s) after GET/MGET.

Polishing - log error on delete failure.
This commit is contained in:
Gary Russell
2017-06-23 15:38:03 -04:00
committed by Artem Bilan
parent a1c42f65d0
commit 5216dc2b02
6 changed files with 80 additions and 28 deletions

View File

@@ -17,7 +17,8 @@
<int:channel id="inboundGet"/>
<int-ftp:outbound-gateway session-factory="ftpSessionFactory"
<int-ftp:outbound-gateway id="getGW"
session-factory="ftpSessionFactory"
request-channel="inboundGet"
command="get"
command-options="-P"

View File

@@ -60,6 +60,7 @@ import org.mockito.Mockito;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.integration.IntegrationMessageHeaderAccessor;
@@ -70,9 +71,11 @@ import org.springframework.integration.file.filters.FileListFilter;
import org.springframework.integration.file.remote.InputStreamCallback;
import org.springframework.integration.file.remote.MessageSessionCallback;
import org.springframework.integration.file.remote.RemoteFileTemplate;
import org.springframework.integration.file.remote.gateway.AbstractRemoteFileOutboundGateway.Option;
import org.springframework.integration.file.remote.session.Session;
import org.springframework.integration.file.remote.session.SessionFactory;
import org.springframework.integration.ftp.FtpTestSupport;
import org.springframework.integration.ftp.gateway.FtpOutboundGateway;
import org.springframework.integration.ftp.session.FtpRemoteFileTemplate;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.integration.support.PartialSuccessException;
@@ -107,6 +110,10 @@ public class FtpServerOutboundTests extends FtpTestSupport {
@Autowired
private DirectChannel inboundGet;
@Autowired
@Qualifier("getGW.handler")
private FtpOutboundGateway getGw;
@Autowired
private DirectChannel invalidDirExpression;
@@ -181,6 +188,19 @@ public class FtpServerOutboundTests extends FtpTestSupport {
containsString(dir.toUpperCase()));
}
@Test
public void testGetWithRemove() {
String dir = "ftpSource/";
this.getGw.setOption(Option.DELETE);
this.inboundGet.send(new GenericMessage<Object>(dir + "ftpSource2.txt"));
Message<?> result = this.output.receive(1000);
assertNotNull(result);
File localFile = (File) result.getPayload();
assertThat(localFile.getPath().replaceAll(Matcher.quoteReplacement(File.separator), "/"),
containsString(dir.toUpperCase()));
assertThat(new File(getSourceRemoteDirectory(), "ftpSource2.txt").exists(), equalTo(false));
}
@Test
public void testInt2866InvalidLocalDirectoryExpression() {
try {