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>