diff --git a/lang/java/avro/src/main/java/org/apache/avro/SchemaBuilder.java b/lang/java/avro/src/main/java/org/apache/avro/SchemaBuilder.java index 818f89aeb95..66fa8fbbd32 100644 --- a/lang/java/avro/src/main/java/org/apache/avro/SchemaBuilder.java +++ b/lang/java/avro/src/main/java/org/apache/avro/SchemaBuilder.java @@ -232,6 +232,8 @@ */ public class SchemaBuilder { + private static final ObjectMapper MAPPER = new ObjectMapper(); + private SchemaBuilder() { } @@ -2734,7 +2736,7 @@ private static JsonNode toJsonNode(Object o) { } else { s = GenericData.get().toString(o); } - return new ObjectMapper().readTree(s); + return MAPPER.readTree(s); } catch (IOException e) { throw new SchemaBuilderException(e); } diff --git a/lang/java/avro/src/main/java/org/apache/avro/util/internal/JacksonUtils.java b/lang/java/avro/src/main/java/org/apache/avro/util/internal/JacksonUtils.java index 02a3872d43f..b0871fad96c 100644 --- a/lang/java/avro/src/main/java/org/apache/avro/util/internal/JacksonUtils.java +++ b/lang/java/avro/src/main/java/org/apache/avro/util/internal/JacksonUtils.java @@ -41,6 +41,18 @@ import com.fasterxml.jackson.databind.util.TokenBuffer; public class JacksonUtils { + /** + * Object Mapper used for toJsonNode method. + */ + private static final ObjectMapper MAPPER = new ObjectMapper(); + + /** + * This object mapper uses a special variant that has different visibility + * rules, used in objectToMap method. + */ + private static final ObjectMapper OBJECT_TO_MAP_MAPPER = MAPPER.copy() + .setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE) + .setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); private JacksonUtils() { } @@ -50,9 +62,9 @@ public static JsonNode toJsonNode(Object datum) { return null; } try { - TokenBuffer generator = new TokenBuffer(new ObjectMapper(), false); + TokenBuffer generator = new TokenBuffer(MAPPER, false); toJson(datum, generator); - return new ObjectMapper().readTree(generator.asParser()); + return MAPPER.readTree(generator.asParser()); } catch (IOException e) { throw new AvroRuntimeException(e); } @@ -194,10 +206,6 @@ public static Object toObject(JsonNode jsonNode, Schema schema) { * @return Its Map representation */ public static Map objectToMap(Object datum) { - ObjectMapper mapper = new ObjectMapper(); - // we only care about fields - mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE); - mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); - return mapper.convertValue(datum, Map.class); + return OBJECT_TO_MAP_MAPPER.convertValue(datum, Map.class); } }