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