diff --git a/src/main/java/io/vertx/core/json/Json.java b/src/main/java/io/vertx/core/json/Json.java
index a8b0997cd..90b398b6b 100644
--- a/src/main/java/io/vertx/core/json/Json.java
+++ b/src/main/java/io/vertx/core/json/Json.java
@@ -11,50 +11,14 @@
package io.vertx.core.json;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.databind.module.SimpleModule;
import io.vertx.core.buffer.Buffer;
-import io.vertx.core.json.impl.JacksonCodec;
import io.vertx.core.spi.json.JsonCodec;
-import java.time.Instant;
-
/**
* @author Tim Fox
*/
public class Json {
- public static ObjectMapper mapper = new ObjectMapper();
- public static ObjectMapper prettyMapper = new ObjectMapper();
-
- static {
- initialize();
- }
-
- private static void initialize() {
- // Non-standard JSON but we allow C style comments in our JSON
- mapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
-
- prettyMapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
- prettyMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
-
- SimpleModule module = new SimpleModule();
- // custom types
- module.addSerializer(JsonObject.class, new JsonObjectSerializer());
- module.addSerializer(JsonArray.class, new JsonArraySerializer());
- // he have 2 extensions: RFC-7493
- module.addSerializer(Instant.class, new InstantSerializer());
- module.addDeserializer(Instant.class, new InstantDeserializer());
- module.addSerializer(byte[].class, new ByteArraySerializer());
- module.addDeserializer(byte[].class, new ByteArrayDeserializer());
-
- mapper.registerModule(module);
- prettyMapper.registerModule(module);
- }
-
/**
* Encode a POJO to JSON using the underlying Jackson mapper.
*
@@ -112,18 +76,6 @@ public class Json {
return decodeValue(str, Object.class);
}
- /**
- * Decode a given JSON string to a POJO of the given type.
- * @param str the JSON string.
- * @param type the type to map to.
- * @param the generic type.
- * @return an instance of T
- * @throws DecodeException when there is a parsing or invalid mapping.
- */
- public static T decodeValue(String str, TypeReference type) throws DecodeException {
- return JacksonCodec.fromString(str, type);
- }
-
/**
* Decode a given JSON buffer.
*
@@ -136,18 +88,6 @@ public class Json {
return decodeValue(buf, Object.class);
}
- /**
- * Decode a given JSON buffer to a POJO of the given class type.
- * @param buf the JSON buffer.
- * @param type the type to map to.
- * @param the generic type.
- * @return an instance of T
- * @throws DecodeException when there is a parsing or invalid mapping.
- */
- public static T decodeValue(Buffer buf, TypeReference type) throws DecodeException {
- return JacksonCodec.fromBuffer(buf, type);
- }
-
/**
* Decode a given JSON buffer to a POJO of the given class type.
* @param buf the JSON buffer.
diff --git a/src/main/java/io/vertx/core/json/ByteArrayDeserializer.java b/src/main/java/io/vertx/core/json/impl/ByteArrayDeserializer.java
similarity index 97%
rename from src/main/java/io/vertx/core/json/ByteArrayDeserializer.java
rename to src/main/java/io/vertx/core/json/impl/ByteArrayDeserializer.java
index 95582f51b..4554285f8 100644
--- a/src/main/java/io/vertx/core/json/ByteArrayDeserializer.java
+++ b/src/main/java/io/vertx/core/json/impl/ByteArrayDeserializer.java
@@ -8,7 +8,7 @@
*
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
*/
-package io.vertx.core.json;
+package io.vertx.core.json.impl;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
diff --git a/src/main/java/io/vertx/core/json/ByteArraySerializer.java b/src/main/java/io/vertx/core/json/impl/ByteArraySerializer.java
similarity index 96%
rename from src/main/java/io/vertx/core/json/ByteArraySerializer.java
rename to src/main/java/io/vertx/core/json/impl/ByteArraySerializer.java
index ce32735f9..4a5b21f43 100644
--- a/src/main/java/io/vertx/core/json/ByteArraySerializer.java
+++ b/src/main/java/io/vertx/core/json/impl/ByteArraySerializer.java
@@ -8,7 +8,7 @@
*
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
*/
-package io.vertx.core.json;
+package io.vertx.core.json.impl;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
diff --git a/src/main/java/io/vertx/core/json/InstantDeserializer.java b/src/main/java/io/vertx/core/json/impl/InstantDeserializer.java
similarity index 97%
rename from src/main/java/io/vertx/core/json/InstantDeserializer.java
rename to src/main/java/io/vertx/core/json/impl/InstantDeserializer.java
index b349568fd..0931e3c97 100644
--- a/src/main/java/io/vertx/core/json/InstantDeserializer.java
+++ b/src/main/java/io/vertx/core/json/impl/InstantDeserializer.java
@@ -8,7 +8,7 @@
*
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
*/
-package io.vertx.core.json;
+package io.vertx.core.json.impl;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
diff --git a/src/main/java/io/vertx/core/json/InstantSerializer.java b/src/main/java/io/vertx/core/json/impl/InstantSerializer.java
similarity index 96%
rename from src/main/java/io/vertx/core/json/InstantSerializer.java
rename to src/main/java/io/vertx/core/json/impl/InstantSerializer.java
index 75e93040b..5cce8e4a5 100644
--- a/src/main/java/io/vertx/core/json/InstantSerializer.java
+++ b/src/main/java/io/vertx/core/json/impl/InstantSerializer.java
@@ -8,7 +8,7 @@
*
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
*/
-package io.vertx.core.json;
+package io.vertx.core.json.impl;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
diff --git a/src/main/java/io/vertx/core/json/impl/JacksonCodec.java b/src/main/java/io/vertx/core/json/impl/JacksonCodec.java
index c24c75174..e83998200 100644
--- a/src/main/java/io/vertx/core/json/impl/JacksonCodec.java
+++ b/src/main/java/io/vertx/core/json/impl/JacksonCodec.java
@@ -14,17 +14,19 @@ package io.vertx.core.json.impl;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.module.SimpleModule;
import io.netty.buffer.ByteBufInputStream;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.json.DecodeException;
import io.vertx.core.json.EncodeException;
-import io.vertx.core.json.Json;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import io.vertx.core.spi.json.JsonCodec;
import java.io.IOException;
import java.io.InputStream;
+import java.time.Instant;
import java.util.List;
import java.util.Map;
@@ -33,9 +35,37 @@ import java.util.Map;
*/
public class JacksonCodec implements JsonCodec {
+ public static ObjectMapper mapper = new ObjectMapper();
+ public static ObjectMapper prettyMapper = new ObjectMapper();
+
+ static {
+ initialize();
+ }
+
+ private static void initialize() {
+ // Non-standard JSON but we allow C style comments in our JSON
+ mapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
+
+ prettyMapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
+ prettyMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
+
+ SimpleModule module = new SimpleModule();
+ // custom types
+ module.addSerializer(JsonObject.class, new JsonObjectSerializer());
+ module.addSerializer(JsonArray.class, new JsonArraySerializer());
+ // he have 2 extensions: RFC-7493
+ module.addSerializer(Instant.class, new InstantSerializer());
+ module.addDeserializer(Instant.class, new InstantDeserializer());
+ module.addSerializer(byte[].class, new ByteArraySerializer());
+ module.addDeserializer(byte[].class, new ByteArrayDeserializer());
+
+ mapper.registerModule(module);
+ prettyMapper.registerModule(module);
+ }
+
@Override
public T fromValue(Object json, Class clazz) {
- T value = Json.mapper.convertValue(json, clazz);
+ T value = JacksonCodec.mapper.convertValue(json, clazz);
if (clazz == Object.class) {
value = (T) adapt(value);
}
@@ -43,7 +73,7 @@ public class JacksonCodec implements JsonCodec {
}
public static T fromValue(Object json, TypeReference type) {
- T value = Json.mapper.convertValue(json, type);
+ T value = JacksonCodec.mapper.convertValue(json, type);
if (type.getType() == Object.class) {
value = (T) adapt(value);
}
@@ -70,7 +100,7 @@ public class JacksonCodec implements JsonCodec {
private static JsonParser createParser(Buffer buf) {
try {
- return Json.mapper.getFactory().createParser((InputStream) new ByteBufInputStream(buf.getByteBuf()));
+ return JacksonCodec.mapper.getFactory().createParser((InputStream) new ByteBufInputStream(buf.getByteBuf()));
} catch (IOException e) {
throw new DecodeException("Failed to decode:" + e.getMessage(), e);
}
@@ -78,7 +108,7 @@ public class JacksonCodec implements JsonCodec {
private static JsonParser createParser(String str) {
try {
- return Json.mapper.getFactory().createParser(str);
+ return JacksonCodec.mapper.getFactory().createParser(str);
} catch (IOException e) {
throw new DecodeException("Failed to decode:" + e.getMessage(), e);
}
@@ -87,7 +117,7 @@ public class JacksonCodec implements JsonCodec {
private static T fromParser(JsonParser parser, Class type) throws DecodeException {
T value;
try {
- value = Json.mapper.readValue(parser, type);
+ value = JacksonCodec.mapper.readValue(parser, type);
} catch (Exception e) {
throw new DecodeException("Failed to decode:" + e.getMessage(), e);
} finally {
@@ -102,7 +132,7 @@ public class JacksonCodec implements JsonCodec {
private static T fromParser(JsonParser parser, TypeReference type) throws DecodeException {
T value;
try {
- value = Json.mapper.readValue(parser, type);
+ value = JacksonCodec.mapper.readValue(parser, type);
} catch (Exception e) {
throw new DecodeException("Failed to decode:" + e.getMessage(), e);
} finally {
@@ -141,7 +171,7 @@ public class JacksonCodec implements JsonCodec {
@Override
public String toString(Object object, boolean pretty) throws EncodeException {
try {
- ObjectMapper mapper = pretty ? Json.prettyMapper : Json.mapper;
+ ObjectMapper mapper = pretty ? JacksonCodec.prettyMapper : JacksonCodec.mapper;
return mapper.writeValueAsString(object);
} catch (Exception e) {
throw new EncodeException("Failed to encode as JSON: " + e.getMessage());
@@ -151,7 +181,7 @@ public class JacksonCodec implements JsonCodec {
@Override
public Buffer toBuffer(Object object, boolean pretty) throws EncodeException {
try {
- ObjectMapper mapper = pretty ? Json.prettyMapper : Json.mapper;
+ ObjectMapper mapper = pretty ? JacksonCodec.prettyMapper : JacksonCodec.mapper;
return Buffer.buffer(mapper.writeValueAsBytes(object));
} catch (Exception e) {
throw new EncodeException("Failed to encode as JSON: " + e.getMessage());
diff --git a/src/main/java/io/vertx/core/json/JsonArraySerializer.java b/src/main/java/io/vertx/core/json/impl/JsonArraySerializer.java
similarity index 85%
rename from src/main/java/io/vertx/core/json/JsonArraySerializer.java
rename to src/main/java/io/vertx/core/json/impl/JsonArraySerializer.java
index 78dcf38c3..64b229ce7 100644
--- a/src/main/java/io/vertx/core/json/JsonArraySerializer.java
+++ b/src/main/java/io/vertx/core/json/impl/JsonArraySerializer.java
@@ -1,8 +1,9 @@
-package io.vertx.core.json;
+package io.vertx.core.json.impl;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
+import io.vertx.core.json.JsonArray;
import java.io.IOException;
diff --git a/src/main/java/io/vertx/core/json/JsonObjectSerializer.java b/src/main/java/io/vertx/core/json/impl/JsonObjectSerializer.java
similarity index 92%
rename from src/main/java/io/vertx/core/json/JsonObjectSerializer.java
rename to src/main/java/io/vertx/core/json/impl/JsonObjectSerializer.java
index a258a43eb..6bc28b6cf 100644
--- a/src/main/java/io/vertx/core/json/JsonObjectSerializer.java
+++ b/src/main/java/io/vertx/core/json/impl/JsonObjectSerializer.java
@@ -8,11 +8,12 @@
*
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
*/
-package io.vertx.core.json;
+package io.vertx.core.json.impl;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
+import io.vertx.core.json.JsonObject;
import java.io.IOException;
diff --git a/src/main/java/io/vertx/core/parsetools/impl/JsonParserImpl.java b/src/main/java/io/vertx/core/parsetools/impl/JsonParserImpl.java
index c61a6e5b2..39819e19d 100644
--- a/src/main/java/io/vertx/core/parsetools/impl/JsonParserImpl.java
+++ b/src/main/java/io/vertx/core/parsetools/impl/JsonParserImpl.java
@@ -22,9 +22,9 @@ import io.vertx.core.VertxException;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.impl.Arguments;
import io.vertx.core.json.DecodeException;
-import io.vertx.core.json.Json;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
+import io.vertx.core.json.impl.JacksonCodec;
import io.vertx.core.parsetools.JsonEvent;
import io.vertx.core.parsetools.JsonEventType;
import io.vertx.core.parsetools.JsonParser;
@@ -445,7 +445,7 @@ public class JsonParserImpl implements JsonParser {
T convert(Class type) {
try {
- return Json.mapper.readValue(buffer, type);
+ return JacksonCodec.mapper.readValue(buffer, type);
} catch (Exception e) {
throw new DecodeException(e.getMessage(), e);
}
diff --git a/src/test/benchmarks/io/vertx/benchmarks/JsonDecodeBenchmark.java b/src/test/benchmarks/io/vertx/benchmarks/JsonDecodeBenchmark.java
index c472c3d8d..d84ba557c 100644
--- a/src/test/benchmarks/io/vertx/benchmarks/JsonDecodeBenchmark.java
+++ b/src/test/benchmarks/io/vertx/benchmarks/JsonDecodeBenchmark.java
@@ -13,8 +13,8 @@ package io.vertx.benchmarks;
import io.netty.util.CharsetUtil;
import io.vertx.core.buffer.Buffer;
-import io.vertx.core.json.Json;
import io.vertx.core.json.JsonObject;
+import io.vertx.core.json.impl.JacksonCodec;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.CompilerControl;
import org.openjdk.jmh.annotations.Scope;
@@ -47,7 +47,7 @@ public class JsonDecodeBenchmark extends BenchmarkBase {
private Buffer loadJsonAsBuffer(URL url) {
try {
- Buffer encoded = new JsonObject(Json.mapper.readValue(url, Map.class)).toBuffer();
+ Buffer encoded = new JsonObject(JacksonCodec.mapper.readValue(url, Map.class)).toBuffer();
return Buffer.buffer().appendInt(encoded.length()).appendBuffer(encoded);
} catch (IOException e) {
throw new RuntimeException(e);
diff --git a/src/test/benchmarks/io/vertx/benchmarks/JsonEncodeBenchmark.java b/src/test/benchmarks/io/vertx/benchmarks/JsonEncodeBenchmark.java
index a442c5787..90637af87 100644
--- a/src/test/benchmarks/io/vertx/benchmarks/JsonEncodeBenchmark.java
+++ b/src/test/benchmarks/io/vertx/benchmarks/JsonEncodeBenchmark.java
@@ -13,8 +13,8 @@ package io.vertx.benchmarks;
import io.netty.util.CharsetUtil;
import io.vertx.core.buffer.Buffer;
-import io.vertx.core.json.Json;
import io.vertx.core.json.JsonObject;
+import io.vertx.core.json.impl.JacksonCodec;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.CompilerControl;
import org.openjdk.jmh.annotations.Scope;
@@ -47,7 +47,7 @@ public class JsonEncodeBenchmark extends BenchmarkBase {
private JsonObject loadJson(URL url) {
try {
- return new JsonObject(Json.mapper.readValue(url, Map.class));
+ return new JsonObject(JacksonCodec.mapper.readValue(url, Map.class));
} catch (IOException e) {
throw new RuntimeException(e);
}
diff --git a/src/test/java/io/vertx/core/json/JacksonDatabindTest.java b/src/test/java/io/vertx/core/json/JacksonDatabindTest.java
index 051e198ef..9c3e9b5f6 100644
--- a/src/test/java/io/vertx/core/json/JacksonDatabindTest.java
+++ b/src/test/java/io/vertx/core/json/JacksonDatabindTest.java
@@ -15,6 +15,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.vertx.core.buffer.Buffer;
+import io.vertx.core.json.impl.JacksonCodec;
import io.vertx.test.core.TestUtils;
import io.vertx.test.core.VertxTestBase;
import org.junit.Test;
@@ -31,22 +32,22 @@ public class JacksonDatabindTest extends VertxTestBase {
@Test
public void testGetSetMapper() {
- ObjectMapper mapper = Json.mapper;
+ ObjectMapper mapper = JacksonCodec.mapper;
assertNotNull(mapper);
ObjectMapper newMapper = new ObjectMapper();
- Json.mapper = newMapper;
- assertSame(newMapper, Json.mapper);
- Json.mapper = mapper;
+ JacksonCodec.mapper = newMapper;
+ assertSame(newMapper, JacksonCodec.mapper);
+ JacksonCodec.mapper = mapper;
}
@Test
public void testGetSetPrettyMapper() {
- ObjectMapper mapper = Json.prettyMapper;
+ ObjectMapper mapper = JacksonCodec.prettyMapper;
assertNotNull(mapper);
ObjectMapper newMapper = new ObjectMapper();
- Json.prettyMapper = newMapper;
- assertSame(newMapper, Json.prettyMapper);
- Json.prettyMapper = mapper;
+ JacksonCodec.prettyMapper = newMapper;
+ assertSame(newMapper, JacksonCodec.prettyMapper);
+ JacksonCodec.prettyMapper = mapper;
}
@Test
@@ -57,12 +58,12 @@ public class JacksonDatabindTest extends VertxTestBase {
String json = Json.encode(Collections.singletonList(original));
List correct;
- correct = Json.decodeValue(json, new TypeReference>() {});
+ correct = JacksonCodec.fromString(json, new TypeReference>() {});
assertTrue(((List)correct).get(0) instanceof Pojo);
assertEquals(original.value, correct.get(0).value);
// same must apply if instead of string we use a buffer
- correct = Json.decodeValue(Buffer.buffer(json, "UTF8"), new TypeReference>() {});
+ correct = JacksonCodec.fromBuffer(Buffer.buffer(json, "UTF8"), new TypeReference>() {});
assertTrue(((List)correct).get(0) instanceof Pojo);
assertEquals(original.value, correct.get(0).value);
diff --git a/src/test/java/io/vertx/core/json/JsonCodecTest.java b/src/test/java/io/vertx/core/json/JsonCodecTest.java
index 625c706ae..66ab1dbeb 100644
--- a/src/test/java/io/vertx/core/json/JsonCodecTest.java
+++ b/src/test/java/io/vertx/core/json/JsonCodecTest.java
@@ -13,6 +13,7 @@ package io.vertx.core.json;
import com.fasterxml.jackson.core.type.TypeReference;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.impl.Utils;
+import io.vertx.core.json.impl.JacksonCodec;
import io.vertx.test.core.TestUtils;
import org.junit.Test;
@@ -380,14 +381,14 @@ public class JsonCodecTest {
Type type = ref.getType();
Class> clazz = type instanceof Class ? (Class>) type : (Class>) ((ParameterizedType) type).getRawType();
assertEquals(expected, Json.decodeValue(buffer, clazz));
- assertEquals(expected, Json.decodeValue(buffer, ref));
+ assertEquals(expected, JacksonCodec.fromBuffer(buffer, ref));
assertEquals(expected, Json.decodeValue(buffer.toString(StandardCharsets.UTF_8), clazz));
- assertEquals(expected, Json.decodeValue(buffer.toString(StandardCharsets.UTF_8), ref));
+ assertEquals(expected, JacksonCodec.fromString(buffer.toString(StandardCharsets.UTF_8), ref));
Buffer nullValue = Buffer.buffer("null");
assertNull(Json.decodeValue(nullValue, clazz));
- assertNull(Json.decodeValue(nullValue, ref));
+ assertNull(JacksonCodec.fromBuffer(nullValue, ref));
assertNull(Json.decodeValue(nullValue.toString(StandardCharsets.UTF_8), clazz));
- assertNull(Json.decodeValue(nullValue.toString(StandardCharsets.UTF_8), ref));
+ assertNull(JacksonCodec.fromString(nullValue.toString(StandardCharsets.UTF_8), ref));
}
@Test