You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by ju...@apache.org on 2018/11/05 21:35:55 UTC

[jspwiki] 19/21: try to load as many externals third-party jars as possible instead of trying all-or-nothing approach of loading them

This is an automated email from the ASF dual-hosted git repository.

juanpablo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git

commit 9dfbe706c082d16d47f256bddf540d007003dba1
Author: juanpablo <ju...@apache.org>
AuthorDate: Mon Nov 5 21:17:11 2018 +0100

    try to load as many externals third-party jars as possible instead of trying all-or-nothing approach of loading them
---
 .../main/java/org/apache/wiki/util/ClassUtil.java  | 27 ++++++++++++----------
 1 file changed, 15 insertions(+), 12 deletions(-)

diff --git a/jspwiki-main/src/main/java/org/apache/wiki/util/ClassUtil.java b/jspwiki-main/src/main/java/org/apache/wiki/util/ClassUtil.java
index 9931192..024cad1 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/util/ClassUtil.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/util/ClassUtil.java
@@ -37,7 +37,6 @@ import java.util.jar.JarFile;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
-import org.apache.wiki.api.engine.PluginManager;
 import org.jdom2.Element;
 
 /**
@@ -124,12 +123,10 @@ public final class ClassUtil {
     }
 
     /**
-     * Setup the plugin classloader.
-     * Check if there are external JARS to add via property {@link org.apache.wiki.api.engine.PluginManager#PROP_EXTERNALJARS}
-     *
-     * @return the classloader that can load classes from the configured external jars or
-     *         ,if not specified, the classloader that loaded this class.
-     * @param externaljars
+     * Setup the plugin classloader, checking if there are external JARS to add.
+     * 
+     * @param externaljars external jars to load into the classloader.
+     * @return the classloader that can load classes from the configured external jars or, if not specified, the classloader that loaded this class.
      */
     private static ClassLoader setupClassLoader(List<String> externaljars) {
         classLoaderSetup = true;
@@ -140,17 +137,23 @@ public final class ClassUtil {
         }
         URL[] urls = new URL[externaljars.size()];
         int i = 0;
-        try {
-            for (String externaljar : externaljars) {
-                File jarFile = new File(externaljar);
+        for( String externaljar : externaljars ) {
+            try {
+                File jarFile = new File( externaljar );
                 URL ucl = jarFile.toURI().toURL();
                 urls[i++] = ucl;
                 log.info("added " + ucl + " to list of external jars");
+            } catch (MalformedURLException e) {
+                log.error("exception (" + e.getMessage() +") while setting up classloaders for external jar:" + externaljar + ", continuing without external jars.");
             }
-        } catch (MalformedURLException e) {
-            log.error("exception while setting up classloaders for external jars via property" + PluginManager.PROP_EXTERNALJARS + ", continuing without external jars.");
+        }
+        
+        if( i == 0 ) {
+            log.error( "all external jars threw an exception while setting up classloaders for them, continuing with standard classloading. " + 
+                       "See https://jspwiki-wiki.apache.org/Wiki.jsp?page=InstallingPlugins for help on how to install custom plugins." );
             return ClassUtil.class.getClassLoader();
         }
+        
         return new URLClassLoader(urls, ClassUtil.class.getClassLoader());
     }