Updated Branches: refs/heads/wicket-1.5.x 7497e1551 -> d68cf6b16
WICKET-4509 url must be decoded for local files Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/d68cf6b1 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/d68cf6b1 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/d68cf6b1 Branch: refs/heads/wicket-1.5.x Commit: d68cf6b169bc1e08c617f873d1ebbf40b5e9c6d0 Parents: 7497e15 Author: Sven Meier <[email protected]> Authored: Sun Apr 22 22:26:19 2012 +0200 Committer: Sven Meier <[email protected]> Committed: Sun Apr 22 22:26:19 2012 +0200 ---------------------------------------------------------------------- .../java/org/apache/wicket/util/file/Files.java | 13 ++++++++- .../org/apache/wicket/util/file/FilesTest.java | 22 ++++++++++++--- 2 files changed, 30 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/d68cf6b1/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java ---------------------------------------------------------------------- diff --git a/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java b/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java index 3b5b97c..f9d2579 100644 --- a/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java +++ b/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java @@ -23,7 +23,9 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.UnsupportedEncodingException; import java.net.URL; +import java.net.URLDecoder; import org.apache.wicket.util.io.IOUtils; import org.apache.wicket.util.io.Streams; @@ -363,7 +365,16 @@ public class Files */ public static File getLocalFileFromUrl(URL url) { - return getLocalFileFromUrl(Args.notNull(url, "url").toExternalForm()); + final URL location = Args.notNull(url, "url"); + + try + { + return getLocalFileFromUrl(URLDecoder.decode(location.toExternalForm(), "UTF-8")); + } + catch (UnsupportedEncodingException ex) + { + return null; + } } /** http://git-wip-us.apache.org/repos/asf/wicket/blob/d68cf6b1/wicket-util/src/test/java/org/apache/wicket/util/file/FilesTest.java ---------------------------------------------------------------------- diff --git a/wicket-util/src/test/java/org/apache/wicket/util/file/FilesTest.java b/wicket-util/src/test/java/org/apache/wicket/util/file/FilesTest.java index b3e362d..387f0c9 100644 --- a/wicket-util/src/test/java/org/apache/wicket/util/file/FilesTest.java +++ b/wicket-util/src/test/java/org/apache/wicket/util/file/FilesTest.java @@ -17,6 +17,7 @@ package org.apache.wicket.util.file; import java.io.IOException; +import java.net.URL; import org.junit.Assert; import org.junit.Test; @@ -98,8 +99,8 @@ public class FilesTest extends Assert File nonExistingFile = new File( "/somethingThatDoesntExistsOnMostMachines-111111111111111111111111111111"); - assertTrue("Even non existing file are scheduled for deletion.", Files.removeFolderAsync( - nonExistingFile, fileCleaner)); + assertTrue("Even non existing file are scheduled for deletion.", + Files.removeFolderAsync(nonExistingFile, fileCleaner)); assertFalse(nonExistingFile.exists()); java.io.File file = java.io.File.createTempFile("wicket-test--", ".tmp"); @@ -148,11 +149,24 @@ public class FilesTest extends Assert file.createNewFile(); assertTrue(file.exists()); - assertTrue("The folder is scheduled for deletion.", Files.removeFolderAsync(folder, - fileCleaner)); + assertTrue("The folder is scheduled for deletion.", + Files.removeFolderAsync(folder, fileCleaner)); // give chance to the file cleaner to run and delete the folder System.gc(); Thread.sleep(5); assertFalse("", folder.exists()); } + + /** + * WICKET-4509 url must be decoded + * + * @throws Exception + */ + @Test + public void fileWithWhitespace() throws Exception + { + URL url = new URL("file:/file%20with%20whitespace"); + + assertEquals("/file with whitespace", Files.getLocalFileFromUrl(url).getPath()); + } }
