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 66b8487795 Read protocol config's serialization as default (#11116)
66b8487795 is described below

commit 66b84877959e127f8d2b1a1e3284a489136cc59b
Author: Albumen Kevin <[email protected]>
AuthorDate: Sun Dec 11 18:19:35 2022 +0800

    Read protocol config's serialization as default (#11116)
    
    * Read protocol config's serialization as default
    
    * Add xsd
    
    * fix uts
---
 .../apache/dubbo/config/AbstractServiceConfig.java |  5 ++-
 .../org/apache/dubbo/config/ProtocolConfig.java    | 25 ++++++++++++++
 .../dubbo/config/AbstractServiceConfigTest.java    |  5 ++-
 .../apache/dubbo/config/ProtocolConfigTest.java    | 38 +++++++++++++++++++++-
 .../src/main/resources/META-INF/dubbo.xsd          |  5 +++
 5 files changed, 71 insertions(+), 7 deletions(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractServiceConfig.java 
b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractServiceConfig.java
index d77b2c3e49..1f2ae28a72 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractServiceConfig.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractServiceConfig.java
@@ -30,7 +30,6 @@ import static 
org.apache.dubbo.common.constants.CommonConstants.EXPORTER_LISTENE
 import static 
org.apache.dubbo.common.constants.CommonConstants.EXPORT_ASYNC_KEY;
 import static 
org.apache.dubbo.common.constants.CommonConstants.SERVICE_EXECUTOR;
 import static 
org.apache.dubbo.common.constants.CommonConstants.SERVICE_FILTER_KEY;
-import static 
org.apache.dubbo.common.constants.ProviderConstants.DEFAULT_PREFER_SERIALIZATION;
 
 /**
  * AbstractServiceConfig
@@ -131,7 +130,7 @@ public abstract class AbstractServiceConfig extends 
AbstractInterfaceConfig {
      * <p>
      * When this parameter is null or the serialization type specified by this 
parameter does not exist in the Dubbo SDK, the serialization type specified by 
serialization is used.
      * If the Dubbo SDK if still does not exist, the default type of the Dubbo 
SDK is used.
-     * For Dubbo SDK >= 3.1, <code>preferSerialization</code> takes precedence 
over <code>serialization</code>
+     * For Dubbo SDK >= 3.2, <code>preferSerialization</code> takes precedence 
over <code>serialization</code>
      * <p>
      * The configuration supports multiple, which are separated by commas.Such 
as:<code>fastjson2,fastjson,hessian2</code>
      */
@@ -168,7 +167,7 @@ public abstract class AbstractServiceConfig extends 
AbstractInterfaceConfig {
         }
 
         if (StringUtils.isBlank(preferSerialization)) {
-            preferSerialization = serialization != null ? serialization : 
DEFAULT_PREFER_SERIALIZATION;
+            preferSerialization = serialization;
         }
     }
 
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/config/ProtocolConfig.java 
b/dubbo-common/src/main/java/org/apache/dubbo/config/ProtocolConfig.java
index bb5b6e0141..5586f9c64b 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/ProtocolConfig.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/ProtocolConfig.java
@@ -29,6 +29,7 @@ import static 
org.apache.dubbo.common.constants.CommonConstants.DUBBO_PROTOCOL;
 import static 
org.apache.dubbo.common.constants.CommonConstants.SSL_ENABLED_KEY;
 import static 
org.apache.dubbo.common.constants.CommonConstants.THREAD_POOL_EXHAUSTED_LISTENERS_KEY;
 import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.COMMON_UNEXPECTED_EXCEPTION;
+import static 
org.apache.dubbo.common.constants.ProviderConstants.DEFAULT_PREFER_SERIALIZATION;
 
 /**
  * ProtocolConfig
@@ -115,6 +116,18 @@ public class ProtocolConfig extends AbstractConfig {
      */
     private String serialization;
 
+    /**
+     * If the parameter has a value, the consumer will read the parameter 
first.
+     * If the Dubbo Sdk you are using contains the serialization type, the 
serialization method specified by the argument is used.
+     * <p>
+     * When this parameter is null or the serialization type specified by this 
parameter does not exist in the Dubbo SDK, the serialization type specified by 
serialization is used.
+     * If the Dubbo SDK if still does not exist, the default type of the Dubbo 
SDK is used.
+     * For Dubbo SDK >= 3.2, <code>preferSerialization</code> takes precedence 
over <code>serialization</code>
+     * <p>
+     * The configuration supports multiple, which are separated by commas.Such 
as:<code>fastjson2,fastjson,hessian2</code>
+     */
+    private String preferSerialization; // default:fastjson2,hessian2
+
     /**
      * Charset
      */
@@ -249,6 +262,10 @@ public class ProtocolConfig extends AbstractConfig {
         if (name == null) {
             name = DUBBO_PROTOCOL;
         }
+
+        if (StringUtils.isBlank(preferSerialization)) {
+            preferSerialization = serialization != null ? serialization : 
DEFAULT_PREFER_SERIALIZATION;
+        }
     }
 
     @Parameter(excluded = true)
@@ -387,6 +404,14 @@ public class ProtocolConfig extends AbstractConfig {
         this.serialization = serialization;
     }
 
+    public String getPreferSerialization() {
+        return preferSerialization;
+    }
+
+    public void setPreferSerialization(String preferSerialization) {
+        this.preferSerialization = preferSerialization;
+    }
+
     public String getCharset() {
         return charset;
     }
diff --git 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractServiceConfigTest.java
 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractServiceConfigTest.java
index 2ceeb7d74c..15039303ce 100644
--- 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractServiceConfigTest.java
+++ 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractServiceConfigTest.java
@@ -27,7 +27,6 @@ import java.util.Map;
 
 import static 
org.apache.dubbo.common.constants.CommonConstants.EXPORTER_LISTENER_KEY;
 import static 
org.apache.dubbo.common.constants.CommonConstants.SERVICE_FILTER_KEY;
-import static 
org.apache.dubbo.common.constants.ProviderConstants.DEFAULT_PREFER_SERIALIZATION;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.hasEntry;
@@ -192,7 +191,7 @@ class AbstractServiceConfigTest {
         assertNull(serviceConfig.getPreferSerialization());
 
         serviceConfig.checkDefault();
-        assertThat(serviceConfig.getPreferSerialization(), 
equalTo(DEFAULT_PREFER_SERIALIZATION));
+        assertNull(serviceConfig.getPreferSerialization());
 
         serviceConfig = new ServiceConfig();
         serviceConfig.setSerialization("x-serialization");
@@ -208,7 +207,7 @@ class AbstractServiceConfigTest {
         assertNull(serviceConfig.getPreferSerialization());
 
         serviceConfig.refresh();
-        assertThat(serviceConfig.getPreferSerialization(), 
equalTo(DEFAULT_PREFER_SERIALIZATION));
+        assertNull(serviceConfig.getPreferSerialization());
 
         serviceConfig = new ServiceConfig();
         serviceConfig.setSerialization("x-serialization");
diff --git 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ProtocolConfigTest.java
 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ProtocolConfigTest.java
index f63c9625fc..d15052b4ad 100644
--- 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ProtocolConfigTest.java
+++ 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ProtocolConfigTest.java
@@ -32,10 +32,12 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
+import static 
org.apache.dubbo.common.constants.ProviderConstants.DEFAULT_PREFER_SERIALIZATION;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.hasEntry;
 import static org.hamcrest.Matchers.is;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 class ProtocolConfigTest {
 
@@ -385,4 +387,38 @@ class ProtocolConfigTest {
         }
     }
 
-}
\ No newline at end of file
+
+    @Test
+    void testPreferSerializationDefault1() throws Exception {
+        ProtocolConfig protocolConfig = new ProtocolConfig();
+        assertNull(protocolConfig.getPreferSerialization());
+
+        protocolConfig.checkDefault();
+        assertThat(protocolConfig.getPreferSerialization(), 
equalTo(DEFAULT_PREFER_SERIALIZATION));
+
+        protocolConfig = new ProtocolConfig();
+        protocolConfig.setSerialization("x-serialization");
+        assertNull(protocolConfig.getPreferSerialization());
+
+        protocolConfig.checkDefault();
+        assertThat(protocolConfig.getPreferSerialization(), 
equalTo("x-serialization"));
+    }
+
+    @Test
+    void testPreferSerializationDefault2() throws Exception {
+        ProtocolConfig protocolConfig = new ProtocolConfig();
+        assertNull(protocolConfig.getPreferSerialization());
+
+        protocolConfig.refresh();
+        assertThat(protocolConfig.getPreferSerialization(), 
equalTo(DEFAULT_PREFER_SERIALIZATION));
+
+        protocolConfig = new ProtocolConfig();
+        protocolConfig.setSerialization("x-serialization");
+        assertNull(protocolConfig.getPreferSerialization());
+
+        protocolConfig.refresh();
+        assertThat(protocolConfig.getPreferSerialization(), 
equalTo("x-serialization"));
+    }
+
+
+}
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 15692907b8..5df2073329 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
@@ -1383,6 +1383,11 @@
                 <xsd:documentation><![CDATA[ The protocol serialization. 
]]></xsd:documentation>
             </xsd:annotation>
         </xsd:attribute>
+        <xsd:attribute name="prefer-serialization" type="xsd:string">
+            <xsd:annotation>
+                <xsd:documentation><![CDATA[ The prefer serialization protocol 
of service, multiple serialization protocol are separated by commas, default 
fastjson2,hessian2. ]]></xsd:documentation>
+            </xsd:annotation>
+        </xsd:attribute>
         <xsd:attribute name="keepalive" type="xsd:boolean">
             <xsd:annotation>
                 <xsd:documentation><![CDATA[ The protocol keepAlive. 
]]></xsd:documentation>

Reply via email to