You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2023/06/19 13:29:19 UTC

[dubbo] branch 3.2 updated: Skip check ignored extensions (#12571)

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

albumenj pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.2 by this push:
     new a941985c99 Skip check ignored extensions (#12571)
a941985c99 is described below

commit a941985c9938548fe70a1e3fcc7ef97705c8d530
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Mon Jun 19 21:29:14 2023 +0800

    Skip check ignored extensions (#12571)
---
 .../dubbo/common/extension/ExtensionLoader.java    |  5 +++-
 .../common/extension/ExtensionLoaderTest.java      | 29 ++++++++++++++++++++--
 .../dubbo/config/utils/ConfigValidationUtils.java  |  3 ++-
 .../apache/dubbo/config/AbstractConfigTest.java    | 19 +++++++++++++-
 4 files changed, 51 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 5f000daa8a..be0f96d247 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
@@ -73,6 +73,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 import static java.util.Arrays.asList;
 import static java.util.ServiceLoader.load;
@@ -346,7 +347,9 @@ public class ExtensionLoader<T> {
         checkDestroyed();
         // solve the bug of using @SPI's wrapper method to report a null pointer exception.
         Map<Class<?>, T> activateExtensionsMap = new TreeMap<>(activateComparator);
-        List<String> names = values == null ? new ArrayList<>(0) : asList(values);
+        List<String> names = values == null ?
+            new ArrayList<>(0) :
+            Arrays.stream(values).map(StringUtils::trim).collect(Collectors.toList());
         Set<String> namesSet = new HashSet<>(names);
         if (!namesSet.contains(REMOVE_VALUE_PREFIX + DEFAULT_KEY)) {
             if (cachedActivateGroups.size() == 0) {
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/extension/ExtensionLoaderTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/extension/ExtensionLoaderTest.java
index 4f8f1474f1..2e2b2a0884 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/common/extension/ExtensionLoaderTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/common/extension/ExtensionLoaderTest.java
@@ -221,7 +221,7 @@ class ExtensionLoaderTest {
     }
 
     @Test
-    void test_getActivateExtension_WithWrapper() {
+    void test_getActivateExtension_WithWrapper1() {
         URL url = URL.valueOf("test://localhost/test");
         List<ActivateExt1> list = getExtensionLoader(ActivateExt1.class)
             .getActivateExtension(url, new String[]{}, "order");
@@ -596,7 +596,7 @@ class ExtensionLoaderTest {
     }
 
     @Test
-    void testLoadDefaultActivateExtension() {
+    void testLoadDefaultActivateExtension1() {
         // test default
         URL url = URL.valueOf("test://localhost/test?ext=order1,default");
         List<ActivateExt1> list = getExtensionLoader(ActivateExt1.class)
@@ -620,6 +620,31 @@ class ExtensionLoaderTest {
         assertSame(list.get(1).getClass(), OrderActivateExtImpl1.class);
     }
 
+    @Test
+    void testLoadDefaultActivateExtension2() {
+        // test default
+        URL url = URL.valueOf("test://localhost/test?ext=order1  , default");
+        List<ActivateExt1> list = getExtensionLoader(ActivateExt1.class)
+            .getActivateExtension(url, "ext", "default_group");
+        Assertions.assertEquals(2, list.size());
+        assertSame(list.get(0).getClass(), OrderActivateExtImpl1.class);
+        assertSame(list.get(1).getClass(), ActivateExt1Impl1.class);
+
+        url = URL.valueOf("test://localhost/test?ext=default, order1");
+        list = getExtensionLoader(ActivateExt1.class)
+            .getActivateExtension(url, "ext", "default_group");
+        Assertions.assertEquals(2, list.size());
+        assertSame(list.get(0).getClass(), ActivateExt1Impl1.class);
+        assertSame(list.get(1).getClass(), OrderActivateExtImpl1.class);
+
+        url = URL.valueOf("test://localhost/test?ext=order1");
+        list = getExtensionLoader(ActivateExt1.class)
+            .getActivateExtension(url, "ext", "default_group");
+        Assertions.assertEquals(2, list.size());
+        assertSame(list.get(0).getClass(), ActivateExt1Impl1.class);
+        assertSame(list.get(1).getClass(), OrderActivateExtImpl1.class);
+    }
+
     @Test
     void testInjectExtension() {
         // register bean for test ScopeBeanExtensionInjector
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
index 70380568ef..4e9c20d415 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
@@ -670,8 +670,9 @@ public class ConfigValidationUtils {
         if (isNotEmpty(value)) {
             String[] values = value.split("\\s*[,]+\\s*");
             for (String v : values) {
+                v = StringUtils.trim(v);
                 if (v.startsWith(REMOVE_VALUE_PREFIX)) {
-                    v = v.substring(1);
+                    continue;
                 }
                 if (DEFAULT_KEY.equals(v)) {
                     continue;
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java
index 0a811bbae5..1a986a5884 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java
@@ -207,8 +207,25 @@ class AbstractConfigTest {
 
     @Test
     void checkMultiExtension2() {
+        try {
+            ConfigValidationUtils.checkMultiExtension(ApplicationModel.defaultModel(), Greeting.class, "hello", "default,-world");
+        } catch (Throwable t) {
+            Assertions.fail(t);
+        }
+    }
+    @Test
+    void checkMultiExtension3() {
         Assertions.assertThrows(IllegalStateException.class,
-                () -> ConfigValidationUtils.checkMultiExtension(ApplicationModel.defaultModel(), Greeting.class, "hello", "default,-world"));
+                () -> ConfigValidationUtils.checkMultiExtension(ApplicationModel.defaultModel(), Greeting.class, "hello", "default ,     world"));
+    }
+
+    @Test
+    void checkMultiExtension4() {
+        try {
+            ConfigValidationUtils.checkMultiExtension(ApplicationModel.defaultModel(), Greeting.class, "hello", "default  ,  -world   ");
+        } catch (Throwable t) {
+            Assertions.fail(t);
+        }
     }
 
     @Test