Merge pull request #255 from markfisher/INT-2320
This commit is contained in:
@@ -44,11 +44,11 @@ import org.springframework.util.StringUtils;
|
||||
* @author Oleg Zhurakousky
|
||||
* @since 2.0
|
||||
*/
|
||||
public class FileTransferringMessageHandler extends AbstractMessageHandler {
|
||||
public class FileTransferringMessageHandler<F> extends AbstractMessageHandler {
|
||||
|
||||
private volatile String temporaryFileSuffix =".writing";
|
||||
|
||||
private final SessionFactory sessionFactory;
|
||||
private final SessionFactory<F> sessionFactory;
|
||||
|
||||
private volatile boolean autoCreateDirectory = false;
|
||||
|
||||
@@ -65,7 +65,7 @@ public class FileTransferringMessageHandler extends AbstractMessageHandler {
|
||||
private volatile String remoteFileSeparator = "/";
|
||||
|
||||
|
||||
public FileTransferringMessageHandler(SessionFactory sessionFactory) {
|
||||
public FileTransferringMessageHandler(SessionFactory<F> sessionFactory) {
|
||||
Assert.notNull(sessionFactory, "sessionFactory must not be null");
|
||||
this.sessionFactory = sessionFactory;
|
||||
}
|
||||
@@ -120,7 +120,7 @@ public class FileTransferringMessageHandler extends AbstractMessageHandler {
|
||||
protected void handleMessageInternal(Message<?> message) throws Exception {
|
||||
File file = this.redeemForStorableFile(message);
|
||||
if (file != null && file.exists()) {
|
||||
Session session = this.sessionFactory.getSession();
|
||||
Session<F> session = this.sessionFactory.getSession();
|
||||
try {
|
||||
String remoteDirectory = this.directoryExpressionProcessor.processMessage(message);
|
||||
String temporaryRemoteDirectory = remoteDirectory;
|
||||
@@ -191,7 +191,7 @@ public class FileTransferringMessageHandler extends AbstractMessageHandler {
|
||||
}
|
||||
}
|
||||
|
||||
private void sendFileToRemoteDirectory(File file, String temporaryRemoteDirectory, String remoteDirectory, String fileName, Session session)
|
||||
private void sendFileToRemoteDirectory(File file, String temporaryRemoteDirectory, String remoteDirectory, String fileName, Session<F> session)
|
||||
throws FileNotFoundException, IOException {
|
||||
|
||||
remoteDirectory = this.normalizeDirectoryPath(remoteDirectory);
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.integration.file.remote.handler;
|
||||
|
||||
import java.io.InputStream;
|
||||
@@ -36,21 +37,19 @@ import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
|
||||
/**
|
||||
* @author Oleg Zhurakousky
|
||||
*
|
||||
*/
|
||||
public class FileTransferringMessageHandlerTests {
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@SuppressWarnings("unchecked")
|
||||
@Test
|
||||
public void testRemoteDirWithEmptyString() throws Exception{
|
||||
SessionFactory sf = mock(SessionFactory.class);
|
||||
Session session = mock(Session.class);
|
||||
public <F> void testRemoteDirWithEmptyString() throws Exception{
|
||||
SessionFactory<F> sf = mock(SessionFactory.class);
|
||||
Session<F> session = mock(Session.class);
|
||||
|
||||
when(sf.getSession()).thenReturn(session);
|
||||
doAnswer(new Answer() {
|
||||
doAnswer(new Answer<Object>() {
|
||||
public Object answer(InvocationOnMock invocation) throws Throwable {
|
||||
String path = (String) invocation.getArguments()[1];
|
||||
assertFalse(path.startsWith("/"));
|
||||
@@ -58,21 +57,21 @@ public class FileTransferringMessageHandlerTests {
|
||||
}
|
||||
}).when(session).rename(Mockito.anyString(), Mockito.anyString());
|
||||
ExpressionParser parser = new SpelExpressionParser();
|
||||
FileTransferringMessageHandler handler = new FileTransferringMessageHandler(sf);
|
||||
FileTransferringMessageHandler<F> handler = new FileTransferringMessageHandler<F>(sf);
|
||||
handler.setRemoteDirectoryExpression(parser.parseExpression("''"));
|
||||
handler.afterPropertiesSet();
|
||||
handler.handleMessage(new GenericMessage<String>("hello"));
|
||||
verify(session, times(1)).write(Mockito.any(InputStream.class), Mockito.anyString());
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Test
|
||||
public void testRemoteDirWithNull() throws Exception{
|
||||
SessionFactory sf = mock(SessionFactory.class);
|
||||
Session session = mock(Session.class);
|
||||
public <F> void testRemoteDirWithNull() throws Exception{
|
||||
SessionFactory<F> sf = mock(SessionFactory.class);
|
||||
Session<F> session = mock(Session.class);
|
||||
|
||||
when(sf.getSession()).thenReturn(session);
|
||||
doAnswer(new Answer() {
|
||||
doAnswer(new Answer<Object>() {
|
||||
public Object answer(InvocationOnMock invocation) throws Throwable {
|
||||
String path = (String) invocation.getArguments()[1];
|
||||
assertFalse(path.startsWith("/"));
|
||||
@@ -80,7 +79,7 @@ public class FileTransferringMessageHandlerTests {
|
||||
}
|
||||
}).when(session).rename(Mockito.anyString(), Mockito.anyString());
|
||||
ExpressionParser parser = new SpelExpressionParser();
|
||||
FileTransferringMessageHandler handler = new FileTransferringMessageHandler(sf);
|
||||
FileTransferringMessageHandler<F> handler = new FileTransferringMessageHandler<F>(sf);
|
||||
handler.setRemoteDirectoryExpression(parser.parseExpression("headers['path']"));
|
||||
handler.afterPropertiesSet();
|
||||
Message<?> message = MessageBuilder.withPayload("hello").setHeader("path", null).build();
|
||||
|
||||
@@ -51,7 +51,7 @@ public class FtpOutboundChannelAdapterParserTests {
|
||||
PublishSubscribeChannel channel = ac.getBean("ftpChannel", PublishSubscribeChannel.class);
|
||||
assertEquals(channel, TestUtils.getPropertyValue(consumer, "inputChannel"));
|
||||
assertEquals("ftpOutbound", ((EventDrivenConsumer)consumer).getComponentName());
|
||||
FileTransferringMessageHandler handler = (FileTransferringMessageHandler) TestUtils.getPropertyValue(consumer, "handler");
|
||||
FileTransferringMessageHandler<?> handler = TestUtils.getPropertyValue(consumer, "handler", FileTransferringMessageHandler.class);
|
||||
String remoteFileSeparator = (String) TestUtils.getPropertyValue(handler, "remoteFileSeparator");
|
||||
assertNotNull(remoteFileSeparator);
|
||||
assertEquals(".foo", TestUtils.getPropertyValue(handler, "temporaryFileSuffix", String.class));
|
||||
|
||||
@@ -43,7 +43,7 @@ public class FtpsOutboundChannelAdapterParserTests {
|
||||
assertTrue(consumer instanceof EventDrivenConsumer);
|
||||
assertEquals(ac.getBean("ftpChannel"), TestUtils.getPropertyValue(consumer, "inputChannel"));
|
||||
assertEquals("ftpOutbound", ((EventDrivenConsumer)consumer).getComponentName());
|
||||
FileTransferringMessageHandler handler = (FileTransferringMessageHandler) TestUtils.getPropertyValue(consumer, "handler");
|
||||
FileTransferringMessageHandler<?> handler = TestUtils.getPropertyValue(consumer, "handler", FileTransferringMessageHandler.class);
|
||||
assertEquals(ac.getBean("fileNameGenerator"), TestUtils.getPropertyValue(handler, "fileNameGenerator"));
|
||||
assertEquals("UTF-8", TestUtils.getPropertyValue(handler, "charset"));
|
||||
assertNotNull(TestUtils.getPropertyValue(handler, "temporaryDirectory"));
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2010 the original author or authors.
|
||||
* Copyright 2002-2011 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -26,12 +26,12 @@ import java.io.FileOutputStream;
|
||||
import java.io.InputStream;
|
||||
|
||||
import org.apache.commons.net.ftp.FTPClient;
|
||||
import org.apache.commons.net.ftp.FTPFile;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.stubbing.Answer;
|
||||
|
||||
import org.springframework.expression.common.LiteralExpression;
|
||||
import org.springframework.integration.Message;
|
||||
import org.springframework.integration.file.FileNameGenerator;
|
||||
@@ -43,7 +43,7 @@ import org.springframework.util.FileCopyUtils;
|
||||
/**
|
||||
* @author Oleg Zhurakousky
|
||||
*/
|
||||
public class FtpSendingMessageHandlerTest {
|
||||
public class FtpSendingMessageHandlerTests {
|
||||
|
||||
private static FTPClient ftpClient;
|
||||
private TestFtpSessionFactory sessionFactory;
|
||||
@@ -58,7 +58,6 @@ public class FtpSendingMessageHandlerTest {
|
||||
//sessionFactory.setRemoteWorkingDirectory("remote-test-dir");
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
@Test
|
||||
public void testHandleFileContentMessage() throws Exception {
|
||||
File file = new File("remote-target-dir/handlerContent.test");
|
||||
@@ -66,7 +65,7 @@ public class FtpSendingMessageHandlerTest {
|
||||
file.delete();
|
||||
}
|
||||
assertFalse(file.exists());
|
||||
FileTransferringMessageHandler handler = new FileTransferringMessageHandler(sessionFactory);
|
||||
FileTransferringMessageHandler<FTPFile> handler = new FileTransferringMessageHandler<FTPFile>(sessionFactory);
|
||||
handler.setRemoteDirectoryExpression(new LiteralExpression("remote-target-dir"));
|
||||
handler.setFileNameGenerator(new FileNameGenerator() {
|
||||
public String generateFileName(Message<?> message) {
|
||||
@@ -74,9 +73,10 @@ public class FtpSendingMessageHandlerTest {
|
||||
}
|
||||
});
|
||||
handler.afterPropertiesSet();
|
||||
handler.handleMessage(new GenericMessage("hello"));
|
||||
handler.handleMessage(new GenericMessage<String>("hello"));
|
||||
assertTrue(file.exists());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHandleFileAsByte() throws Exception {
|
||||
File file = new File("remote-target-dir/handlerContent.test");
|
||||
@@ -84,7 +84,7 @@ public class FtpSendingMessageHandlerTest {
|
||||
file.delete();
|
||||
}
|
||||
assertFalse(file.exists());
|
||||
FileTransferringMessageHandler handler = new FileTransferringMessageHandler(sessionFactory);
|
||||
FileTransferringMessageHandler<FTPFile> handler = new FileTransferringMessageHandler<FTPFile>(sessionFactory);
|
||||
handler.setRemoteDirectoryExpression(new LiteralExpression("remote-target-dir"));
|
||||
handler.setFileNameGenerator(new FileNameGenerator() {
|
||||
public String generateFileName(Message<?> message) {
|
||||
@@ -103,7 +103,7 @@ public class FtpSendingMessageHandlerTest {
|
||||
file.delete();
|
||||
}
|
||||
assertFalse(file.exists());
|
||||
FileTransferringMessageHandler handler = new FileTransferringMessageHandler(sessionFactory);
|
||||
FileTransferringMessageHandler<FTPFile> handler = new FileTransferringMessageHandler<FTPFile>(sessionFactory);
|
||||
handler.setRemoteDirectoryExpression(new LiteralExpression("remote-target-dir"));
|
||||
handler.setFileNameGenerator(new FileNameGenerator() {
|
||||
public String generateFileName(Message<?> message) {
|
||||
@@ -58,7 +58,7 @@ public class OutboundChannelAdapterParserTests {
|
||||
PublishSubscribeChannel channel = context.getBean("inputChannel", PublishSubscribeChannel.class);
|
||||
assertEquals(channel, TestUtils.getPropertyValue(consumer, "inputChannel"));
|
||||
assertEquals("sftpOutboundAdapter", ((EventDrivenConsumer)consumer).getComponentName());
|
||||
FileTransferringMessageHandler handler = (FileTransferringMessageHandler) TestUtils.getPropertyValue(consumer, "handler");
|
||||
FileTransferringMessageHandler<?> handler = TestUtils.getPropertyValue(consumer, "handler", FileTransferringMessageHandler.class);
|
||||
String remoteFileSeparator = (String) TestUtils.getPropertyValue(handler, "remoteFileSeparator");
|
||||
assertNotNull(remoteFileSeparator);
|
||||
assertEquals(".", remoteFileSeparator);
|
||||
@@ -94,7 +94,7 @@ public class OutboundChannelAdapterParserTests {
|
||||
assertTrue(consumer instanceof EventDrivenConsumer);
|
||||
assertEquals(context.getBean("inputChannel"), TestUtils.getPropertyValue(consumer, "inputChannel"));
|
||||
assertEquals("sftpOutboundAdapterWithExpression", ((EventDrivenConsumer)consumer).getComponentName());
|
||||
FileTransferringMessageHandler handler = (FileTransferringMessageHandler) TestUtils.getPropertyValue(consumer, "handler");
|
||||
FileTransferringMessageHandler<?> handler = TestUtils.getPropertyValue(consumer, "handler", FileTransferringMessageHandler.class);
|
||||
SpelExpression remoteDirectoryExpression = (SpelExpression) TestUtils.getPropertyValue(handler, "directoryExpressionProcessor.expression");
|
||||
assertNotNull(remoteDirectoryExpression);
|
||||
assertEquals("'foo' + '/' + 'bar'", remoteDirectoryExpression.getExpressionString());
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2010 the original author or authors.
|
||||
* Copyright 2002-2011 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -57,7 +57,7 @@ public class SftpSendingMessageHandlerTests {
|
||||
file.delete();
|
||||
}
|
||||
SessionFactory<LsEntry> sessionFactory = new TestSftpSessionFactory();
|
||||
FileTransferringMessageHandler handler = new FileTransferringMessageHandler(sessionFactory);
|
||||
FileTransferringMessageHandler<LsEntry> handler = new FileTransferringMessageHandler<LsEntry>(sessionFactory);
|
||||
DefaultFileNameGenerator fGenerator = new DefaultFileNameGenerator();
|
||||
fGenerator.setExpression("payload + '.test'");
|
||||
handler.setFileNameGenerator(fGenerator);
|
||||
@@ -74,7 +74,7 @@ public class SftpSendingMessageHandlerTests {
|
||||
file.delete();
|
||||
}
|
||||
SessionFactory<LsEntry> sessionFactory = new TestSftpSessionFactory();
|
||||
FileTransferringMessageHandler handler = new FileTransferringMessageHandler(sessionFactory);
|
||||
FileTransferringMessageHandler<LsEntry> handler = new FileTransferringMessageHandler<LsEntry>(sessionFactory);
|
||||
DefaultFileNameGenerator fGenerator = new DefaultFileNameGenerator();
|
||||
fGenerator.setExpression("'foo.txt'");
|
||||
handler.setFileNameGenerator(fGenerator);
|
||||
@@ -84,24 +84,24 @@ public class SftpSendingMessageHandlerTests {
|
||||
assertTrue(new File("remote-target-dir", "foo.txt").exists());
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
@Test
|
||||
public void testHandleBytesMessage() throws Exception {
|
||||
File file = new File("remote-target-dir", "foo.txt");
|
||||
if (file.exists()){
|
||||
file.delete();
|
||||
}
|
||||
SessionFactory sessionFactory = new TestSftpSessionFactory();
|
||||
FileTransferringMessageHandler handler = new FileTransferringMessageHandler(sessionFactory);
|
||||
SessionFactory<LsEntry> sessionFactory = new TestSftpSessionFactory();
|
||||
FileTransferringMessageHandler<LsEntry> handler = new FileTransferringMessageHandler<LsEntry>(sessionFactory);
|
||||
DefaultFileNameGenerator fGenerator = new DefaultFileNameGenerator();
|
||||
fGenerator.setExpression("'foo.txt'");
|
||||
handler.setFileNameGenerator(fGenerator);
|
||||
handler.setRemoteDirectoryExpression(new LiteralExpression("remote-target-dir"));
|
||||
|
||||
handler.handleMessage(new GenericMessage("hello".getBytes()));
|
||||
handler.handleMessage(new GenericMessage<byte[]>("hello".getBytes()));
|
||||
assertTrue(new File("remote-target-dir", "foo.txt").exists());
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static class TestSftpSessionFactory extends DefaultSftpSessionFactory {
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user