James Moger
2014-05-07 0ee8041f980dab7fee723a326fa2a2f5d1fea054
Fix class loading failure when there are no STARTED plugins
2 files modified
24 ■■■■ changed files
src/main/java/com/gitblit/wicket/GitBlitWebApp.java 4 ●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/PluginClassResolver.java 20 ●●●●● patch | view | raw | blame | history
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");
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);