This is an automated email from the ASF dual-hosted git repository.
crazyhzm 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 fbbca9d405 Fix config unable to serialize (#11267)
fbbca9d405 is described below
commit fbbca9d4053a869f631958055e045917b5cf2bef
Author: Albumen Kevin <[email protected]>
AuthorDate: Tue Jan 10 14:12:17 2023 +0800
Fix config unable to serialize (#11267)
---
.../org/apache/dubbo/config/AbstractConfig.java | 48 ++++++++++++----------
.../dubbo/config/AbstractInterfaceConfig.java | 20 ++++-----
.../apache/dubbo/config/ConsumerConfigTest.java | 45 +++++++++++++++++---
3 files changed, 76 insertions(+), 37 deletions(-)
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractConfig.java
b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractConfig.java
index e13935b99f..413521cf91 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractConfig.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractConfig.java
@@ -16,6 +16,28 @@
*/
package org.apache.dubbo.config;
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.MethodDescriptor;
+import java.beans.PropertyDescriptor;
+import java.beans.Transient;
+import java.io.Serializable;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicBoolean;
+
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.config.ConfigurationUtils;
import org.apache.dubbo.common.config.Environment;
@@ -39,27 +61,6 @@ import org.apache.dubbo.rpc.model.ModuleModel;
import org.apache.dubbo.rpc.model.ScopeModel;
import org.apache.dubbo.rpc.model.ScopeModelUtil;
-import java.beans.BeanInfo;
-import java.beans.IntrospectionException;
-import java.beans.Introspector;
-import java.beans.MethodDescriptor;
-import java.beans.PropertyDescriptor;
-import java.io.Serializable;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicBoolean;
-
import static
org.apache.dubbo.common.constants.LoggerCodeConstants.COMMON_FAILED_OVERRIDE_FIELD;
import static
org.apache.dubbo.common.constants.LoggerCodeConstants.COMMON_REFLECTIVE_OPERATION_FAILED;
import static
org.apache.dubbo.common.constants.LoggerCodeConstants.COMMON_UNEXPECTED_EXCEPTION;
@@ -110,7 +111,7 @@ public abstract class AbstractConfig implements
Serializable {
* <b>NOTE:</b> the model maybe changed during config processing,
* the extension spi instance needs to be reinitialized after changing the
model!
*/
- private volatile ScopeModel scopeModel;
+ private transient volatile ScopeModel scopeModel;
public AbstractConfig() {
this(null);
@@ -383,6 +384,7 @@ public abstract class AbstractConfig implements
Serializable {
return result;
}
+ @Transient
public ApplicationModel getApplicationModel() {
if (scopeModel == null) {
setScopeModel(getDefaultModel());
@@ -396,6 +398,7 @@ public abstract class AbstractConfig implements
Serializable {
}
}
+ @Transient
public ScopeModel getScopeModel() {
if (scopeModel == null) {
setScopeModel(getDefaultModel());
@@ -403,6 +406,7 @@ public abstract class AbstractConfig implements
Serializable {
return scopeModel;
}
+ @Transient
protected ScopeModel getDefaultModel() {
return ApplicationModel.defaultModel();
}
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
index 3d94f29c0c..1fb31d698a 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
@@ -16,6 +16,15 @@
*/
package org.apache.dubbo.config;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.Version;
import org.apache.dubbo.common.config.ConfigurationUtils;
@@ -35,15 +44,6 @@ import org.apache.dubbo.rpc.model.ScopeModel;
import org.apache.dubbo.rpc.model.ScopeModelUtil;
import org.apache.dubbo.rpc.model.ServiceMetadata;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
import static
org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;
import static
org.apache.dubbo.common.constants.CommonConstants.DUBBO_VERSION_KEY;
import static
org.apache.dubbo.common.constants.CommonConstants.INVOKER_LISTENER_KEY;
@@ -74,7 +74,7 @@ public abstract class AbstractInterfaceConfig extends
AbstractMethodConfig {
/**
* The classLoader of interface belong to
*/
- protected ClassLoader interfaceClassLoader;
+ protected transient ClassLoader interfaceClassLoader;
/**
* The remote service version the customer/provider side will reference
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConsumerConfigTest.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConsumerConfigTest.java
index 7f868651cf..84d6c926ae 100644
---
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConsumerConfigTest.java
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConsumerConfigTest.java
@@ -17,18 +17,19 @@
package org.apache.dubbo.config;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+
+import org.apache.dubbo.common.utils.JsonUtils;
import org.apache.dubbo.config.api.DemoService;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.rpc.model.ApplicationModel;
-
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import java.util.Collection;
-import java.util.Map;
-
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
@@ -243,4 +244,38 @@ class ConsumerConfigTest {
Map<String, String> metaData = consumerConfig.getMetaData();
Assertions.assertEquals(0, metaData.size(), "Expect empty metadata but
found: "+metaData);
}
-}
\ No newline at end of file
+
+ @Test
+ void testSerialize() {
+ ConsumerConfig consumerConfig = new ConsumerConfig();
+ consumerConfig.setCorethreads(1);
+ consumerConfig.setQueues(1);
+ consumerConfig.setThreads(1);
+ consumerConfig.setThreadpool("Mock");
+ consumerConfig.setGroup("Test");
+ consumerConfig.setMeshEnable(false);
+ consumerConfig.setReferThreadNum(2);
+ consumerConfig.setShareconnections(2);
+ consumerConfig.setTimeout(2);
+ consumerConfig.setUrlMergeProcessor("test");
+ consumerConfig.setReferBackground(false);
+ consumerConfig.setActives(1);
+ consumerConfig.setAsync(false);
+ consumerConfig.setCache("false");
+ consumerConfig.setCallbacks(1);
+ consumerConfig.setConnections(1);
+
consumerConfig.setInterfaceClassLoader(Thread.currentThread().getContextClassLoader());
+ consumerConfig.setApplication(new ApplicationConfig());
+ consumerConfig.setRegistries(Collections.singletonList(new
RegistryConfig()));
+ consumerConfig.setModule(new ModuleConfig());
+ consumerConfig.setMetadataReportConfig(new MetadataReportConfig());
+ consumerConfig.setMonitor(new MonitorConfig());
+ consumerConfig.setConfigCenter(new ConfigCenterConfig());
+
+ try {
+ JsonUtils.getJson().toJson(consumerConfig);
+ } catch (Throwable t) {
+ Assertions.fail(t);
+ }
+ }
+}