From 0ee8041f980dab7fee723a326fa2a2f5d1fea054 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 07 May 2014 15:37:03 -0400
Subject: [PATCH] Fix class loading failure when there are no STARTED plugins

---
 src/main/java/com/gitblit/wicket/PluginClassResolver.java |   20 +++++++++-----------
 src/main/java/com/gitblit/wicket/GitBlitWebApp.java       |    4 +++-
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/gitblit/wicket/GitBlitWebApp.java b/src/main/java/com/gitblit/wicket/GitBlitWebApp.java
index d3aa62f..7291d03 100644
--- a/src/main/java/com/gitblit/wicket/GitBlitWebApp.java
+++ b/src/main/java/com/gitblit/wicket/GitBlitWebApp.java
@@ -25,6 +25,7 @@
 import org.apache.wicket.Request;
 import org.apache.wicket.Response;
 import org.apache.wicket.Session;
+import org.apache.wicket.application.IClassResolver;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.protocol.http.WebApplication;
 
@@ -226,7 +227,8 @@
 		}
 
 		 // customize the Wicket class resolver to load from plugins
-        PluginClassResolver classResolver = new PluginClassResolver(pluginManager);
+		IClassResolver coreResolver = getApplicationSettings().getClassResolver();
+        PluginClassResolver classResolver = new PluginClassResolver(coreResolver, pluginManager);
         getApplicationSettings().setClassResolver(classResolver);
 
 		getMarkupSettings().setDefaultMarkupEncoding("UTF-8");
diff --git a/src/main/java/com/gitblit/wicket/PluginClassResolver.java b/src/main/java/com/gitblit/wicket/PluginClassResolver.java
index ba53b04..476f961 100644
--- a/src/main/java/com/gitblit/wicket/PluginClassResolver.java
+++ b/src/main/java/com/gitblit/wicket/PluginClassResolver.java
@@ -23,7 +23,6 @@
 import java.util.Set;
 import java.util.TreeSet;
 
-import org.apache.wicket.Application;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.application.IClassResolver;
 import org.slf4j.Logger;
@@ -40,9 +39,11 @@
 public class PluginClassResolver implements IClassResolver {
 	private static final Logger logger = LoggerFactory.getLogger(PluginClassResolver.class);
 
+	private final IClassResolver coreResolver;
 	private final IPluginManager pluginManager;
 
-	public PluginClassResolver(IPluginManager pluginManager) {
+	public PluginClassResolver(IClassResolver coreResolver, IPluginManager pluginManager) {
+		this.coreResolver = coreResolver;
 		this.pluginManager = pluginManager;
 	}
 
@@ -65,7 +66,7 @@
 			}
 		}
 
-		throw new ClassNotFoundException(className);
+		return coreResolver.resolveClass(className);
 	}
 
 	@Override
@@ -85,6 +86,11 @@
 			}
 		}
 
+		Iterator<URL> it = coreResolver.getResources(name);
+		while (it.hasNext()) {
+			URL url = it.next();
+			urls.add(url);
+		}
 		return urls.iterator();
 	}
 
@@ -93,14 +99,6 @@
 		try {
 			// Try the classloader for the wicket jar/bundle
 			Enumeration<URL> resources = plugin.getPluginClassLoader().getResources(name);
-			loadResources(resources, loadedFiles);
-
-			// Try the classloader for the user's application jar/bundle
-			resources = Application.get().getClass().getClassLoader().getResources(name);
-			loadResources(resources, loadedFiles);
-
-			// Try the context class loader
-			resources = Thread.currentThread().getContextClassLoader().getResources(name);
 			loadResources(resources, loadedFiles);
 		} catch (IOException e) {
 			throw new WicketRuntimeException(e);

--
Gitblit v1.9.1