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.