Add support for serializing and deserializing java.nio.path
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/DefaultSerializers.java b/src/main/java/org/eclipse/yasson/internal/serializer/DefaultSerializers.java
index 9f2fd22..28f6f65 100644
--- a/src/main/java/org/eclipse/yasson/internal/serializer/DefaultSerializers.java
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/DefaultSerializers.java
@@ -16,6 +16,7 @@
import java.math.BigInteger;
import java.net.URI;
import java.net.URL;
+import java.nio.file.Path;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
@@ -118,6 +119,8 @@
new SerializerProviderWrapper(OptionalIntTypeSerializer::new, OptionalIntTypeDeserializer::new));
serializers.put(OptionalLong.class,
new SerializerProviderWrapper(OptionalLongTypeSerializer::new, OptionalLongTypeDeserializer::new));
+ serializers.put(Path.class,
+ new SerializerProviderWrapper(PathTypeSerializer::new, PathTypeDeserializer::new));
serializers.put(Short.class, new SerializerProviderWrapper(ShortTypeSerializer::new, ShortTypeDeserializer::new));
serializers.put(Short.TYPE, new SerializerProviderWrapper(ShortTypeSerializer::new, ShortTypeDeserializer::new));
serializers.put(String.class, new SerializerProviderWrapper(StringTypeSerializer::new, StringTypeDeserializer::new));
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/PathTypeDeserializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/PathTypeDeserializer.java
new file mode 100644
index 0000000..87d231a
--- /dev/null
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/PathTypeDeserializer.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 IBM and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0,
+ * or the Eclipse Distribution License v. 1.0 which is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
+ */
+
+package org.eclipse.yasson.internal.serializer;
+
+import java.lang.reflect.Type;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import org.eclipse.yasson.internal.Unmarshaller;
+import org.eclipse.yasson.internal.model.customization.Customization;
+
+public class PathTypeDeserializer extends AbstractValueTypeDeserializer<Path> {
+ public PathTypeDeserializer(Customization customization) {
+ super(Path.class, customization);
+ }
+
+ @Override
+ protected Path deserialize(String jsonValue, Unmarshaller unmarshaller, Type rtType) {
+ return Paths.get(jsonValue);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/PathTypeSerializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/PathTypeSerializer.java
new file mode 100644
index 0000000..491ca13
--- /dev/null
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/PathTypeSerializer.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 IBM and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0,
+ * or the Eclipse Distribution License v. 1.0 which is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
+ */
+
+package org.eclipse.yasson.internal.serializer;
+
+import java.nio.file.Path;
+
+import javax.json.stream.JsonGenerator;
+
+import org.eclipse.yasson.internal.Marshaller;
+import org.eclipse.yasson.internal.model.customization.Customization;
+
+public class PathTypeSerializer extends AbstractValueTypeSerializer<Path> {
+ public PathTypeSerializer(Customization customization) {
+ super(customization);
+ }
+
+ @Override
+ protected void serialize(Path obj, JsonGenerator generator, Marshaller marshaller) {
+ generator.write(obj.toString());
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/org/eclipse/yasson/defaultmapping/typeConvertors/DefaultSerializersTest.java b/src/test/java/org/eclipse/yasson/defaultmapping/typeConvertors/DefaultSerializersTest.java
index 20a4f83..4eb65cd 100644
--- a/src/test/java/org/eclipse/yasson/defaultmapping/typeConvertors/DefaultSerializersTest.java
+++ b/src/test/java/org/eclipse/yasson/defaultmapping/typeConvertors/DefaultSerializersTest.java
@@ -13,6 +13,7 @@
package org.eclipse.yasson.defaultmapping.typeConvertors;
import org.junit.jupiter.api.*;
+
import static org.junit.jupiter.api.Assertions.*;
import static org.eclipse.yasson.Jsonbs.*;
@@ -24,6 +25,10 @@
import javax.json.bind.Jsonb;
import javax.json.bind.JsonbConfig;
import javax.json.bind.config.BinaryDataStrategy;
+
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.Base64;
import java.util.UUID;
@@ -108,7 +113,7 @@
result = jsonb.fromJson(base64UrlEncodedJson, ByteArrayWrapper.class);
assertArrayEquals(array, result.array);
}
-
+
@Test
public void testUUID() {
UUID uuid = UUID.randomUUID();
@@ -116,4 +121,23 @@
UUID result = defaultJsonb.fromJson(json, UUID.class);
assertEquals(uuid, result);
}
+
+ @Test
+ public void serializeObjectWithPth() {
+
+ Path expectedPath = Paths.get("/tmp/hello/me.txt");
+ String expectedPathString = expectedPath.toString().replace("\\", "\\\\");
+ String expectedJson = "{\"path\":\"" + expectedPathString + "\"}";
+ final ObjectWithPath objectWithPath = new ObjectWithPath();
+ objectWithPath.path = expectedPath;
+ final String s = defaultJsonb.toJson(objectWithPath);
+ assertEquals(expectedJson, s);
+
+ ObjectWithPath actualObject = defaultJsonb.fromJson(expectedJson, ObjectWithPath.class);
+ assertEquals(expectedPath, actualObject.path);
+ }
+
+ public static class ObjectWithPath {
+ public Path path;
+ }
}
diff --git a/src/test/java/org/eclipse/yasson/serializers/SerializersTest.java b/src/test/java/org/eclipse/yasson/serializers/SerializersTest.java
index 506497f..a8983e2 100644
--- a/src/test/java/org/eclipse/yasson/serializers/SerializersTest.java
+++ b/src/test/java/org/eclipse/yasson/serializers/SerializersTest.java
@@ -41,6 +41,9 @@
import javax.json.bind.config.PropertyOrderStrategy;
import javax.json.bind.serializer.DeserializationContext;
import javax.json.bind.serializer.JsonbDeserializer;
+import javax.json.bind.serializer.JsonbSerializer;
+import javax.json.bind.serializer.SerializationContext;
+import javax.json.stream.JsonGenerator;
import javax.json.stream.JsonParser;
import org.eclipse.yasson.TestTypeToken;