From 99bf14b01873666dba4291e3a836f22ad8fd7ac1 Mon Sep 17 00:00:00 2001 From: Andy Clement Date: Wed, 16 Oct 2013 12:33:48 -0700 Subject: [PATCH] Possible fix for GRAILS-10384 --- .../agent/SpringLoadedPreProcessor.java | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/org.springsource.loaded/src/main/java/org/springsource/loaded/agent/SpringLoadedPreProcessor.java b/org.springsource.loaded/src/main/java/org/springsource/loaded/agent/SpringLoadedPreProcessor.java index 1642841..94d7b36 100644 --- a/org.springsource.loaded/src/main/java/org/springsource/loaded/agent/SpringLoadedPreProcessor.java +++ b/org.springsource.loaded/src/main/java/org/springsource/loaded/agent/SpringLoadedPreProcessor.java @@ -449,12 +449,28 @@ public class SpringLoadedPreProcessor implements Constants { // so far: // GRAILS-10384: relative URL file:../foo/bar - should have built it with new File().toURI.toURL() and not just new URL() File file = null; + URI uri = null; try { - URI uri = codeSource.getLocation().toURI(); + uri = codeSource.getLocation().toURI(); file = new File(uri); } catch (IllegalArgumentException iae) { - System.out.println("Unable to watch file: classname = "+slashedClassName+" codesource location = "+codeSource.getLocation()+" ex = "+iae.toString()); - return null; + boolean recovered = false; + if (iae.toString().indexOf("URI is not hierarchical")!=-1) { + // try another approach... + String uristring = uri.toString(); + if (uristring.startsWith("file:../")) { + file = new File(uristring.substring(8)).getAbsoluteFile(); + } else if (uristring.startsWith("file:./")) { + file = new File(uristring.substring(7)).getAbsoluteFile(); + } + if (file.exists()) { + recovered = true; + } + } + if (!recovered) { + System.out.println("Unable to watch file: classname = "+slashedClassName+" codesource location = "+codeSource.getLocation()+" ex = "+iae.toString()); + return null; + } } if (file.isDirectory()) { file = new File(file, slashedClassName + ".class");