diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ResultExtractor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ResultExtractor.java
index 8b61508..705624a 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ResultExtractor.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ResultExtractor.java
@@ -30,7 +30,7 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import com.fasterxml.jackson.core.PrettyPrinter;
+import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
@@ -108,7 +108,6 @@
 
     private static InputStream extract(InputStream resultStream, EnumSet<ResultField> resultFields) throws Exception {
         final String resultStr = IOUtils.toString(resultStream, StandardCharsets.UTF_8);
-        final PrettyPrinter singleLine = new SingleLinePrettyPrinter();
         final ObjectNode result = OBJECT_MAPPER.readValue(resultStr, ObjectNode.class);
 
         LOGGER.debug("+++++++\n" + result + "\n+++++++\n");
@@ -135,9 +134,9 @@
                                 resultBuilder.append(fieldValue.get(0).asText());
                             } else {
                                 ObjectMapper omm = new ObjectMapper();
-                                omm.setDefaultPrettyPrinter(singleLine);
                                 omm.enable(SerializationFeature.INDENT_OUTPUT);
-                                resultBuilder.append(omm.writer(singleLine).writeValueAsString(fieldValue));
+                                resultBuilder
+                                        .append(omm.writer(new DefaultPrettyPrinter()).writeValueAsString(fieldValue));
                             }
                         } else {
                             resultBuilder.append(OBJECT_MAPPER.writeValueAsString(fieldValue));
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/SingleLinePrettyPrinter.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/SingleLinePrettyPrinter.java
deleted file mode 100644
index 2932ca4..0000000
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/SingleLinePrettyPrinter.java
+++ /dev/null
@@ -1,405 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.asterix.test.common;
-
-import java.io.IOException;
-
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.PrettyPrinter;
-import com.fasterxml.jackson.core.SerializableString;
-import com.fasterxml.jackson.core.io.SerializedString;
-import com.fasterxml.jackson.core.util.Instantiatable;
-
-/**
- * Default {@link PrettyPrinter} implementation that uses 2-space
- * indentation with platform-default linefeeds.
- * Usually this class is not instantiated directly, but instead
- * method {@link JsonGenerator#useSingleLinePrettyPrinter} is
- * used, which will use an instance of this class for operation.
- */
-@SuppressWarnings("serial")
-public class SingleLinePrettyPrinter
-        implements PrettyPrinter, Instantiatable<SingleLinePrettyPrinter>, java.io.Serializable {
-    private static final long serialVersionUID = 1;
-
-    /**
-     * Constant that specifies default "root-level" separator to use between
-     * root values: a single space character.
-     *
-     * @since 2.1
-     */
-    public final static SerializedString DEFAULT_ROOT_VALUE_SEPARATOR = new SerializedString(" ");
-
-    /**
-     * Interface that defines objects that can produce indentation used
-     * to separate object entries and array values. Indentation in this
-     * context just means insertion of white space, independent of whether
-     * linefeeds are output.
-     */
-    public interface Indenter {
-        void writeIndentation(JsonGenerator jg, int level) throws IOException;
-
-        /**
-         * @return True if indenter is considered inline (does not add linefeeds),
-         *         false otherwise
-         */
-        boolean isInline();
-    }
-
-    // // // Config, indentation
-
-    /**
-     * By default, let's use only spaces to separate array values.
-     */
-    protected Indenter _arrayIndenter = FixedSpaceIndenter.instance;
-
-    /**
-     * By default, let's use linefeed-adding indenter for separate
-     * object entries. We'll further configure indenter to use
-     * system-specific linefeeds, and 2 spaces per level (as opposed to,
-     * say, single tabs)
-     */
-    protected Indenter _objectIndenter = new FixedSpaceIndenter();
-
-    /**
-     * String printed between root-level values, if any.
-     */
-    protected final SerializableString _rootSeparator;
-
-    // // // Config, other white space configuration
-
-    /**
-     * By default we will add spaces around colons used to
-     * separate object fields and values.
-     * If disabled, will not use spaces around colon.
-     */
-    protected boolean _spacesInObjectEntries = true;
-
-    // // // State:
-
-    /**
-     * Number of open levels of nesting. Used to determine amount of
-     * indentation to use.
-     */
-    protected transient int _nesting;
-
-    /*
-    /**********************************************************
-    /* Life-cycle (construct, configure)
-    /**********************************************************
-    */
-
-    public SingleLinePrettyPrinter() {
-        this(DEFAULT_ROOT_VALUE_SEPARATOR);
-    }
-
-    /**
-     * Constructor that specifies separator String to use between root values;
-     * if null, no separator is printed.
-     * <p>
-     * Note: simply constructs a {@link SerializedString} out of parameter,
-     * calls {@link #SingleLinePrettyPrinter(SerializableString)}
-     *
-     * @param rootSeparator
-     * @since 2.1
-     */
-    public SingleLinePrettyPrinter(String rootSeparator) {
-        this((rootSeparator == null) ? null : new SerializedString(rootSeparator));
-    }
-
-    /**
-     * Constructor that specifies separator String to use between root values;
-     * if null, no separator is printed.
-     *
-     * @param rootSeparator
-     * @since 2.1
-     */
-    public SingleLinePrettyPrinter(SerializableString rootSeparator) {
-        _rootSeparator = rootSeparator;
-    }
-
-    public SingleLinePrettyPrinter(SingleLinePrettyPrinter base) {
-        this(base, base._rootSeparator);
-    }
-
-    public SingleLinePrettyPrinter(SingleLinePrettyPrinter base, SerializableString rootSeparator) {
-        _arrayIndenter = base._arrayIndenter;
-        _objectIndenter = base._objectIndenter;
-        _spacesInObjectEntries = base._spacesInObjectEntries;
-        _nesting = base._nesting;
-
-        _rootSeparator = rootSeparator;
-    }
-
-    public SingleLinePrettyPrinter withRootSeparator(SerializableString rootSeparator) {
-        if (_rootSeparator == rootSeparator || (rootSeparator != null && rootSeparator.equals(_rootSeparator))) {
-            return this;
-        }
-        return new SingleLinePrettyPrinter(this, rootSeparator);
-    }
-
-    /**
-     * @since 2.6.0
-     */
-    public SingleLinePrettyPrinter withRootSeparator(String rootSeparator) {
-        return withRootSeparator((rootSeparator == null) ? null : new SerializedString(rootSeparator));
-    }
-
-    public void indentArraysWith(Indenter i) {
-        _arrayIndenter = (i == null) ? NopIndenter.instance : i;
-    }
-
-    public void indentObjectsWith(Indenter i) {
-        _objectIndenter = (i == null) ? NopIndenter.instance : i;
-    }
-
-    /**
-     * @deprecated Since 2.3 use {@link #withSpacesInObjectEntries} and {@link #withoutSpacesInObjectEntries()}
-     */
-    @Deprecated
-    public void spacesInObjectEntries(boolean b) {
-        _spacesInObjectEntries = b;
-    }
-
-    /**
-     * @since 2.3
-     */
-    public SingleLinePrettyPrinter withArrayIndenter(Indenter i) {
-        if (i == null) {
-            i = NopIndenter.instance;
-        }
-        if (_arrayIndenter == i) {
-            return this;
-        }
-        SingleLinePrettyPrinter pp = new SingleLinePrettyPrinter(this);
-        pp._arrayIndenter = i;
-        return pp;
-    }
-
-    /**
-     * @since 2.3
-     */
-    public SingleLinePrettyPrinter withObjectIndenter(Indenter i) {
-        if (i == null) {
-            i = NopIndenter.instance;
-        }
-        if (_objectIndenter == i) {
-            return this;
-        }
-        SingleLinePrettyPrinter pp = new SingleLinePrettyPrinter(this);
-        pp._objectIndenter = i;
-        return pp;
-    }
-
-    /**
-     * "Mutant factory" method that will return a pretty printer instance
-     * that does use spaces inside object entries; if 'this' instance already
-     * does this, it is returned; if not, a new instance will be constructed
-     * and returned.
-     *
-     * @since 2.3
-     */
-    public SingleLinePrettyPrinter withSpacesInObjectEntries() {
-        return _withSpaces(true);
-    }
-
-    /**
-     * "Mutant factory" method that will return a pretty printer instance
-     * that does not use spaces inside object entries; if 'this' instance already
-     * does this, it is returned; if not, a new instance will be constructed
-     * and returned.
-     *
-     * @since 2.3
-     */
-    public SingleLinePrettyPrinter withoutSpacesInObjectEntries() {
-        return _withSpaces(false);
-    }
-
-    protected SingleLinePrettyPrinter _withSpaces(boolean state) {
-        if (_spacesInObjectEntries == state) {
-            return this;
-        }
-        SingleLinePrettyPrinter pp = new SingleLinePrettyPrinter(this);
-        pp._spacesInObjectEntries = state;
-        return pp;
-    }
-
-    /*
-    /**********************************************************
-    /* Instantiatable impl
-    /**********************************************************
-     */
-
-    @Override
-    public SingleLinePrettyPrinter createInstance() {
-        return new SingleLinePrettyPrinter(this);
-    }
-
-    /*
-    /**********************************************************
-    /* PrettyPrinter impl
-    /**********************************************************
-     */
-
-    @Override
-    public void writeRootValueSeparator(JsonGenerator jg) throws IOException {
-        if (_rootSeparator != null) {
-            jg.writeRaw(_rootSeparator);
-        }
-    }
-
-    @Override
-    public void writeStartObject(JsonGenerator jg) throws IOException {
-        jg.writeRaw('{');
-        ++_nesting;
-    }
-
-    @Override
-    public void beforeObjectEntries(JsonGenerator jg) throws IOException {
-        _objectIndenter.writeIndentation(jg, _nesting);
-    }
-
-    /**
-     * Method called after an object field has been output, but
-     * before the value is output.
-     * <p>
-     * Default handling (without pretty-printing) will output a single
-     * colon to separate the two. Pretty-printer is
-     * to output a colon as well, but can surround that with other
-     * (white-space) decoration.
-     */
-    @Override
-    public void writeObjectFieldValueSeparator(JsonGenerator jg) throws IOException {
-        if (_spacesInObjectEntries) {
-            jg.writeRaw(": ");
-        } else {
-            jg.writeRaw(':');
-        }
-    }
-
-    /**
-     * Method called after an object entry (field:value) has been completely
-     * output, and before another value is to be output.
-     * <p>
-     * Default handling (without pretty-printing) will output a single
-     * comma to separate the two. Pretty-printer is
-     * to output a comma as well, but can surround that with other
-     * (white-space) decoration.
-     */
-    @Override
-    public void writeObjectEntrySeparator(JsonGenerator jg) throws IOException {
-        jg.writeRaw(',');
-        _objectIndenter.writeIndentation(jg, _nesting);
-    }
-
-    @Override
-    public void writeEndObject(JsonGenerator jg, int nrOfEntries) throws IOException {
-        --_nesting;
-        if (nrOfEntries > 1) {
-            _objectIndenter.writeIndentation(jg, _nesting);
-        } else {
-            jg.writeRaw(' ');
-        }
-        jg.writeRaw('}');
-    }
-
-    @Override
-    public void writeStartArray(JsonGenerator jg) throws IOException {
-        ++_nesting;
-        jg.writeRaw('[');
-    }
-
-    @Override
-    public void beforeArrayValues(JsonGenerator jg) throws IOException {
-        _arrayIndenter.writeIndentation(jg, _nesting);
-    }
-
-    /**
-     * Method called after an array value has been completely
-     * output, and before another value is to be output.
-     * <p>
-     * Default handling (without pretty-printing) will output a single
-     * comma to separate the two. Pretty-printer is
-     * to output a comma as well, but can surround that with other
-     * (white-space) decoration.
-     */
-    @Override
-    public void writeArrayValueSeparator(JsonGenerator gen) throws IOException {
-        gen.writeRaw(',');
-        _arrayIndenter.writeIndentation(gen, _nesting);
-    }
-
-    @Override
-    public void writeEndArray(JsonGenerator gen, int nrOfValues) throws IOException {
-        --_nesting;
-
-        if (_nesting == 0) {
-            gen.writeRaw('\n');
-        }
-        if (nrOfValues > 1) {
-            _arrayIndenter.writeIndentation(gen, _nesting);
-        } else {
-            gen.writeRaw(' ');
-        }
-        gen.writeRaw(']');
-    }
-
-    /*
-    /**********************************************************
-    /* Helper classes
-    /**********************************************************
-     */
-
-    /**
-     * Dummy implementation that adds no indentation whatsoever
-     */
-    public static class NopIndenter implements Indenter, java.io.Serializable {
-        public static final NopIndenter instance = new NopIndenter();
-
-        @Override
-        public void writeIndentation(JsonGenerator jg, int level) throws IOException {
-        }
-
-        @Override
-        public boolean isInline() {
-            return true;
-        }
-    }
-
-    /**
-     * This is a very simple indenter that only adds a
-     * single space for indentation. It is used as the default
-     * indenter for array values.
-     */
-    public static class FixedSpaceIndenter extends NopIndenter {
-        @SuppressWarnings("hiding")
-        public static final FixedSpaceIndenter instance = new FixedSpaceIndenter();
-
-        @Override
-        public void writeIndentation(JsonGenerator jg, int level) throws IOException {
-            jg.writeRaw(' ');
-        }
-
-        @Override
-        public boolean isInline() {
-            return true;
-        }
-    }
-}
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/json/int01-cleanjson/int01.1.json b/asterixdb/asterix-app/src/test/resources/runtimets/results/json/int01-cleanjson/int01.1.json
index 1e25a41..f83d375 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/json/int01-cleanjson/int01.1.json
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/json/int01-cleanjson/int01.1.json
@@ -1,2 +1 @@
-[ [ 1, 2 ]
- ]
+[ [ 1, 2 ] ]
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/json/int01-losslessjson/int01.1.json b/asterixdb/asterix-app/src/test/resources/runtimets/results/json/int01-losslessjson/int01.1.json
index a0533de..2280279 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/json/int01-losslessjson/int01.1.json
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/json/int01-losslessjson/int01.1.json
@@ -1,2 +1,7 @@
-[ { "orderedlist": [ { "int64": 1 }, { "int64": 2 } ] }
- ]
+[ {
+  "orderedlist" : [ {
+    "int64" : 1
+  }, {
+    "int64" : 2
+  } ]
+} ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/json/issue-ASTERIXDB-1165/nullablefield.1.json b/asterixdb/asterix-app/src/test/resources/runtimets/results/json/issue-ASTERIXDB-1165/nullablefield.1.json
index f2868b6..6f98a7f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/json/issue-ASTERIXDB-1165/nullablefield.1.json
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/json/issue-ASTERIXDB-1165/nullablefield.1.json
@@ -1,2 +1 @@
-[ 3
- ]
+[ 3 ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/non-finite/non-finite.1.json b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/non-finite/non-finite.1.json
index 78d4801..d576906 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/non-finite/non-finite.1.json
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/numeric/non-finite/non-finite.1.json
@@ -1,2 +1,5 @@
-[ { "NaN": "NaN", "Infinity": "INF", "-Infinity": "-INF" }
- ]
\ No newline at end of file
+[ {
+  "NaN" : "NaN",
+  "Infinity" : "INF",
+  "-Infinity" : "-INF"
+} ]
