Skip to content

Commit a516e29

Browse files
authored
Made DefaultSdkAutoConstructList and DefaultSdkAutoConstructMap serializable, added serialVersionUID (#5938)
1 parent 68200df commit a516e29

File tree

5 files changed

+75
-2
lines changed

5 files changed

+75
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "feature",
3+
"category": "AWS SDK for Java v2",
4+
"contributor": "",
5+
"description": "Made DefaultSdkAutoConstructList and DefaultSdkAutoConstructMap serializable"
6+
}

core/sdk-core/src/main/java/software/amazon/awssdk/core/util/DefaultSdkAutoConstructList.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
package software.amazon.awssdk.core.util;
1717

18+
import java.io.Serializable;
1819
import java.util.Collection;
1920
import java.util.Collections;
2021
import java.util.Iterator;
@@ -30,9 +31,11 @@
3031
* @param <T> The element type.
3132
*/
3233
@SdkProtectedApi
33-
public final class DefaultSdkAutoConstructList<T> implements SdkAutoConstructList<T> {
34+
public final class DefaultSdkAutoConstructList<T> implements SdkAutoConstructList<T>, Serializable {
3435
private static final DefaultSdkAutoConstructList INSTANCE = new DefaultSdkAutoConstructList();
3536

37+
private static final long serialVersionUID = 1L;
38+
3639
private final List impl = Collections.emptyList();
3740

3841
private DefaultSdkAutoConstructList() {
@@ -173,4 +176,7 @@ public String toString() {
173176
return impl.toString();
174177
}
175178

179+
private Object readResolve() {
180+
return getInstance();
181+
}
176182
}

core/sdk-core/src/main/java/software/amazon/awssdk/core/util/DefaultSdkAutoConstructMap.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
package software.amazon.awssdk.core.util;
1717

18+
import java.io.Serializable;
1819
import java.util.Collection;
1920
import java.util.Collections;
2021
import java.util.Map;
@@ -30,9 +31,11 @@
3031
* @param <V> The value type.
3132
*/
3233
@SdkProtectedApi
33-
public final class DefaultSdkAutoConstructMap<K, V> implements SdkAutoConstructMap<K, V> {
34+
public final class DefaultSdkAutoConstructMap<K, V> implements SdkAutoConstructMap<K, V>, Serializable {
3435
private static final DefaultSdkAutoConstructMap INSTANCE = new DefaultSdkAutoConstructMap();
3536

37+
private static final long serialVersionUID = 1L;
38+
3639
private final Map<K, V> impl = Collections.emptyMap();
3740

3841
private DefaultSdkAutoConstructMap() {
@@ -117,4 +120,8 @@ public int hashCode() {
117120
public String toString() {
118121
return impl.toString();
119122
}
123+
124+
private Object readResolve() {
125+
return getInstance();
126+
}
120127
}

core/sdk-core/src/test/java/software/amazon/awssdk/core/util/DefaultSdkAutoConstructListTest.java

+27
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@
1616
package software.amazon.awssdk.core.util;
1717

1818
import static org.assertj.core.api.Assertions.assertThat;
19+
import static org.junit.Assert.assertNotNull;
20+
import static org.junit.jupiter.api.Assertions.assertSame;
1921

22+
import java.io.ByteArrayInputStream;
23+
import java.io.ByteArrayOutputStream;
24+
import java.io.ObjectInputStream;
25+
import java.io.ObjectOutputStream;
2026
import java.util.LinkedList;
2127
import org.junit.jupiter.api.Test;
2228

@@ -42,4 +48,25 @@ public void hashCode_sameAsEmptyList() {
4248
public void toString_emptyList() {
4349
assertThat(INSTANCE.toString()).isEqualTo("[]");
4450
}
51+
52+
@Test
53+
public void serialization_sameSingletonInstance() throws Exception {
54+
DefaultSdkAutoConstructList<?> originalInstance = DefaultSdkAutoConstructList.getInstance();
55+
56+
// Serialize the object
57+
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
58+
ObjectOutputStream objectOut = new ObjectOutputStream(byteOut);
59+
objectOut.writeObject(originalInstance);
60+
objectOut.close();
61+
62+
// Deserialize the object
63+
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
64+
ObjectInputStream objectIn = new ObjectInputStream(byteIn);
65+
DefaultSdkAutoConstructList<?> deserializedInstance = (DefaultSdkAutoConstructList<?>) objectIn.readObject();
66+
objectIn.close();
67+
68+
// Assert that deserialization was successful
69+
assertNotNull(deserializedInstance);
70+
assertSame(originalInstance, deserializedInstance, "Deserialized instance should be the same singleton instance");
71+
}
4572
}

core/sdk-core/src/test/java/software/amazon/awssdk/core/util/DefaultSdkAutoConstructMapTest.java

+27
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@
1616
package software.amazon.awssdk.core.util;
1717

1818
import static org.assertj.core.api.Assertions.assertThat;
19+
import static org.junit.Assert.assertNotNull;
20+
import static org.junit.jupiter.api.Assertions.assertSame;
1921

22+
import java.io.ByteArrayInputStream;
23+
import java.io.ByteArrayOutputStream;
24+
import java.io.ObjectInputStream;
25+
import java.io.ObjectOutputStream;
2026
import java.util.HashMap;
2127
import org.junit.jupiter.api.Test;
2228

@@ -41,4 +47,25 @@ public void hashCode_sameAsEmptyMap() {
4147
public void toString_emptyMap() {
4248
assertThat(AUTO_CONSTRUCT_MAP.toString()).isEqualTo("{}");
4349
}
50+
51+
@Test
52+
public void serialization_sameSingletonInstance() throws Exception {
53+
DefaultSdkAutoConstructMap<?, ?> originalInstance = DefaultSdkAutoConstructMap.getInstance();
54+
55+
// Serialize the object
56+
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
57+
ObjectOutputStream objectOut = new ObjectOutputStream(byteOut);
58+
objectOut.writeObject(originalInstance);
59+
objectOut.close();
60+
61+
// Deserialize the object
62+
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
63+
ObjectInputStream objectIn = new ObjectInputStream(byteIn);
64+
DefaultSdkAutoConstructMap<?, ?> deserializedInstance = (DefaultSdkAutoConstructMap<?, ?>) objectIn.readObject();
65+
objectIn.close();
66+
67+
// Assert that deserialization was successful
68+
assertNotNull(deserializedInstance);
69+
assertSame(originalInstance, deserializedInstance, "Deserialized instance should be the same singleton instance");
70+
}
4471
}

0 commit comments

Comments
 (0)