diff -r 45d57ecba757 -r e0e108e77052 src/net/fortuna/ical4j/util/ResourceLoader.java --- a/src/net/fortuna/ical4j/util/ResourceLoader.java Tue Feb 10 19:58:00 2015 +0100 +++ b/src/net/fortuna/ical4j/util/ResourceLoader.java Tue Feb 10 21:32:00 2015 +0100 @@ -54,11 +54,20 @@ public static URL getResource(String name) { URL resource = null; try { + // Hack to bootstrap a multithreaded class loader context + if (Thread.currentThread().getContextClassLoader() == null) + Thread.currentThread().setContextClassLoader(ResourceLoader.class.getClassLoader()); resource = Thread.currentThread().getContextClassLoader().getResource(name); + + if (resource == null) // Flawed build path for assets, try again + resource = Thread.currentThread().getContextClassLoader().getResource("/" + name); } catch (SecurityException e) { LOG.info("Unable to access context classloader, using default. " + e.getMessage()); } + catch (Exception e) { + LOG.info("General context classloader error, using default. " + e.getMessage()); + } if (resource == null) { resource = ResourceLoader.class.getResource("/" + name); } @@ -74,11 +83,19 @@ public static InputStream getResourceAsStream(String name) { InputStream stream = null; try { + // Hack to bootstrap a multithreaded class loader context + if (Thread.currentThread().getContextClassLoader() == null) + Thread.currentThread().setContextClassLoader(ResourceLoader.class.getClassLoader()); stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(name); + if (stream == null) + stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("/" + name); } catch (SecurityException e) { LOG.info("Unable to access context classloader, using default. " + e.getMessage()); } + catch (Exception e) { + LOG.info("General context classloader error, using default. " + e.getMessage()); + } if (stream == null) { stream = ResourceLoader.class.getResourceAsStream("/" + name); }