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 412cf03..37e1213 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
@@ -31,7 +31,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;
@@ -109,7 +109,6 @@
 
     private static InputStream extract(InputStream resultStream, EnumSet<ResultField> resultFields) throws Exception {
         final String resultStr = IOUtils.toString(resultStream, Charset.defaultCharset());
-        final PrettyPrinter singleLine = new SingleLinePrettyPrinter();
         final ObjectNode result = OBJECT_MAPPER.readValue(resultStr, ObjectNode.class);
 
         LOGGER.debug("+++++++\n" + result + "\n+++++++\n");
@@ -136,9 +135,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"
+} ]
