You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by je...@apache.org on 2018/09/19 01:04:07 UTC

[incubator-dubbo] branch master updated: #2507: Dubbo 's ExtensionLoader may be can't find custom Extension (#2518)

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

jerrick pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git


The following commit(s) were added to refs/heads/master by this push:
     new 7d3a6ab   #2507: Dubbo 's ExtensionLoader may be can't find custom Extension (#2518)
7d3a6ab is described below

commit 7d3a6ab0c19b8182d8a8b0d907d0ed758e65c2a7
Author: Ian Luo <ia...@gmail.com>
AuthorDate: Wed Sep 19 09:04:00 2018 +0800

     #2507: Dubbo 's ExtensionLoader may be can't find custom Extension (#2518)
    
    * update README
    
    * #2507: Dubbo 's ExtensionLoader may be can't find custom Extension
---
 .../apache/dubbo/common/extension/ExtensionLoader.java   |  5 +++--
 .../java/org/apache/dubbo/common/utils/ClassHelper.java  | 16 +++++++++++++---
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
index 666abfb..fcbb292 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
@@ -21,6 +21,7 @@ import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.support.ActivateComparator;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.common.utils.ClassHelper;
 import org.apache.dubbo.common.utils.ConcurrentHashSet;
 import org.apache.dubbo.common.utils.ConfigUtils;
 import org.apache.dubbo.common.utils.Holder;
@@ -123,7 +124,7 @@ public class ExtensionLoader<T> {
     }
 
     private static ClassLoader findClassLoader() {
-        return ExtensionLoader.class.getClassLoader();
+        return ClassHelper.getClassLoader(ExtensionLoader.class);
     }
 
     public String getExtensionName(T extensionInstance) {
@@ -970,4 +971,4 @@ public class ExtensionLoader<T> {
         return this.getClass().getName() + "[" + type.getName() + "]";
     }
 
-}
\ No newline at end of file
+}
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ClassHelper.java b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ClassHelper.java
index e38752f..d2b3434 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ClassHelper.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ClassHelper.java
@@ -85,10 +85,10 @@ public class ClassHelper {
     /**
      * get class loader
      *
-     * @param cls
+     * @param clazz
      * @return class loader
      */
-    public static ClassLoader getClassLoader(Class<?> cls) {
+    public static ClassLoader getClassLoader(Class<?> clazz) {
         ClassLoader cl = null;
         try {
             cl = Thread.currentThread().getContextClassLoader();
@@ -97,8 +97,18 @@ public class ClassHelper {
         }
         if (cl == null) {
             // No thread context class loader -> use class loader of this class.
-            cl = cls.getClassLoader();
+            cl = clazz.getClassLoader();
+            if (cl == null) {
+                // getClassLoader() returning null indicates the bootstrap ClassLoader
+                try {
+                    cl = ClassLoader.getSystemClassLoader();
+                }
+                catch (Throwable ex) {
+                    // Cannot access system ClassLoader - oh well, maybe the caller can live with null...
+                }
+            }
         }
+
         return cl;
     }