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
commit 7e4b2f323cd264bc9f282d06b02e03adb49ed606 Author: ken.lj <[email protected]> AuthorDate: Wed Dec 18 11:06:03 2019 +0800 Fix multi protocol does not work when referencing in ProviderConfig (#5498) fix #5398 --- .../src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java | 3 +++ .../src/main/java/org/apache/dubbo/config/ServiceConfigBase.java | 6 ++++++ .../src/main/java/org/apache/dubbo/config/ServiceConfig.java | 2 +- .../dubbo/config/spring/schema/DubboBeanDefinitionParser.java | 3 ++- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java b/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java index 1eac623..3d52969 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/ReferenceConfigBase.java @@ -136,6 +136,9 @@ public abstract class ReferenceConfigBase<T> extends AbstractReferenceConfig { if (monitor == null) { setMonitor(consumer.getMonitor()); } + if (StringUtils.isEmpty(registryIds)) { + setRegistryIds(consumer.getRegistryIds()); + } } if (module != null) { if (registries == null) { diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java b/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java index 5b0c41f..d7ee88b 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java @@ -217,6 +217,12 @@ public abstract class ServiceConfigBase<T> extends AbstractServiceConfig { if (configCenter == null) { setConfigCenter(provider.getConfigCenter()); } + if (StringUtils.isEmpty(registryIds)) { + setRegistryIds(provider.getRegistryIds()); + } + if (StringUtils.isEmpty(protocolIds)) { + setProtocolIds(provider.getProtocolIds()); + } } if (module != null) { if (registries == null) { diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java index 4513437..0a081c5 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java @@ -207,7 +207,7 @@ public class ServiceConfig<T> extends ServiceConfigBase<T> { } private void checkAndUpdateSubConfigs() { - // Use default configs defined explicitly on global scope + // Use default configs defined explicitly with global scope completeCompoundConfigs(); checkDefault(); checkProtocol(); diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboBeanDefinitionParser.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboBeanDefinitionParser.java index d2a3e08..9d9280d 100644 --- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboBeanDefinitionParser.java +++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboBeanDefinitionParser.java @@ -20,6 +20,7 @@ import org.apache.dubbo.common.logger.Logger; import org.apache.dubbo.common.logger.LoggerFactory; import org.apache.dubbo.common.utils.ReflectUtils; import org.apache.dubbo.common.utils.StringUtils; +import org.apache.dubbo.config.AbstractServiceConfig; import org.apache.dubbo.config.ArgumentConfig; import org.apache.dubbo.config.ConsumerConfig; import org.apache.dubbo.config.MethodConfig; @@ -176,7 +177,7 @@ public class DubboBeanDefinitionParser implements BeanDefinitionParser { RegistryConfig registryConfig = new RegistryConfig(); registryConfig.setAddress(RegistryConfig.NO_AVAILABLE); beanDefinition.getPropertyValues().addPropertyValue(beanProperty, registryConfig); - } else if ("provider".equals(property) || "registry".equals(property) || ("protocol".equals(property) && ServiceBean.class.equals(beanClass))) { + } else if ("provider".equals(property) || "registry".equals(property) || ("protocol".equals(property) && AbstractServiceConfig.class.isAssignableFrom(beanClass))) { /** * For 'provider' 'protocol' 'registry', keep literal value (should be id/name) and set the value to 'registryIds' 'providerIds' protocolIds' * The following process should make sure each id refers to the corresponding instance, here's how to find the instance for different use cases:
