This is an automated email from the ASF dual-hosted git repository.
crazyhzm pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.0 by this push:
new 51529c34c5 Fix transient init (#10462)
51529c34c5 is described below
commit 51529c34c584e51f3ebaa07d8dc3953457a85522
Author: Albumen Kevin <[email protected]>
AuthorDate: Mon Aug 15 16:04:42 2022 +0800
Fix transient init (#10462)
---
.../org/apache/dubbo/metadata/MetadataInfo.java | 5 ++++
.../apache/dubbo/metadata/MetadataInfoTest.java | 30 ++++++++++++++++++++++
.../client/OverrideInstanceAddressURL.java | 4 +++
3 files changed, 39 insertions(+)
diff --git
a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java
b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java
index b1d852c96f..645eb9e698 100644
---
a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java
+++
b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java
@@ -434,6 +434,11 @@ public class MetadataInfo implements Serializable {
return new MetadataInfo(app, revision, services, initiated,
extendParams, instanceParams, updated, subscribedServiceURLs,
exportedServiceURLs, loader);
}
+ private Object readResolve() {
+ // create a new object from the deserialized one, in order to call
constructor
+ return new MetadataInfo(this.app, this.revision, this.services);
+ }
+
public static class ServiceInfo implements Serializable {
private String name;
private String group;
diff --git
a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/MetadataInfoTest.java
b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/MetadataInfoTest.java
index f2f76f4565..ccd91deb05 100644
---
a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/MetadataInfoTest.java
+++
b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/MetadataInfoTest.java
@@ -22,7 +22,14 @@ import org.apache.dubbo.common.utils.JsonUtils;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.lang.reflect.Field;
import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
import static
org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
@@ -164,6 +171,29 @@ public class MetadataInfoTest {
}
+ @Test
+ public void testJdkSerialize() throws IOException, ClassNotFoundException,
NoSuchFieldException, IllegalAccessException {
+ ByteArrayOutputStream byteArrayOutputStream = new
ByteArrayOutputStream();
+ ObjectOutputStream objectOutputStream = new
ObjectOutputStream(byteArrayOutputStream);
+ MetadataInfo metadataInfo = new MetadataInfo("demo");
+ metadataInfo.addService(url);
+ objectOutputStream.writeObject(metadataInfo);
+ objectOutputStream.close();
+ byteArrayOutputStream.close();
+ byte[] bytes = byteArrayOutputStream.toByteArray();
+
+ ByteArrayInputStream byteArrayInputStream = new
ByteArrayInputStream(bytes);
+ ObjectInputStream objectInputStream = new
ObjectInputStream(byteArrayInputStream);
+ MetadataInfo metadataInfo2 = (MetadataInfo)
objectInputStream.readObject();
+ objectInputStream.close();
+
+ Assertions.assertEquals(metadataInfo, metadataInfo2);
+ Field initiatedField =
MetadataInfo.class.getDeclaredField("initiated");
+ initiatedField.setAccessible(true);
+ Assertions.assertInstanceOf(AtomicBoolean.class,
initiatedField.get(metadataInfo2));
+
Assertions.assertFalse(((AtomicBoolean)initiatedField.get(metadataInfo2)).get());
+ }
+
@Test
public void testCal() {
MetadataInfo metadataInfo = new MetadataInfo("demo");
diff --git
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/OverrideInstanceAddressURL.java
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/OverrideInstanceAddressURL.java
index a06cdf2b85..c02ef138e3 100644
---
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/OverrideInstanceAddressURL.java
+++
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/OverrideInstanceAddressURL.java
@@ -339,6 +339,10 @@ public class OverrideInstanceAddressURL extends
InstanceAddressURL {
return originUrl.toString() + ", overrideParams: " +
overrideParams.toString();
}
+ private Object readResolve() {
+ // create a new object from the deserialized one
+ return new OverrideInstanceAddressURL(this.originUrl,
this.overrideParams);
+ }
@Override
protected OverrideInstanceAddressURL newURL(URLAddress urlAddress,
URLParam urlParam) {
return new OverrideInstanceAddressURL(originUrl, overrideParams);