From 2646c9d493061d248b017d44b6d0346925100eef Mon Sep 17 00:00:00 2001 From: jessin <18351927320@163.com> Date: Sun, 6 Feb 2022 12:04:56 +0800 Subject: [PATCH] feat: consumer support specify serialization type (#9550) * consumer support specify serialization type * xml support config consumer serialization Co-authored-by: jessinguo --- .../dubbo/config/AbstractReferenceConfig.java | 21 +++++++++++++++---- .../config/annotation/DubboReference.java | 6 ++++++ .../dubbo/config/annotation/Reference.java | 6 ++++++ .../builders/AbstractReferenceBuilder.java | 13 ++++++++++++ .../main/resources/META-INF/compat/dubbo.xsd | 5 +++++ .../src/main/resources/META-INF/dubbo.xsd | 5 +++++ .../annotation/ReferenceBeanBuilderTest.java | 19 ++++++++--------- 7 files changed, 61 insertions(+), 14 deletions(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java index f2038a1117f..9fca8db65ff 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java @@ -16,14 +16,14 @@ */ package org.apache.dubbo.config; -import org.apache.dubbo.common.utils.StringUtils; -import org.apache.dubbo.config.support.Parameter; -import org.apache.dubbo.rpc.support.ProtocolUtils; - import static org.apache.dubbo.common.constants.CommonConstants.INVOKER_LISTENER_KEY; import static org.apache.dubbo.common.constants.CommonConstants.REFERENCE_FILTER_KEY; import static org.apache.dubbo.common.constants.CommonConstants.STUB_EVENT_KEY; +import org.apache.dubbo.common.utils.StringUtils; +import org.apache.dubbo.config.support.Parameter; +import org.apache.dubbo.rpc.support.ProtocolUtils; + /** * AbstractConsumerConfig * @@ -80,6 +80,11 @@ public abstract class AbstractReferenceConfig extends AbstractInterfaceConfig { protected String router; + /** + * The serialization type + */ + protected String serialization; + public Boolean isCheck() { return check; } @@ -223,4 +228,12 @@ public String getRouter() { public void setRouter(String router) { this.router = router; } + + public String getSerialization() { + return serialization; + } + + public void setSerialization(String serialization) { + this.serialization = serialization; + } } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/DubboReference.java b/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/DubboReference.java index 34c41a1df4c..231eb83abab 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/DubboReference.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/DubboReference.java @@ -295,4 +295,10 @@ * @see RegistryConstants#PROVIDED_BY */ String[] providedBy() default {}; + + /** + * specify serialization from consumer side + * @see org.apache.dubbo.remoting.Constants#SERIALIZATION_KEY + */ + String serialization() default ""; } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/Reference.java b/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/Reference.java index 82f47ee311b..a3503e629e2 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/Reference.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/annotation/Reference.java @@ -280,4 +280,10 @@ * @since 2.7.3 */ String id() default ""; + + /** + * specify serialization from consumer side + * @see org.apache.dubbo.remoting.Constants#SERIALIZATION_KEY + */ + String serialization() default ""; } diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/AbstractReferenceBuilder.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/AbstractReferenceBuilder.java index d84f3099c70..754ac79836a 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/AbstractReferenceBuilder.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/AbstractReferenceBuilder.java @@ -66,6 +66,11 @@ public abstract class AbstractReferenceBuilder + + + + + diff --git a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd index 9df1f9ae3e3..f5a21c4ad0e 100644 --- a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd +++ b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd @@ -245,6 +245,11 @@ + + + + + diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilderTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilderTest.java index 029ae16a3ed..e4c2ff5c9e6 100644 --- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilderTest.java +++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceBeanBuilderTest.java @@ -17,11 +17,17 @@ package org.apache.dubbo.config.spring.beans.factory.annotation; +import static org.apache.dubbo.common.utils.CollectionUtils.ofSet; +import static org.springframework.core.annotation.AnnotationUtils.findAnnotation; +import static org.springframework.util.ReflectionUtils.findField; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.Reference; import org.apache.dubbo.config.spring.ReferenceBean; import org.apache.dubbo.rpc.model.ApplicationModel; - import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -34,14 +40,6 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import static org.apache.dubbo.common.utils.CollectionUtils.ofSet; -import static org.springframework.core.annotation.AnnotationUtils.findAnnotation; -import static org.springframework.util.ReflectionUtils.findField; - /** * {@link ReferenceBeanBuilder} Test * @@ -59,7 +57,7 @@ public class ReferenceBeanBuilderTest { interfaceClass = CharSequence.class, interfaceName = "java.lang.CharSequence", version = "1.0.0", group = "TEST_GROUP", url = "dubbo://localhost:12345", - client = "client", generic = true, injvm = true, + client = "client", generic = true, injvm = true, serialization = "fastjson", check = false, init = false, lazy = true, stubevent = true, reconnect = "reconnect", sticky = true, proxy = "javassist", stub = "java.lang.CharSequence", cluster = "failover", @@ -130,6 +128,7 @@ public void testBuild() throws Exception { Assertions.assertEquals("reference", referenceBean.getId()); Assertions.assertEquals(ofSet("service1", "service2", "service3"), referenceBean.getSubscribedServices()); Assertions.assertEquals("service1,service2,service3", referenceBean.getProvidedBy()); + Assertions.assertEquals("fastjson", referenceBean.getSerialization()); // parameters Map parameters = new HashMap();