diff --git a/dropwizard-util/src/main/java/io/dropwizard/util/DataSize.java b/dropwizard-util/src/main/java/io/dropwizard/util/DataSize.java index c375ee9bbb..d6fc86f149 100644 --- a/dropwizard-util/src/main/java/io/dropwizard/util/DataSize.java +++ b/dropwizard-util/src/main/java/io/dropwizard/util/DataSize.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; +import java.io.Serializable; import java.util.Collections; import java.util.Locale; import java.util.SortedMap; @@ -19,9 +20,10 @@ * @see DataSizeUnit * @since 2.0 */ -public class DataSize implements Comparable { - private static final Pattern SIZE_PATTERN = Pattern.compile("(\\d+)\\s*(\\S*)"); +public class DataSize implements Comparable, Serializable { + private static final long serialVersionUID = 8517642678733072800L; + private static final Pattern SIZE_PATTERN = Pattern.compile("(\\d+)\\s*(\\S*)"); private static final SortedMap SUFFIXES; static { diff --git a/dropwizard-util/src/main/java/io/dropwizard/util/Duration.java b/dropwizard-util/src/main/java/io/dropwizard/util/Duration.java index 53ac4393b9..790c14d5b3 100644 --- a/dropwizard-util/src/main/java/io/dropwizard/util/Duration.java +++ b/dropwizard-util/src/main/java/io/dropwizard/util/Duration.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; +import java.io.Serializable; import java.util.Collections; import java.util.HashMap; import java.util.Locale; @@ -13,9 +14,10 @@ import static java.util.Objects.requireNonNull; -public class Duration implements Comparable { - private static final Pattern DURATION_PATTERN = Pattern.compile("(\\d+)\\s*(\\S+)"); +public class Duration implements Comparable, Serializable { + private static final long serialVersionUID = 1445611723318059801L; + private static final Pattern DURATION_PATTERN = Pattern.compile("(\\d+)\\s*(\\S+)"); private static final Map SUFFIXES; static { diff --git a/dropwizard-util/src/main/java/io/dropwizard/util/Size.java b/dropwizard-util/src/main/java/io/dropwizard/util/Size.java index e0a996d98a..cf37a65cea 100644 --- a/dropwizard-util/src/main/java/io/dropwizard/util/Size.java +++ b/dropwizard-util/src/main/java/io/dropwizard/util/Size.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; +import java.io.Serializable; import java.util.Collections; import java.util.Locale; import java.util.SortedMap; @@ -16,9 +17,10 @@ * @deprecated Use {@link DataSize} for correct SI and IEC prefixes. */ @Deprecated -public class Size implements Comparable { - private static final Pattern SIZE_PATTERN = Pattern.compile("(\\d+)\\s*(\\S+)"); +public class Size implements Comparable, Serializable { + private static final long serialVersionUID = 6790991929249604526L; + private static final Pattern SIZE_PATTERN = Pattern.compile("(\\d+)\\s*(\\S+)"); private static final SortedMap SUFFIXES; static { diff --git a/dropwizard-util/src/test/java/io/dropwizard/util/DataSizeTest.java b/dropwizard-util/src/test/java/io/dropwizard/util/DataSizeTest.java index e6bf37d059..be84fb155e 100644 --- a/dropwizard-util/src/test/java/io/dropwizard/util/DataSizeTest.java +++ b/dropwizard-util/src/test/java/io/dropwizard/util/DataSizeTest.java @@ -3,7 +3,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; 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 static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -693,4 +697,23 @@ void testFromSize() { assertThat(DataSize.fromSize(Size.gigabytes(5L))).isEqualTo(DataSize.gibibytes(5L)); assertThat(DataSize.fromSize(Size.terabytes(5L))).isEqualTo(DataSize.tebibytes(5L)); } + + @Test + void testSerialization() throws IOException, ClassNotFoundException { + final DataSize size = DataSize.kibibytes(42L); + final byte[] bytes; + try (final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + final ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream)) { + objectOutputStream.writeObject(size); + bytes = outputStream.toByteArray(); + } + + try (final ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes); + final ObjectInputStream objectInputStream = new ObjectInputStream(inputStream)) { + final Object o = objectInputStream.readObject(); + assertThat(o) + .isInstanceOf(DataSize.class) + .isEqualTo(size); + } + } } \ No newline at end of file diff --git a/dropwizard-util/src/test/java/io/dropwizard/util/DurationTest.java b/dropwizard-util/src/test/java/io/dropwizard/util/DurationTest.java index c94ebee1f5..5b65cb1c5c 100644 --- a/dropwizard-util/src/test/java/io/dropwizard/util/DurationTest.java +++ b/dropwizard-util/src/test/java/io/dropwizard/util/DurationTest.java @@ -3,7 +3,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; 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.util.concurrent.TimeUnit; import static org.assertj.core.api.Assertions.assertThat; @@ -864,4 +868,23 @@ public void deserializesCorrectlyWithJackson() throws IOException { assertThat(mapper.readValue("\"1 day\"", Duration.class)).isEqualTo(Duration.days(1L)); assertThat(mapper.readValue("\"2 days\"", Duration.class)).isEqualTo(Duration.days(2L)); } + + @Test + void testSerialization() throws IOException, ClassNotFoundException { + final Duration duration = Duration.minutes(42L); + final byte[] bytes; + try (final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + final ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream)) { + objectOutputStream.writeObject(duration); + bytes = outputStream.toByteArray(); + } + + try (final ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes); + final ObjectInputStream objectInputStream = new ObjectInputStream(inputStream)) { + final Object o = objectInputStream.readObject(); + assertThat(o) + .isInstanceOf(Duration.class) + .isEqualTo(duration); + } + } } diff --git a/dropwizard-util/src/test/java/io/dropwizard/util/SizeTest.java b/dropwizard-util/src/test/java/io/dropwizard/util/SizeTest.java index 96a4eef24a..da8be5c535 100644 --- a/dropwizard-util/src/test/java/io/dropwizard/util/SizeTest.java +++ b/dropwizard-util/src/test/java/io/dropwizard/util/SizeTest.java @@ -3,7 +3,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; 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 static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; @@ -585,4 +589,23 @@ void testToDataSize() { assertThat(Size.gigabytes(5L).toDataSize()).isEqualTo(DataSize.gibibytes(5L)); assertThat(Size.terabytes(5L).toDataSize()).isEqualTo(DataSize.tebibytes(5L)); } + + @Test + void testSerialization() throws IOException, ClassNotFoundException { + final Size size = Size.megabytes(42L); + final byte[] bytes; + try (final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + final ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream)) { + objectOutputStream.writeObject(size); + bytes = outputStream.toByteArray(); + } + + try (final ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes); + final ObjectInputStream objectInputStream = new ObjectInputStream(inputStream)) { + final Object o = objectInputStream.readObject(); + assertThat(o) + .isInstanceOf(Size.class) + .isEqualTo(size); + } + } }