This is an automated email from the ASF dual-hosted git repository. liujun pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/master by this push: new b37a05d Fix default config does not work as expected. (#5952) b37a05d is described below commit b37a05d4e4db138278d4d524de32a8defea5cc21 Author: ken.lj <ken.lj...@gmail.com> AuthorDate: Fri Apr 3 19:31:16 2020 +0800 Fix default config does not work as expected. (#5952) fixes #5947 --- .../org/apache/dubbo/common/utils/ReflectUtils.java | 20 ++++++++++---------- .../apache/dubbo/config/context/ConfigManager.java | 2 +- .../dubbo/config/context/ConfigManagerTest.java | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ReflectUtils.java b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ReflectUtils.java index 866d4b6..ea8d51f 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ReflectUtils.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ReflectUtils.java @@ -23,7 +23,6 @@ import javassist.NotFoundException; import java.beans.BeanInfo; import java.beans.Introspector; -import java.beans.PropertyDescriptor; import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Field; @@ -1261,28 +1260,29 @@ public final class ReflectUtils { } /** - * Get the value from the specified bean and its property. + * Get the value from the specified bean and its getter method. * - * @param bean the bean instance - * @param propertyName the name of property - * @param <T> the type of property value + * @param bean the bean instance + * @param methodName the name of getter + * @param <T> the type of property value * @return * @since 2.7.5 */ - public static <T> T getProperty(Object bean, String propertyName) { + public static <T> T getProperty(Object bean, String methodName) { Class<?> beanClass = bean.getClass(); BeanInfo beanInfo = null; T propertyValue = null; + try { beanInfo = Introspector.getBeanInfo(beanClass); - propertyValue = (T) Stream.of(beanInfo.getPropertyDescriptors()) - .filter(propertyDescriptor -> propertyName.equals(propertyDescriptor.getName())) - .map(PropertyDescriptor::getReadMethod) + propertyValue = (T) Stream.of(beanInfo.getMethodDescriptors()) + .filter(methodDescriptor -> methodName.equals(methodDescriptor.getName())) .findFirst() .map(method -> { try { - return method.invoke(bean); + return method.getMethod().invoke(bean); } catch (Exception e) { + //ignore } return null; }).get(); diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/context/ConfigManager.java b/dubbo-common/src/main/java/org/apache/dubbo/config/context/ConfigManager.java index 81e4bc9..ed0188a 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/context/ConfigManager.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/context/ConfigManager.java @@ -503,7 +503,7 @@ public class ConfigManager extends LifecycleAdapter implements FrameworkExt { } static <C extends AbstractConfig> boolean isDefaultConfig(C config) { - Boolean isDefault = getProperty(config, "default"); + Boolean isDefault = getProperty(config, "isDefault"); return isDefault == null || TRUE.equals(isDefault); } diff --git a/dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java b/dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java index 07d0a52..58fc3cc 100644 --- a/dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java +++ b/dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java @@ -205,4 +205,22 @@ public class ConfigManagerTest { public void testRefreshAll() { configManager.refreshAll(); } + + @Test + public void testDefaultConfig() { + ProviderConfig providerConfig = new ProviderConfig(); + providerConfig.setDefault(false); + assertFalse(ConfigManager.isDefaultConfig(providerConfig)); + + ProviderConfig providerConfig1 = new ProviderConfig(); + assertTrue(ConfigManager.isDefaultConfig(providerConfig1)); + + ProviderConfig providerConfig3 = new ProviderConfig(); + providerConfig.setDefault(true); + assertTrue(ConfigManager.isDefaultConfig(providerConfig3)); + + ProtocolConfig protocolConfig = new ProtocolConfig(); + protocolConfig.setDefault(false); + assertFalse(ConfigManager.isDefaultConfig(protocolConfig)); + } }