Affects: 5.2.10 and up
The org.springframework.util.MimeType class implements Serializable interface, but since the resolvedCharset field was introduced in 5.2.10, serialization with charset will fail since Charset class does not implement Serializable.
Code to reproduce:
MimeType mimeType = new MimeType("text", "plain", StandardCharsets.UTF_8);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(mimeType);
On OpenJDK 8 & 11 (Ubuntu), the above gives java.io.NotSerializableException.
Comment From: sbrannen
Thanks for raising the issue.
I have confirmed this by adding the following test to MimeTypeTests
.
@Test
void isSerializable() throws Exception {
MimeType mimeType = new MimeType("text", "plain", StandardCharsets.UTF_8);
SerializationTestUtils.testSerialization(mimeType);
}
That test fails on master
with:
java.io.NotSerializableException: sun.nio.cs.UTF_8
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at org.springframework.core.testfixture.io.SerializationTestUtils.testSerialization(SerializationTestUtils.java:40)
at org.springframework.util.MimeTypeTests.isSerializable(MimeTypeTests.java:49)
Comment From: sbrannen
Regression caused by #25808.