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);
+        }
+    }
+}

Reply via email to