From 3844ac700875ad444168bba190c685cebe6280c8 Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Tue, 17 Sep 2019 17:07:11 +0800 Subject: [PATCH] throw exception whenever SPI extensions are in abnormal status when loading (#5072) --- .../dubbo/common/extension/ExtensionLoader.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 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 59c45144ac4..d95165377f5 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 @@ -492,12 +492,15 @@ public T getAdaptiveExtension() { return (T) instance; } - private IllegalStateException findException(String name) { + private void findException(String name) { for (Map.Entry entry : exceptions.entrySet()) { if (entry.getKey().toLowerCase().contains(name.toLowerCase())) { - return entry.getValue(); + throw entry.getValue(); } } + } + + private IllegalStateException noExtensionException(String name) { StringBuilder buf = new StringBuilder("No such extension " + type.getName() + " by name " + name); @@ -519,9 +522,11 @@ private IllegalStateException findException(String name) { @SuppressWarnings("unchecked") private T createExtension(String name) { + // throws any possible exception in loading period. + findException(name); Class clazz = getExtensionClasses().get(name); if (clazz == null) { - throw findException(name); + throw noExtensionException(name); } try { T instance = (T) EXTENSION_INSTANCES.get(clazz);