diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/DSSFileSystemView.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/DSSFileSystemView.java index 428754e79be4d11a7080959ed100cb2db5b22a95..75057e7aedb484197264aacd75266b5051fefd2f 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/DSSFileSystemView.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/DSSFileSystemView.java @@ -21,7 +21,6 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.net.URI; -import java.net.URISyntaxException; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; @@ -49,6 +48,8 @@ import ch.systemsx.cisd.openbis.generic.shared.util.Key; */ public class DSSFileSystemView implements FileSystemView { + private static final String SPACE_ESCAPE = "__SPACE__"; + private static final Set<String> METHOD_NAMES = new HashSet<String>(Arrays.asList( "tryToGetExperiment", "listDataSetsByExperimentID")); @@ -175,14 +176,15 @@ public class DSSFileSystemView implements FileSystemView try { - URI uri = new URI(fullPath); + URI uri = new URI(fullPath.replaceAll(" ", SPACE_ESCAPE)); String normalizedPath = uri.normalize().toString(); // remove trailing slashes normalizedPath = normalizedPath.replaceAll("/*$", ""); // replace multiple adjacent slashes with a single slash normalizedPath = normalizedPath.replaceAll("/+", "/"); + normalizedPath = normalizedPath.replaceAll(SPACE_ESCAPE, " "); return StringUtils.isBlank(normalizedPath) ? FtpConstants.ROOT_DIRECTORY : normalizedPath; - } catch (URISyntaxException ex) + } catch (Exception ex) { throw new FtpException("Cannot parse path " + fullPath, ex); } diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/DSSFileSystemViewTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/DSSFileSystemViewTest.java index 17d368af1d1e954cea2baa48383df1aa76c51de0..b797e04849a1d8ccd3e44b06771965794102d21d 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/DSSFileSystemViewTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/DSSFileSystemViewTest.java @@ -84,11 +84,11 @@ public class DSSFileSystemViewTest extends AssertJUnit @Test public void testGetFile() throws FtpException { - prepareTryResolve("/abc/ghi/jkl"); + prepareTryResolve("/abc/g h_i/j k l"); - FtpFile file = view.getFile("abc/def/../ghi//jkl//"); + FtpFile file = view.getFile("abc/def/../g h_i//j k l//"); - assertEquals("/abc/ghi/jkl", file.getAbsolutePath()); + assertEquals("/abc/g h_i/j k l", file.getAbsolutePath()); } @Test