treat c:/path as a file path, not a url (url requires two letters in the protocol spec)
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/568af2f0 Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/568af2f0 Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/568af2f0 Branch: refs/heads/0.4.0 Commit: 568af2f07c83984b22ad342757ae5b19e96ce815 Parents: 9d829c0 Author: Alex Heneveld <[email protected]> Authored: Wed Sep 26 00:38:16 2012 -0400 Committer: Alex Heneveld <[email protected]> Committed: Wed Sep 26 00:48:23 2012 -0400 ---------------------------------------------------------------------- core/src/main/java/brooklyn/util/ResourceUtils.java | 12 ++++++++++-- core/src/test/java/brooklyn/util/ResourceUtilsTest.java | 4 +++- 2 files changed, 13 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/568af2f0/core/src/main/java/brooklyn/util/ResourceUtils.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/util/ResourceUtils.java b/core/src/main/java/brooklyn/util/ResourceUtils.java index e23937b..857e176 100644 --- a/core/src/main/java/brooklyn/util/ResourceUtils.java +++ b/core/src/main/java/brooklyn/util/ResourceUtils.java @@ -75,8 +75,16 @@ public class ResourceUtils { throw new IOException("Error accessing "+orig+": "+e, e); } } - if (url.matches("[A-Za-z]+:.*")) { - //looks like a URL + if (url.matches("[A-Za-z][A-Za-z]+:.*")) { + //looks like a URL - require two letters so we don't think e.g. c:/path/ is a url + if (url.matches("file://[A-Za-z]:[/\\\\].*")) { + // file://c:/path/to/x is sometimes mistakenly supplied + // where file:///c:/path/to/x is the correct syntax. + // treat the former as the latter since the former doesn't have any other interpretation + if (log.isDebugEnabled()) + log.debug("silently changing "+url+" to file:/// prefix"); + url = "file:///"+url.substring(7); + } return new URL(url).openStream(); } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/568af2f0/core/src/test/java/brooklyn/util/ResourceUtilsTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/brooklyn/util/ResourceUtilsTest.java b/core/src/test/java/brooklyn/util/ResourceUtilsTest.java index d452f17..dd14820 100644 --- a/core/src/test/java/brooklyn/util/ResourceUtilsTest.java +++ b/core/src/test/java/brooklyn/util/ResourceUtilsTest.java @@ -39,9 +39,11 @@ public class ResourceUtilsTest { InputStream stream = utils.getResourceFromUrl("/brooklyn/config/sample.properties"); assertNotNull(stream); } - + @Test public void testGetResourceViaFileWithPrefix() throws Exception { + // on windows the correct syntax is file:///c:/path (note the extra /); + // however our routines also accept file://c:/path so the following is portable InputStream stream = utils.getResourceFromUrl("file://"+tempFile.getAbsolutePath()); assertEquals(ResourceUtils.readFullyString(stream), tempFileContents); }
