Merge pull request #672 from garyrussell/INT-2438
* INT-2438: Fix Temporary Remote Directory
This commit is contained in:
@@ -45,6 +45,7 @@ import org.springframework.util.StringUtils;
|
|||||||
* @author Josh Long
|
* @author Josh Long
|
||||||
* @author Oleg Zhurakousky
|
* @author Oleg Zhurakousky
|
||||||
* @author David Turanski
|
* @author David Turanski
|
||||||
|
* @author Gary Russell
|
||||||
* @since 2.0
|
* @since 2.0
|
||||||
*/
|
*/
|
||||||
public class FileTransferringMessageHandler<F> extends AbstractMessageHandler {
|
public class FileTransferringMessageHandler<F> extends AbstractMessageHandler {
|
||||||
@@ -130,6 +131,7 @@ public class FileTransferringMessageHandler<F> extends AbstractMessageHandler {
|
|||||||
this.temporaryFileSuffix = temporaryFileSuffix;
|
this.temporaryFileSuffix = temporaryFileSuffix;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected void onInit() throws Exception {
|
protected void onInit() throws Exception {
|
||||||
Assert.notNull(this.directoryExpressionProcessor, "remoteDirectoryExpression is required");
|
Assert.notNull(this.directoryExpressionProcessor, "remoteDirectoryExpression is required");
|
||||||
if (this.autoCreateDirectory){
|
if (this.autoCreateDirectory){
|
||||||
@@ -149,7 +151,7 @@ public class FileTransferringMessageHandler<F> extends AbstractMessageHandler {
|
|||||||
String remoteDirectory = this.directoryExpressionProcessor.processMessage(message);
|
String remoteDirectory = this.directoryExpressionProcessor.processMessage(message);
|
||||||
String temporaryRemoteDirectory = remoteDirectory;
|
String temporaryRemoteDirectory = remoteDirectory;
|
||||||
if (this.temporaryDirectoryExpressionProcessor != null){
|
if (this.temporaryDirectoryExpressionProcessor != null){
|
||||||
temporaryRemoteDirectory = this.directoryExpressionProcessor.processMessage(message);
|
temporaryRemoteDirectory = this.temporaryDirectoryExpressionProcessor.processMessage(message);
|
||||||
}
|
}
|
||||||
String fileName = this.fileNameGenerator.generateFileName(message);
|
String fileName = this.fileNameGenerator.generateFileName(message);
|
||||||
this.sendFileToRemoteDirectory(file, temporaryRemoteDirectory, remoteDirectory, fileName, session);
|
this.sendFileToRemoteDirectory(file, temporaryRemoteDirectory, remoteDirectory, fileName, session);
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package org.springframework.integration.file.remote.handler;
|
package org.springframework.integration.file.remote.handler;
|
||||||
|
|
||||||
import static junit.framework.Assert.assertFalse;
|
import static junit.framework.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.mockito.Mockito.doAnswer;
|
import static org.mockito.Mockito.doAnswer;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
@@ -24,12 +25,14 @@ import static org.mockito.Mockito.verify;
|
|||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.mockito.Mockito;
|
import org.mockito.Mockito;
|
||||||
import org.mockito.invocation.InvocationOnMock;
|
import org.mockito.invocation.InvocationOnMock;
|
||||||
import org.mockito.stubbing.Answer;
|
import org.mockito.stubbing.Answer;
|
||||||
import org.springframework.expression.ExpressionParser;
|
import org.springframework.expression.ExpressionParser;
|
||||||
|
import org.springframework.expression.common.LiteralExpression;
|
||||||
import org.springframework.expression.spel.standard.SpelExpressionParser;
|
import org.springframework.expression.spel.standard.SpelExpressionParser;
|
||||||
import org.springframework.integration.Message;
|
import org.springframework.integration.Message;
|
||||||
import org.springframework.integration.file.remote.session.Session;
|
import org.springframework.integration.file.remote.session.Session;
|
||||||
@@ -39,6 +42,7 @@ import org.springframework.integration.support.MessageBuilder;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Oleg Zhurakousky
|
* @author Oleg Zhurakousky
|
||||||
|
* @author Gary Russell
|
||||||
*/
|
*/
|
||||||
public class FileTransferringMessageHandlerTests {
|
public class FileTransferringMessageHandlerTests {
|
||||||
|
|
||||||
@@ -64,6 +68,32 @@ public class FileTransferringMessageHandlerTests {
|
|||||||
verify(session, times(1)).write(Mockito.any(InputStream.class), Mockito.anyString());
|
verify(session, times(1)).write(Mockito.any(InputStream.class), Mockito.anyString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Test
|
||||||
|
public <F> void testTemporaryRemoteDir() throws Exception{
|
||||||
|
SessionFactory<F> sf = mock(SessionFactory.class);
|
||||||
|
Session<F> session = mock(Session.class);
|
||||||
|
|
||||||
|
final AtomicReference<String> temporaryPath = new AtomicReference<String>();
|
||||||
|
final AtomicReference<String> finalPath = new AtomicReference<String>();
|
||||||
|
when(sf.getSession()).thenReturn(session);
|
||||||
|
doAnswer(new Answer<Object>() {
|
||||||
|
public Object answer(InvocationOnMock invocation) throws Throwable {
|
||||||
|
temporaryPath.set((String) invocation.getArguments()[0]);
|
||||||
|
finalPath.set((String) invocation.getArguments()[1]);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}).when(session).rename(Mockito.anyString(), Mockito.anyString());
|
||||||
|
FileTransferringMessageHandler<F> handler = new FileTransferringMessageHandler<F>(sf);
|
||||||
|
handler.setRemoteDirectoryExpression(new LiteralExpression("foo"));
|
||||||
|
handler.setTemporaryRemoteDirectoryExpression(new LiteralExpression("bar"));
|
||||||
|
handler.afterPropertiesSet();
|
||||||
|
handler.handleMessage(new GenericMessage<String>("hello"));
|
||||||
|
verify(session, times(1)).write(Mockito.any(InputStream.class), Mockito.anyString());
|
||||||
|
assertEquals("bar", temporaryPath.get().substring(0, 3));
|
||||||
|
assertEquals("foo", finalPath.get().substring(0, 3));
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@Test
|
@Test
|
||||||
public <F> void testRemoteDirWithNull() throws Exception{
|
public <F> void testRemoteDirWithNull() throws Exception{
|
||||||
|
|||||||
Reference in New Issue
Block a user