You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bs...@apache.org on 2019/03/20 18:27:19 UTC

[geode] branch develop updated: GEODE-5016 Replace org.json with Jackson in geode-web-api

This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new 50e67e6  GEODE-5016 Replace org.json with Jackson in geode-web-api
50e67e6 is described below

commit 50e67e6a962de97705dcac56c0f1bdd89d1beea3
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Wed Mar 20 11:24:38 2019 -0700

    GEODE-5016 Replace org.json with Jackson in geode-web-api
    
    This removes the geode-json module.  geode-web-api and geode-pulse
    modules still use org.json for testing and get it by way of
    JSONAssert.  Non-test classes no longer reference org.json so
    Geode runtime has a uniform Jackson infrastructure for handling
    JSON documents.
---
 .../src/test/resources/expected-pom.xml            |    5 -
 .../release/session/bin/modify_war                 |    2 -
 geode-assembly/build.gradle                        |    3 -
 .../integrationTest/resources/assembly_content.txt |    1 -
 .../resources/dependency_classpath.txt             |    1 -
 .../geode/management/QueryDataDUnitTest.java       |    4 +-
 .../management/internal/cli/json/GfJsonArray.java  |    2 +-
 .../management/internal/cli/json/GfJsonObject.java |    4 +
 .../internal/cli/result/AbstractResultData.java    |    2 +-
 .../internal/cli/json/GfJsonArrayTest.java         |    8 +-
 .../internal/cli/result/InfoResultDataTest.java    |    8 +-
 .../apache/geode/pdx/JSONFormatVerifyUtility.java  |    2 +-
 .../geode/test/dunit/internal/ProcessManager.java  |    1 -
 geode-json/build.gradle                            |   18 -
 geode-json/src/main/java/org/json/JSON.java        |  112 ---
 geode-json/src/main/java/org/json/JSONArray.java   |  747 ---------------
 .../src/main/java/org/json/JSONException.java      |   58 --
 geode-json/src/main/java/org/json/JSONObject.java  | 1002 --------------------
 geode-json/src/main/java/org/json/JSONString.java  |   17 -
 .../src/main/java/org/json/JSONStringer.java       |  459 ---------
 geode-json/src/main/java/org/json/JSONTokener.java |  639 -------------
 geode-json/src/test/resources/expected-pom.xml     |   37 -
 geode-json/src/test/resources/sample-01.json       |  227 -----
 geode-junit/build.gradle                           |    4 +-
 geode-junit/src/test/resources/expected-pom.xml    |    6 -
 geode-pulse/build.gradle                           |    1 -
 geode-web-api/build.gradle                         |    2 -
 settings.gradle                                    |    1 -
 28 files changed, 18 insertions(+), 3355 deletions(-)

diff --git a/boms/geode-all-bom/src/test/resources/expected-pom.xml b/boms/geode-all-bom/src/test/resources/expected-pom.xml
index 8faf3cf..8c699dc 100644
--- a/boms/geode-all-bom/src/test/resources/expected-pom.xml
+++ b/boms/geode-all-bom/src/test/resources/expected-pom.xml
@@ -664,11 +664,6 @@
       </dependency>
       <dependency>
         <groupId>org.apache.geode</groupId>
-        <artifactId>geode-json</artifactId>
-        <version>1.10.0-SNAPSHOT</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.geode</groupId>
         <artifactId>geode-junit</artifactId>
         <version>1.10.0-SNAPSHOT</version>
       </dependency>
diff --git a/extensions/geode-modules-assembly/release/session/bin/modify_war b/extensions/geode-modules-assembly/release/session/bin/modify_war
index 1a44e5d..08812f6 100755
--- a/extensions/geode-modules-assembly/release/session/bin/modify_war
+++ b/extensions/geode-modules-assembly/release/session/bin/modify_war
@@ -87,7 +87,6 @@ WHERE <args>:
                         geode-modules.jar
                         geode-modules-session-internal.jar
                         geode-core.jar
-                        geode-json.jar
                         geode-common.jar
                         geode-management.jar
                         antlr.jar
@@ -263,7 +262,6 @@ SESSION_JAR="${LIB_DIR}/geode-modules-session-${VERSION}.jar"
 
 declare -a OTHER_JARS
 OTHER_JARS=(${GEODE}/lib/geode-core-${VERSION}.jar \
-    ${GEODE}/lib/geode-json-${VERSION}.jar \
     ${GEODE}/lib/geode-common-${VERSION}.jar \
     ${GEODE}/lib/geode-management-${VERSION}.jar \
     ${GEODE}/lib/antlr-@ANTLR_VERSION@.jar \
diff --git a/geode-assembly/build.gradle b/geode-assembly/build.gradle
index 17e37cb..78e9790 100755
--- a/geode-assembly/build.gradle
+++ b/geode-assembly/build.gradle
@@ -144,7 +144,6 @@ dependencies {
   gfshDependencies(platform(project(':boms:geode-all-bom')))
 
   archives project(':geode-common')
-  archives project(':geode-json')
   archives project(':geode-core')
   archives project(':geode-connectors')
   archives project(':geode-lucene')
@@ -475,8 +474,6 @@ distributions {
       into ('lib') {
         from project(':geode-common').configurations.runtimeClasspath
         from project(':geode-common').configurations.archives.allArtifacts.files
-        from project(':geode-json').configurations.runtimeClasspath
-        from project(':geode-json').configurations.archives.allArtifacts.files
         from project(':geode-wan').configurations.runtimeClasspath
         from project(':geode-wan').configurations.archives.allArtifacts.files
         from project(':geode-cq').configurations.runtimeClasspath
diff --git a/geode-assembly/src/integrationTest/resources/assembly_content.txt b/geode-assembly/src/integrationTest/resources/assembly_content.txt
index 6efee5b..9e482a1 100644
--- a/geode-assembly/src/integrationTest/resources/assembly_content.txt
+++ b/geode-assembly/src/integrationTest/resources/assembly_content.txt
@@ -904,7 +904,6 @@ lib/geode-core-0.0.0.jar
 lib/geode-cq-0.0.0.jar
 lib/geode-dependencies.jar
 lib/geode-jca-0.0.0.rar
-lib/geode-json-0.0.0.jar
 lib/geode-lucene-0.0.0.jar
 lib/geode-redis-0.0.0.jar
 lib/geode-management-0.0.0.jar
diff --git a/geode-assembly/src/integrationTest/resources/dependency_classpath.txt b/geode-assembly/src/integrationTest/resources/dependency_classpath.txt
index 66ed107..99350c3 100644
--- a/geode-assembly/src/integrationTest/resources/dependency_classpath.txt
+++ b/geode-assembly/src/integrationTest/resources/dependency_classpath.txt
@@ -18,7 +18,6 @@ geode-common-0.0.0.jar
 geode-connectors-0.0.0.jar
 geode-core-0.0.0.jar
 geode-cq-0.0.0.jar
-geode-json-0.0.0.jar
 geode-lucene-0.0.0.jar
 geode-redis-0.0.0.jar
 geode-management-0.0.0.jar
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/management/QueryDataDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/management/QueryDataDUnitTest.java
index 61d3d9a..0fcb6c9 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/management/QueryDataDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/management/QueryDataDUnitTest.java
@@ -254,7 +254,7 @@ public class QueryDataDUnitTest implements Serializable {
       assertThat(jsonArray1).isNotNull();
 
       // Get the ObjectValue
-      GfJsonObject collectionObject = jsonArray1.getInternalJsonObject(1);
+      GfJsonObject collectionObject = jsonArray1.getJsonObject(1);
       assertThat(collectionObject.size()).isEqualTo(100);
 
       // Query With Override Values
@@ -284,7 +284,7 @@ public class QueryDataDUnitTest implements Serializable {
       jsonArray1 = jsonArray.getJSONArray(0);
 
       // Get the ObjectValue
-      collectionObject = jsonArray1.getInternalJsonObject(1);
+      collectionObject = jsonArray1.getJsonObject(1);
       assertThat(collectionObject.size()).isEqualTo(newQueryCollectionDepth);
     });
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/GfJsonArray.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/GfJsonArray.java
index af90541..0d8d7d4 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/GfJsonArray.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/GfJsonArray.java
@@ -84,7 +84,7 @@ public class GfJsonArray extends AbstractJSONFormatter {
     }
   }
 
-  public GfJsonObject getInternalJsonObject(int index) throws GfJsonException {
+  public GfJsonObject getJsonObject(int index) throws GfJsonException {
     try {
       return new GfJsonObject(jsonArray.get(index));
     } catch (IllegalArgumentException e) {
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/GfJsonObject.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/GfJsonObject.java
index e581161..5f54639 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/GfJsonObject.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/GfJsonObject.java
@@ -24,6 +24,7 @@ import java.util.Objects;
 
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
@@ -377,4 +378,7 @@ public class GfJsonObject extends AbstractJSONFormatter {
     return new GfJsonObject(errorMap);
   }
 
+  public ObjectMapper getObjectMapper() {
+    return mapper;
+  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/AbstractResultData.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/AbstractResultData.java
index 1164494..7d77583 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/AbstractResultData.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/AbstractResultData.java
@@ -171,7 +171,7 @@ public abstract class AbstractResultData implements ResultData {
     int length = byteDataArray.size();
     String options = length > 1 ? "(y/N/a)" : "(y/N)";
     for (int i = 0; i < length; i++) {
-      GfJsonObject object = byteDataArray.getInternalJsonObject(i);
+      GfJsonObject object = byteDataArray.getJsonObject(i);
 
       int fileType = object.getInt(FILE_TYPE_FIELD);
 
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/json/GfJsonArrayTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/json/GfJsonArrayTest.java
index ce67c4b..409dcd9 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/json/GfJsonArrayTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/json/GfJsonArrayTest.java
@@ -89,10 +89,10 @@ public class GfJsonArrayTest {
     gfJsonArray.put(obj);
     gfJsonArray.put(1, obj);
 
-    assertThat(gfJsonArray.getInternalJsonObject(0).getInt("key")).isEqualTo(1);
-    assertThat(gfJsonArray.getInternalJsonObject(0).getString("value")).isEqualTo("a");
-    assertThat(gfJsonArray.getInternalJsonObject(1).getInt("key")).isEqualTo(1);
-    assertThat(gfJsonArray.getInternalJsonObject(1).getString("value")).isEqualTo("a");
+    assertThat(gfJsonArray.getJsonObject(0).getInt("key")).isEqualTo(1);
+    assertThat(gfJsonArray.getJsonObject(0).getString("value")).isEqualTo("a");
+    assertThat(gfJsonArray.getJsonObject(1).getInt("key")).isEqualTo(1);
+    assertThat(gfJsonArray.getJsonObject(1).getString("value")).isEqualTo("a");
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/result/InfoResultDataTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/result/InfoResultDataTest.java
index 1bec524..b0f843f 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/result/InfoResultDataTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/result/InfoResultDataTest.java
@@ -49,12 +49,12 @@ public class InfoResultDataTest {
     ResultData data = result.addAsFile("content.zip", "file contents", "a message", false);
 
     assertThat(result.getGfJsonObject().getJSONObject("content").getJSONArray("__bytes__")
-        .getInternalJsonObject(0).getString("fileName")).isEqualTo("content.zip");
+        .getJsonObject(0).getString("fileName")).isEqualTo("content.zip");
     assertThat(result.getGfJsonObject().getJSONObject("content").getJSONArray("__bytes__")
-        .getInternalJsonObject(0).getString("fileType")).isEqualTo("1");
+        .getJsonObject(0).getString("fileType")).isEqualTo("1");
     assertThat(result.getGfJsonObject().getJSONObject("content").getJSONArray("__bytes__")
-        .getInternalJsonObject(0).getString("fileMessage")).isEqualTo("a message");
+        .getJsonObject(0).getString("fileMessage")).isEqualTo("a message");
     assertThat(result.getGfJsonObject().getJSONObject("content").getJSONArray("__bytes__")
-        .getInternalJsonObject(0).getString("fileData").length()).isGreaterThan(0);
+        .getJsonObject(0).getString("fileData").length()).isGreaterThan(0);
   }
 }
diff --git a/geode-dunit/src/main/java/org/apache/geode/pdx/JSONFormatVerifyUtility.java b/geode-dunit/src/main/java/org/apache/geode/pdx/JSONFormatVerifyUtility.java
index 8b5af7c..c371744 100644
--- a/geode-dunit/src/main/java/org/apache/geode/pdx/JSONFormatVerifyUtility.java
+++ b/geode-dunit/src/main/java/org/apache/geode/pdx/JSONFormatVerifyUtility.java
@@ -73,7 +73,7 @@ public class JSONFormatVerifyUtility {
     Assert.assertEquals("VerifyPdxInstanceToJson: Map type values are not matched",
         testObject.getM_empByCity().get("Ahmedabad").get(0).getFname(),
         jsonObject.getJSONObject(testObject.getM_empByCityFN()).getJSONArray("Ahmedabad")
-            .getInternalJsonObject(0).getString("fname"));
+            .getJsonObject(0).getString("fname"));
 
     // validation Enum
     Assert.assertEquals("VerifyPdxInstanceToJson: Enum type values are not matched",
diff --git a/geode-dunit/src/main/java/org/apache/geode/test/dunit/internal/ProcessManager.java b/geode-dunit/src/main/java/org/apache/geode/test/dunit/internal/ProcessManager.java
index 32ab6c8..c0e1237 100755
--- a/geode-dunit/src/main/java/org/apache/geode/test/dunit/internal/ProcessManager.java
+++ b/geode-dunit/src/main/java/org/apache/geode/test/dunit/internal/ProcessManager.java
@@ -235,7 +235,6 @@ class ProcessManager implements ChildVMLauncher {
       // remove current-version product classes and resources from the classpath
       dunitClasspath =
           removeModulesFromPath(dunitClasspath, "geode-core", "geode-cq", "geode-common",
-              "geode-json",
               "geode-wan");
       classPath = versionManager.getClasspath(version) + File.pathSeparator + dunitClasspath;
     }
diff --git a/geode-json/build.gradle b/geode-json/build.gradle
deleted file mode 100644
index f5c9d62..0000000
--- a/geode-json/build.gradle
+++ /dev/null
@@ -1,18 +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.
- */
-
-apply from: "${project.projectDir}/../gradle/publish.gradle"
diff --git a/geode-json/src/main/java/org/json/JSON.java b/geode-json/src/main/java/org/json/JSON.java
deleted file mode 100755
index 7105cab..0000000
--- a/geode-json/src/main/java/org/json/JSON.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed 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.json;
-
-class JSON {
-  /**
-   * Returns the input if it is a JSON-permissible value; throws otherwise.
-   */
-  static double checkDouble(double d) throws JSONException {
-    if (Double.isInfinite(d) || Double.isNaN(d)) {
-      throw new JSONException("Forbidden numeric value: " + d);
-    }
-    return d;
-  }
-
-  static Boolean toBoolean(Object value) {
-    if (value instanceof Boolean) {
-      return (Boolean) value;
-    } else if (value instanceof String) {
-      String stringValue = (String) value;
-      if ("true".equalsIgnoreCase(stringValue)) {
-        return true;
-      } else if ("false".equalsIgnoreCase(stringValue)) {
-        return false;
-      }
-    }
-    return null;
-  }
-
-  static Double toDouble(Object value) {
-    if (value instanceof Double) {
-      return (Double) value;
-    } else if (value instanceof Number) {
-      return ((Number) value).doubleValue();
-    } else if (value instanceof String) {
-      try {
-        return Double.valueOf((String) value);
-      } catch (NumberFormatException ignored) {
-      }
-    }
-    return null;
-  }
-
-  static Integer toInteger(Object value) {
-    if (value instanceof Integer) {
-      return (Integer) value;
-    } else if (value instanceof Number) {
-      return ((Number) value).intValue();
-    } else if (value instanceof String) {
-      try {
-        return (int) Double.parseDouble((String) value);
-      } catch (NumberFormatException ignored) {
-      }
-    }
-    return null;
-  }
-
-  static Long toLong(Object value) {
-    if (value instanceof Long) {
-      return (Long) value;
-    } else if (value instanceof Number) {
-      return ((Number) value).longValue();
-    } else if (value instanceof String) {
-      try {
-        return (long) Double.parseDouble((String) value);
-      } catch (NumberFormatException ignored) {
-      }
-    }
-    return null;
-  }
-
-  static String toString(Object value) {
-    if (value instanceof String) {
-      return (String) value;
-    } else if (value != null) {
-      return String.valueOf(value);
-    }
-    return null;
-  }
-
-  public static JSONException typeMismatch(Object indexOrName, Object actual, String requiredType)
-      throws JSONException {
-    if (actual == null) {
-      throw new JSONException("Value at " + indexOrName + " is null.");
-    } else {
-      throw new JSONException("Value " + actual + " at " + indexOrName + " of type "
-          + actual.getClass().getName() + " cannot be converted to " + requiredType);
-    }
-  }
-
-  public static JSONException typeMismatch(Object actual, String requiredType)
-      throws JSONException {
-    if (actual == null) {
-      throw new JSONException("Value is null.");
-    } else {
-      throw new JSONException("Value " + actual + " of type " + actual.getClass().getName()
-          + " cannot be converted to " + requiredType);
-    }
-  }
-}
diff --git a/geode-json/src/main/java/org/json/JSONArray.java b/geode-json/src/main/java/org/json/JSONArray.java
deleted file mode 100755
index e7ca694..0000000
--- a/geode-json/src/main/java/org/json/JSONArray.java
+++ /dev/null
@@ -1,747 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed 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.json;
-
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-// Note: this class was written without inspecting the non-free org.json sourcecode.
-
-/**
- * A dense indexed sequence of values. Values may be any mix of {@link JSONObject JSONObjects},
- * other {@link JSONArray JSONArrays}, Strings, Booleans, Integers, Longs, Doubles, {@code null} or
- * {@link JSONObject#NULL}. Values may not be {@link Double#isNaN() NaNs},
- * {@link Double#isInfinite() infinities}, or of any type not listed here.
- *
- * {@code JSONArray} has the same type coercion behavior and optional/mandatory accessors as
- * {@link JSONObject}. See that class' documentation for details.
- *
- * <strong>Warning:</strong> this class represents null in two incompatible ways: the standard Java
- * {@code null} reference, and the sentinel value {@link JSONObject#NULL}. In particular,
- * {@code get} fails if the requested index holds the null reference, but succeeds if it holds
- * {@code JSONObject.NULL}.
- *
- * Instances of this class are not thread safe. Although this class is non-final, it was not
- * designed for inheritance and should not be subclassed. In particular, self-use by overridable
- * methods is not specified. See <i>Effective Java</i> Item 17, "Design and Document or inheritance
- * or else prohibit it" for further information.
- */
-public class JSONArray {
-
-  private final List<Object> values;
-
-  /**
-   * Creates a {@code JSONArray} with no values.
-   */
-  public JSONArray() {
-    values = new ArrayList<Object>();
-  }
-
-  /**
-   * Creates a new {@code JSONArray} by copying all values from the given collection.
-   *
-   * @param copyFrom a collection whose values are of supported types. Unsupported values are not
-   *        permitted and will yield an array in an inconsistent state.
-   */
-  /* Accept a raw type for API compatibility */
-  public JSONArray(Collection<?> copyFrom) {
-    this();
-    if (copyFrom != null) {
-      for (Object aCopyFrom : copyFrom) {
-        put(JSONObject.wrap(aCopyFrom));
-      }
-    }
-  }
-
-  /**
-   * Creates a new {@code JSONArray} with values from the next array in the tokener.
-   *
-   * @param readFrom a tokener whose nextValue() method will yield a {@code JSONArray}.
-   * @throws JSONException if the parse fails or doesn't yield a {@code JSONArray}.
-   */
-  public JSONArray(JSONTokener readFrom) throws JSONException {
-    /*
-     * Getting the parser to populate this could get tricky. Instead, just parse to temporary
-     * JSONArray and then steal the data from that.
-     */
-    Object object = readFrom.nextValue();
-    if (object instanceof JSONArray) {
-      values = ((JSONArray) object).values;
-    } else {
-      throw JSON.typeMismatch(object, "JSONArray");
-    }
-  }
-
-  /**
-   * Creates a new {@code JSONArray} with values from the JSON string.
-   *
-   * @param json a JSON-encoded string containing an array.
-   * @throws JSONException if the parse fails or doesn't yield a {@code
-   *                       JSONArray}.
-   */
-  public JSONArray(String json) throws JSONException {
-    this(new JSONTokener(json));
-  }
-
-  /**
-   * Creates a new {@code JSONArray} with values from the given primitive array.
-   *
-   * @param array The values to use.
-   * @throws JSONException if any of the values are non-finite double values (i.e. NaN or infinite)
-   */
-  public JSONArray(Object array) throws JSONException {
-    if (!array.getClass().isArray()) {
-      throw new JSONException("Not a primitive array: " + array.getClass());
-    }
-    final int length = Array.getLength(array);
-    values = new ArrayList<Object>(length);
-    for (int i = 0; i < length; ++i) {
-      put(JSONObject.wrap(Array.get(array, i)));
-    }
-  }
-
-  /**
-   * @return Returns the number of values in this array.
-   */
-  public int length() {
-    return values.size();
-  }
-
-  /**
-   * Appends {@code value} to the end of this array.
-   *
-   * @param value The value to append.
-   * @return this array.
-   */
-  public JSONArray put(boolean value) {
-    values.add(value);
-    return this;
-  }
-
-  /**
-   * Appends {@code value} to the end of this array.
-   *
-   * @param value a finite value. May not be {@link Double#isNaN() NaNs} or
-   *        {@link Double#isInfinite() infinities}.
-   * @return this array.
-   * @throws JSONException If the value is unacceptable.
-   */
-  public JSONArray put(double value) throws JSONException {
-    values.add(JSON.checkDouble(value));
-    return this;
-  }
-
-  /**
-   * Appends {@code value} to the end of this array.
-   *
-   * @param value The value to append.
-   * @return this array.
-   */
-  public JSONArray put(int value) {
-    values.add(value);
-    return this;
-  }
-
-  /**
-   * Appends {@code value} to the end of this array.
-   *
-   * @param value The value to append.
-   * @return this array.
-   */
-  public JSONArray put(long value) {
-    values.add(value);
-    return this;
-  }
-
-  /**
-   * Appends {@code value} wrapped by {@link JSONArray} to the end of this array.
-   *
-   * @param value any collection.
-   * @return this array.
-   */
-  public JSONArray put(Collection<?> value) {
-    if (value == null) {
-      return put((Object) null);
-    }
-    values.add(new JSONArray(value));
-    return this;
-  }
-
-  /**
-   * Appends {@code value} to the end of this array.
-   *
-   * @param value a {@link JSONObject}, {@link JSONArray}, String, Boolean, Integer, Long, Double,
-   *        {@link JSONObject#NULL}, or {@code null}. May not be {@link Double#isNaN() NaNs} or
-   *        {@link Double#isInfinite() infinities}. Unsupported values are not permitted and will
-   *        cause the array to be in an inconsistent state.
-   * @return this array.
-   */
-  public JSONArray put(Object value) {
-    values.add(value);
-    return this;
-  }
-
-  /**
-   * Same as {@link #put}, with added validity checks.
-   *
-   * @param value The value to append.
-   */
-  void checkedPut(Object value) throws JSONException {
-    if (value instanceof Number) {
-      JSON.checkDouble(((Number) value).doubleValue());
-    }
-
-    put(value);
-  }
-
-  /**
-   * Sets the value at {@code index} to {@code value}, null padding this array to the required
-   * length if necessary. If a value already exists at {@code
-   * index}, it will be replaced.
-   *
-   * @param index Where to put the value.
-   * @param value The value to set.
-   * @return this array.
-   * @throws JSONException This should never happen.
-   */
-  public JSONArray put(int index, boolean value) throws JSONException {
-    return put(index, (Boolean) value);
-  }
-
-  /**
-   * Sets the value at {@code index} to {@code value}, null padding this array to the required
-   * length if necessary. If a value already exists at {@code
-   * index}, it will be replaced.
-   *
-   * @param index Where to put the value.
-   * @param value a finite value. May not be {@link Double#isNaN() NaNs} or
-   *        {@link Double#isInfinite() infinities}.
-   * @return this array.
-   * @throws JSONException If the value is not a finite value.
-   */
-  public JSONArray put(int index, double value) throws JSONException {
-    return put(index, (Double) value);
-  }
-
-  /**
-   * Sets the value at {@code index} to {@code value}, null padding this array to the required
-   * length if necessary. If a value already exists at {@code
-   * index}, it will be replaced.
-   *
-   * @param index Where to put the value.
-   * @param value The value to set.
-   * @return this array.
-   * @throws JSONException Should never actually happen.
-   */
-  public JSONArray put(int index, int value) throws JSONException {
-    return put(index, (Integer) value);
-  }
-
-  /**
-   * Sets the value at {@code index} to {@code value}, null padding this array to the required
-   * length if necessary. If a value already exists at {@code
-   * index}, it will be replaced.
-   *
-   * @param index Where to put the value.
-   * @param value The value to set.
-   * @return this array.
-   * @throws JSONException Should never actually happen.
-   */
-  public JSONArray put(int index, long value) throws JSONException {
-    return put(index, (Long) value);
-  }
-
-  /**
-   * Sets the value at {@code index} to {@code value} wrapped into {@link JSONArray}, null padding
-   * this array to the required length if necessary. If a value already exists at {@code index}, it
-   * will be replaced.
-   *
-   * @param index Where to put the value.
-   * @param value The value to set.
-   * @return this array.
-   * @throws JSONException Should never actually happen.
-   */
-  public JSONArray put(int index, Collection<?> value) throws JSONException {
-    if (value == null) {
-      return put(index, (Object) null);
-    }
-    return put(index, new JSONArray(value));
-  }
-
-  /**
-   * Sets the value at {@code index} to {@code value}, null padding this array to the required
-   * length if necessary. If a value already exists at {@code
-   * index}, it will be replaced.
-   *
-   * @param index Where to put the value.
-   * @param value a {@link JSONObject}, {@link JSONArray}, String, Boolean, Integer, Long, Double,
-   *        {@link JSONObject#NULL}, or {@code null}. May not be {@link Double#isNaN() NaNs} or
-   *        {@link Double#isInfinite() infinities}.
-   * @return this array.
-   * @throws JSONException If the value cannot be represented as a finite double value.
-   */
-  public JSONArray put(int index, Object value) throws JSONException {
-    if (value instanceof Number) {
-      // deviate from the original by checking all Numbers, not just floats & doubles
-      JSON.checkDouble(((Number) value).doubleValue());
-    }
-    while (values.size() <= index) {
-      values.add(null);
-    }
-    values.set(index, value);
-    return this;
-  }
-
-  /**
-   * Returns true if this array has no value at {@code index}, or if its value is the {@code null}
-   * reference or {@link JSONObject#NULL}.
-   *
-   * @param index Which value to check.
-   * @return true if the value is null.
-   */
-  public boolean isNull(int index) {
-    Object value = opt(index);
-    return value == null || value == JSONObject.NULL;
-  }
-
-  /**
-   * Returns the value at {@code index}.
-   *
-   * @param index Which value to get.
-   * @return the value at the specified location.
-   * @throws JSONException if this array has no value at {@code index}, or if that value is the
-   *         {@code null} reference. This method returns normally if the value is
-   *         {@code JSONObject#NULL}.
-   */
-  public Object get(int index) throws JSONException {
-    try {
-      Object value = values.get(index);
-      if (value == null) {
-        throw new JSONException("Value at " + index + " is null.");
-      }
-      return value;
-    } catch (IndexOutOfBoundsException e) {
-      throw new JSONException("Index " + index + " out of range [0.." + values.size() + ")");
-    }
-  }
-
-  /**
-   * Returns the value at {@code index}, or null if the array has no value at {@code index}.
-   *
-   * @param index Which value to get.
-   * @return the value at the specified location.
-   */
-  public Object opt(int index) {
-    if (index < 0 || index >= values.size()) {
-      return null;
-    }
-    return values.get(index);
-  }
-
-  /**
-   * Removes and returns the value at {@code index}, or null if the array has no value at
-   * {@code index}.
-   *
-   * @param index Which value to remove.
-   * @return The value previously at the specified location.
-   */
-  public Object remove(int index) {
-    if (index < 0 || index >= values.size()) {
-      return null;
-    }
-    return values.remove(index);
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists and is a boolean or can be coerced to a
-   * boolean.
-   *
-   * @param index Which value to get.
-   * @return the value at the specified location.
-   * @throws JSONException if the value at {@code index} doesn't exist or cannot be coerced to a
-   *         boolean.
-   */
-  public boolean getBoolean(int index) throws JSONException {
-    Object object = get(index);
-    Boolean result = JSON.toBoolean(object);
-    if (result == null) {
-      throw JSON.typeMismatch(index, object, "boolean");
-    }
-    return result;
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists and is a boolean or can be coerced to a
-   * boolean. Returns false otherwise.
-   *
-   * @param index Which value to get.
-   * @return the value at the specified location.
-   */
-  public boolean optBoolean(int index) {
-    return optBoolean(index, false);
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists and is a boolean or can be coerced to a
-   * boolean. Returns {@code fallback} otherwise.
-   *
-   * @param index Which value to get.
-   * @param fallback the fallback value to return if no value exists.
-   * @return the value at the specified location or the fallback value.
-   */
-  public boolean optBoolean(int index, boolean fallback) {
-    Object object = opt(index);
-    Boolean result = JSON.toBoolean(object);
-    return result != null ? result : fallback;
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists and is a double or can be coerced to a double.
-   *
-   * @param index Which value to get.
-   * @return the value at the specified location.
-   * @throws JSONException if the value at {@code index} doesn't exist or cannot be coerced to a
-   *         double.
-   */
-  public double getDouble(int index) throws JSONException {
-    Object object = get(index);
-    Double result = JSON.toDouble(object);
-    if (result == null) {
-      throw JSON.typeMismatch(index, object, "double");
-    }
-    return result;
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists and is a double or can be coerced to a double.
-   * Returns {@code NaN} otherwise.
-   *
-   * @param index Which value to get.
-   * @return the value at the specified location.
-   */
-  public double optDouble(int index) {
-    return optDouble(index, Double.NaN);
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists and is a double or can be coerced to a double.
-   * Returns {@code fallback} otherwise.
-   *
-   * @param index Which value to get.
-   * @param fallback The fallback value to use if no value is at the specified location.
-   * @return the value at the specified location or the fallback value.
-   */
-  public double optDouble(int index, double fallback) {
-    Object object = opt(index);
-    Double result = JSON.toDouble(object);
-    return result != null ? result : fallback;
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists and is an int or can be coerced to an int.
-   *
-   * @param index Which value to get.
-   * @return the value at the specified location.
-   * @throws JSONException if the value at {@code index} doesn't exist or cannot be coerced to a
-   *         int.
-   */
-  public int getInt(int index) throws JSONException {
-    Object object = get(index);
-    Integer result = JSON.toInteger(object);
-    if (result == null) {
-      throw JSON.typeMismatch(index, object, "int");
-    }
-    return result;
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists and is an int or can be coerced to an int.
-   * Returns 0 otherwise.
-   *
-   * @param index Which value to get.
-   * @return the value at the specified location.
-   */
-  public int optInt(int index) {
-    return optInt(index, 0);
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists and is an int or can be coerced to an int.
-   * Returns {@code fallback} otherwise.
-   *
-   * @param index Which value to get.
-   * @param fallback The fallback value to use if no value is at the specified location.
-   * @return the value at the specified location or the fallback value.
-   */
-  public int optInt(int index, int fallback) {
-    Object object = opt(index);
-    Integer result = JSON.toInteger(object);
-    return result != null ? result : fallback;
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists and is a long or can be coerced to a long.
-   *
-   * @param index Which value to get.
-   * @return the value at the specified location.
-   * @throws JSONException if the value at {@code index} doesn't exist or cannot be coerced to a
-   *         long.
-   */
-  public long getLong(int index) throws JSONException {
-    Object object = get(index);
-    Long result = JSON.toLong(object);
-    if (result == null) {
-      throw JSON.typeMismatch(index, object, "long");
-    }
-    return result;
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists and is a long or can be coerced to a long.
-   * Returns 0 otherwise.
-   *
-   * @param index Which value to get.
-   * @return the value at the specified location.
-   */
-  public long optLong(int index) {
-    return optLong(index, 0L);
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists and is a long or can be coerced to a long.
-   * Returns {@code fallback} otherwise.
-   *
-   * @param index Which value to get.
-   * @param fallback The fallback value to use if no value is at the specified location.
-   * @return the value at the specified location or the fallback value.
-   */
-  public long optLong(int index, long fallback) {
-    Object object = opt(index);
-    Long result = JSON.toLong(object);
-    return result != null ? result : fallback;
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists, coercing it if necessary.
-   *
-   * @param index Which value to get.
-   * @return the value at the specified location.
-   * @throws JSONException if no such value exists.
-   */
-  public String getString(int index) throws JSONException {
-    Object object = get(index);
-    String result = JSON.toString(object);
-    if (result == null) {
-      throw JSON.typeMismatch(index, object, "String");
-    }
-    return result;
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists, coercing it if necessary. Returns the empty
-   * string if no such value exists.
-   *
-   * @param index Which value to get.
-   * @return the value at the specified location.
-   */
-  public String optString(int index) {
-    return optString(index, "");
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists, coercing it if necessary. Returns
-   * {@code fallback} if no such value exists.
-   *
-   * @param index Which value to get.
-   * @param fallback The fallback value to use if no value is at the specified location.
-   * @return the value at the specified location or the fallback value.
-   */
-  public String optString(int index, String fallback) {
-    Object object = opt(index);
-    String result = JSON.toString(object);
-    return result != null ? result : fallback;
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists and is a {@code
-   * JSONArray}.
-   *
-   * @param index Which value to get.
-   * @return the value at the specified location.
-   * @throws JSONException if the value doesn't exist or is not a {@code
-   *                       JSONArray}.
-   */
-  public JSONArray getJSONArray(int index) throws JSONException {
-    Object object = get(index);
-    if (object instanceof JSONArray) {
-      return (JSONArray) object;
-    } else {
-      throw JSON.typeMismatch(index, object, "JSONArray");
-    }
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists and is a {@code
-   * JSONArray}. Returns null otherwise.
-   *
-   * @param index Which value to get.
-   * @return the value at the specified location.
-   */
-  public JSONArray optJSONArray(int index) {
-    Object object = opt(index);
-    return object instanceof JSONArray ? (JSONArray) object : null;
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists and is a {@code
-   * JSONObject}.
-   *
-   * @param index Which value to get.
-   * @return the value at the specified location.
-   * @throws JSONException if the value doesn't exist or is not a {@code
-   *                       JSONObject}.
-   */
-  public JSONObject getJSONObject(int index) throws JSONException {
-    Object object = get(index);
-    if (object instanceof JSONObject) {
-      return (JSONObject) object;
-    } else {
-      throw JSON.typeMismatch(index, object, "JSONObject");
-    }
-  }
-
-  /**
-   * Returns the value at {@code index} if it exists and is a {@code
-   * JSONObject}. Returns null otherwise.
-   *
-   * @param index Which value to get.
-   * @return the value at the specified location.
-   */
-  public JSONObject optJSONObject(int index) {
-    Object object = opt(index);
-    return object instanceof JSONObject ? (JSONObject) object : null;
-  }
-
-  /**
-   * Returns a new object whose values are the values in this array, and whose names are the values
-   * in {@code names}. Names and values are paired up by index from 0 through to the shorter array's
-   * length. Names that are not strings will be coerced to strings. This method returns null if
-   * either array is empty.
-   *
-   * @param names The names to apply to the returned values.
-   * @return the newly constructed object.
-   * @throws JSONException Should not be possible.
-   */
-  public JSONObject toJSONObject(JSONArray names) throws JSONException {
-    JSONObject result = new JSONObject();
-    int length = Math.min(names.length(), values.size());
-    if (length == 0) {
-      return null;
-    }
-    for (int i = 0; i < length; i++) {
-      String name = JSON.toString(names.opt(i));
-      result.put(name, opt(i));
-    }
-    return result;
-  }
-
-  /**
-   * Returns a new string by alternating this array's values with {@code
-   * separator}. This array's string values are quoted and have their special characters escaped.
-   * For example, the array containing the strings '12" pizza', 'taco' and 'soda' joined on '+'
-   * returns this:
-   *
-   * <pre>
-   * "12\" pizza" + "taco" + "soda"
-   * </pre>
-   *
-   * @param separator The string used to separate the returned values.
-   * @return the conjoined values.
-   * @throws JSONException Only if there is a coding error.
-   */
-  public String join(String separator) throws JSONException {
-    JSONStringer stringer = new JSONStringer();
-    stringer.open(JSONStringer.Scope.NULL, "");
-    for (int i = 0, size = values.size(); i < size; i++) {
-      if (i > 0) {
-        stringer.out.append(separator);
-      }
-      stringer.value(values.get(i));
-    }
-    stringer.close(JSONStringer.Scope.NULL, JSONStringer.Scope.NULL, "");
-    return stringer.out.toString();
-  }
-
-  /**
-   * Encodes this array as a compact JSON string, such as:
-   *
-   * <pre>
-   * [94043,90210]
-   * </pre>
-   *
-   * @return The string form of this array.
-   */
-  @Override
-  public String toString() {
-    try {
-      JSONStringer stringer = new JSONStringer();
-      writeTo(stringer);
-      return stringer.toString();
-    } catch (JSONException e) {
-      return null;
-    }
-  }
-
-  /**
-   * Encodes this array as a human readable JSON string for debugging, such as:
-   *
-   * <pre>
-   * [
-   *     94043,
-   *     90210
-   * ]
-   * </pre>
-   *
-   * @param indentSpaces the number of spaces to indent for each level of nesting.
-   * @return The string form of this array.
-   * @throws JSONException Only if there is a coding error.
-   */
-  public String toString(int indentSpaces) throws JSONException {
-    JSONStringer stringer = new JSONStringer(indentSpaces);
-    writeTo(stringer);
-    return stringer.toString();
-  }
-
-  void writeTo(JSONStringer stringer) throws JSONException {
-    stringer.array();
-    for (Object value : values) {
-      stringer.value(value);
-    }
-    stringer.endArray();
-  }
-
-  @Override
-  public boolean equals(Object o) {
-    return o instanceof JSONArray && ((JSONArray) o).values.equals(values);
-  }
-
-  @Override
-  public int hashCode() {
-    // diverge from the original, which doesn't implement hashCode
-    return values.hashCode();
-  }
-}
diff --git a/geode-json/src/main/java/org/json/JSONException.java b/geode-json/src/main/java/org/json/JSONException.java
deleted file mode 100755
index 7a2af82..0000000
--- a/geode-json/src/main/java/org/json/JSONException.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed 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.json;
-
-// Note: this class was written without inspecting the non-free org.json sourcecode.
-
-/**
- * Thrown to indicate a problem with the JSON API. Such problems include:
- * <ul>
- * <li>Attempts to parse or construct malformed documents
- * <li>Use of null as a name
- * <li>Use of numeric types not available to JSON, such as {@link Double#isNaN() NaNs} or
- * {@link Double#isInfinite() infinities}.
- * <li>Lookups using an out of range index or nonexistent name
- * <li>Type mismatches on lookups
- * </ul>
- *
- * <p>
- * Although this is a checked exception, it is rarely recoverable. Most callers should simply wrap
- * this exception in an unchecked exception and rethrow:
- *
- * <pre>
- *   public JSONArray toJSONObject() {
- *     try {
- *         JSONObject result = new JSONObject();
- *         ...
- *     } catch (JSONException e) {
- *         throw new RuntimeException(e);
- *     }
- * }
- * </pre>
- */
-public class JSONException extends RuntimeException {
-
-  public JSONException(String s) {
-    super(s);
-  }
-
-  public JSONException(Throwable cause) {
-    super(cause);
-  }
-
-  public JSONException(String message, Throwable cause) {
-    super(message, cause);
-  }
-}
diff --git a/geode-json/src/main/java/org/json/JSONObject.java b/geode-json/src/main/java/org/json/JSONObject.java
deleted file mode 100755
index 3b595d7..0000000
--- a/geode-json/src/main/java/org/json/JSONObject.java
+++ /dev/null
@@ -1,1002 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed 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.json;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-
-// Note: this class was written without inspecting the non-free org.json sourcecode.
-
-/**
- * A modifiable set of name/value mappings. Names are unique, non-null strings. Values may be any
- * mix of {@link JSONObject JSONObjects}, {@link JSONArray JSONArrays}, Strings, Booleans, Integers,
- * Longs, Doubles or {@link #NULL}. Values may not be {@code null}, {@link Double#isNaN() NaNs},
- * {@link Double#isInfinite() infinities}, or of any type not listed here.
- *
- * <p>
- * This class can coerce values to another type when requested.
- * <ul>
- * <li>When the requested type is a boolean, strings will be coerced using a case-insensitive
- * comparison to "true" and "false".
- * <li>When the requested type is a double, other {@link Number} types will be coerced using
- * {@link Number#doubleValue() doubleValue}. Strings that can be coerced using
- * {@link Double#valueOf(String)} will be.
- * <li>When the requested type is an int, other {@link Number} types will be coerced using
- * {@link Number#intValue() intValue}. Strings that can be coerced using
- * {@link Double#valueOf(String)} will be, and then cast to int.
- * <li><a name="lossy">When the requested type is a long, other {@link Number} types will be coerced
- * using {@link Number#longValue() longValue}. Strings that can be coerced using
- * {@link Double#valueOf(String)} will be, and then cast to long. This two-step conversion is lossy
- * for very large values. For example, the string "9223372036854775806" yields the long
- * 9223372036854775807.</a>
- * <li>When the requested type is a String, other non-null values will be coerced using
- * {@link String#valueOf(Object)}. Although null cannot be coerced, the sentinel value
- * {@link JSONObject#NULL} is coerced to the string "null".
- * </ul>
- *
- * <p>
- * This class can look up both mandatory and optional values:
- * <ul>
- * <li>Use <code>get<i>Type</i>()</code> to retrieve a mandatory value. This fails with a
- * {@code JSONException} if the requested name has no value or if the value cannot be coerced to the
- * requested type.
- * <li>Use <code>opt<i>Type</i>()</code> to retrieve an optional value. This returns a system- or
- * user-supplied default if the requested name has no value or if the value cannot be coerced to the
- * requested type.
- * </ul>
- *
- * <p>
- * <strong>Warning:</strong> this class represents null in two incompatible ways: the standard Java
- * {@code null} reference, and the sentinel value {@link JSONObject#NULL}. In particular, calling
- * {@code put(name, null)} removes the named entry from the object but
- * {@code put(name, JSONObject.NULL)} stores an entry whose value is {@code JSONObject.NULL}.
- *
- * <p>
- * Instances of this class are not thread safe. Although this class is nonfinal, it was not designed
- * for inheritance and should not be subclassed. In particular, self-use by overrideable methods is
- * not specified. See <i>Effective Java</i> Item 17, "Design and Document or inheritance or else
- * prohibit it" for further information.
- */
-public class JSONObject {
-
-  private static final Double NEGATIVE_ZERO = -0d;
-
-  public static ThreadLocal<Set> cyclicDependencySet = new ThreadLocal();
-  public static ThreadLocal<Boolean> cyclicDepChkEnabled = new ThreadLocal();
-
-  /**
-   * A sentinel value used to explicitly define a name with no value. Unlike {@code null}, names
-   * with this value:
-   * <ul>
-   * <li>show up in the {@link #names} array
-   * <li>show up in the {@link #keys} iterator
-   * <li>return {@code true} for {@link #has(String)}
-   * <li>do not throw on {@link #get(String)}
-   * <li>are included in the encoded JSON string.
-   * </ul>
-   *
-   * <p>
-   * This value violates the general contract of {@link Object#equals} by returning true when
-   * compared to {@code null}. Its {@link #toString} method returns "null".
-   */
-  public static final Object NULL = new Object() {
-    @SuppressWarnings("EqualsWhichDoesntCheckParameterClass")
-    @Override
-    public boolean equals(Object o) {
-      return o == this || o == null; // API specifies this broken equals implementation
-    }
-
-    // at least make the broken equals(null) consistent with Objects.hashCode(null).
-    @Override
-    public int hashCode() {
-      return 0;
-    }
-
-    @Override
-    public String toString() {
-      return "null";
-    }
-  };
-
-  private final LinkedHashMap<String, Object> nameValuePairs;
-
-  /**
-   * Creates a {@code JSONObject} with no name/value mappings.
-   */
-  public JSONObject() {
-    nameValuePairs = new LinkedHashMap<String, Object>();
-  }
-
-  /**
-   * Creates a new {@code JSONObject} by copying all name/value mappings from the given map.
-   *
-   * @param copyFrom a map whose keys are of type {@link String} and whose values are of supported
-   *        types.
-   * @throws NullPointerException if any of the map's keys are null.
-   */
-  /* (accept a raw type for API compatibility) */
-  public JSONObject(Map copyFrom) {
-    this();
-    Map<?, ?> contentsTyped = (Map<?, ?>) copyFrom;
-    for (Map.Entry<?, ?> entry : contentsTyped.entrySet()) {
-      /*
-       * Deviate from the original by checking that keys are non-null and of the proper type. (We
-       * still defer validating the values).
-       */
-      String key = (String) entry.getKey();
-      if (key == null) {
-        throw new NullPointerException("key == null");
-      }
-      nameValuePairs.put(key, wrap(entry.getValue()));
-    }
-  }
-
-  /**
-   * Creates a new {@code JSONObject} with name/value mappings from the next object in the tokener.
-   *
-   * @param readFrom a tokener whose nextValue() method will yield a {@code JSONObject}.
-   * @throws JSONException if the parse fails or doesn't yield a {@code JSONObject}.
-   */
-  public JSONObject(JSONTokener readFrom) throws JSONException {
-    /*
-     * Getting the parser to populate this could get tricky. Instead, just parse to temporary
-     * JSONObject and then steal the data from that.
-     */
-    Object object = readFrom.nextValue();
-    if (object instanceof JSONObject) {
-      this.nameValuePairs = ((JSONObject) object).nameValuePairs;
-    } else {
-      throw JSON.typeMismatch(object, "JSONObject");
-    }
-  }
-
-  /**
-   * Creates a new {@code JSONObject} with name/value mappings from the JSON string.
-   *
-   * @param json a JSON-encoded string containing an object.
-   * @throws JSONException if the parse fails or doesn't yield a {@code JSONObject}.
-   */
-  public JSONObject(String json) throws JSONException {
-    this(new JSONTokener(json));
-  }
-
-  /**
-   * Creates a new {@code JSONObject} by copying mappings for the listed names from the given
-   * object. Names that aren't present in {@code copyFrom} will be skipped.
-   *
-   * @param copyFrom The source object.
-   * @param names The names of the fields to copy.
-   * @throws JSONException On internal errors. Shouldn't happen.
-   */
-  public JSONObject(JSONObject copyFrom, String[] names) throws JSONException {
-    this();
-    for (String name : names) {
-      Object value = copyFrom.opt(name);
-      if (value != null) {
-        nameValuePairs.put(name, value);
-      }
-    }
-  }
-
-  /**
-   * Creates a json object from a bean
-   *
-   * @param bean the bean to create the json object from
-   * @throws JSONException If there is an exception while reading the bean
-   */
-  public JSONObject(Object bean) throws JSONException {
-    this(propertiesAsMap(bean));
-  }
-
-  // This is custom properties mapping specific for GEODE
-  private static Map<String, Object> propertiesAsMap(Object bean) {
-    Map<String, Object> props = new TreeMap();
-    Class klass = bean.getClass();
-
-    // If klass is a System class then set includeSuperClass to false.
-
-    boolean includeSuperClass = klass.getClassLoader() != null;
-
-    Method[] methods = includeSuperClass ? klass.getMethods() : klass.getDeclaredMethods();
-    for (int i = 0; i < methods.length; i += 1) {
-      try {
-        Method method = methods[i];
-        if (Modifier.isPublic(method.getModifiers()) && !Modifier.isStatic(method.getModifiers())) {
-          String name = method.getName();
-          String key = "";
-          if (name.startsWith("get")) {
-            if ("getClass".equals(name) || "getDeclaringClass".equals(name)) {
-              key = "";
-            } else {
-              key = name.substring(3);
-            }
-          } else if (name.startsWith("is")) {
-            key = name.substring(2);
-          }
-          if (key.length() > 0 && Character.isUpperCase(key.charAt(0))
-              && method.getParameterTypes().length == 0) {
-            if (key.length() == 1) {
-              key = key.toLowerCase();
-            } else if (!Character.isUpperCase(key.charAt(1))) {
-              key = key.substring(0, 1).toLowerCase() + key.substring(1);
-            }
-            Object result = method.invoke(bean, (Object[]) null);
-            if (result != null) {
-              props.put(key, wrap(result));
-            } else if (!method.getReturnType().isArray()) {
-              props.put(key, JSONObject.NULL);
-            }
-          }
-        }
-      } catch (Exception ignore) {
-      }
-    }
-    props.put("type-class", klass.getCanonicalName());
-    return props;
-  }
-
-  public static String[] getNames(JSONObject x) {
-    Set<String> names = x.keySet();
-    String[] r = new String[names.size()];
-    int i = 0;
-    for (String name : names) {
-      r[i++] = name;
-    }
-    return r;
-  }
-
-  /**
-   * Returns the number of name/value mappings in this object.
-   *
-   * @return the length of this.
-   */
-  public int length() {
-    return nameValuePairs.size();
-  }
-
-  /**
-   * Maps {@code name} to {@code value}, clobbering any existing name/value mapping with the same
-   * name.
-   *
-   * @param name The name of the value to insert.
-   * @param value The value to insert.
-   * @return this object.
-   * @throws JSONException Should not be possible.
-   */
-  public JSONObject put(String name, boolean value) throws JSONException {
-    nameValuePairs.put(checkName(name), value);
-    return this;
-  }
-
-  /**
-   * Maps {@code name} to {@code value}, clobbering any existing name/value mapping with the same
-   * name.
-   *
-   * @param name The name for the new value.
-   * @param value a finite value. May not be {@link Double#isNaN() NaNs} or
-   *        {@link Double#isInfinite() infinities}.
-   * @return this object.
-   * @throws JSONException if value is NaN or infinite.
-   */
-  public JSONObject put(String name, double value) throws JSONException {
-    nameValuePairs.put(checkName(name), JSON.checkDouble(value));
-    return this;
-  }
-
-  /**
-   * Maps {@code name} to {@code value}, clobbering any existing name/value mapping with the same
-   * name.
-   *
-   * @param name The name for the new value.
-   * @param value The new value.
-   * @return this object.
-   * @throws JSONException Should not be possible.
-   */
-  public JSONObject put(String name, int value) throws JSONException {
-    nameValuePairs.put(checkName(name), value);
-    return this;
-  }
-
-  /**
-   * Maps {@code name} to {@code value}, clobbering any existing name/value mapping with the same
-   * name.
-   *
-   * @param name The name of the new value.
-   * @param value The new value to insert.
-   * @return this object.
-   * @throws JSONException Should not be possible.
-   */
-  public JSONObject put(String name, long value) throws JSONException {
-    nameValuePairs.put(checkName(name), value);
-    return this;
-  }
-
-  /**
-   * Maps {@code name} to {@code value}, clobbering any existing name/value mapping with the same
-   * name. If the value is {@code null}, any existing mapping for {@code name} is removed.
-   *
-   * @param name The name of the new value.
-   * @param value a {@link JSONObject}, {@link JSONArray}, String, Boolean, Integer, Long, Double,
-   *        {@link #NULL}, or {@code null}. May not be {@link Double#isNaN() NaNs} or
-   *        {@link Double#isInfinite() infinities}.
-   * @return this object.
-   * @throws JSONException if the value is an invalid double (infinite or NaN).
-   */
-  public JSONObject put(String name, Object value) throws JSONException {
-    if (value == null) {
-      nameValuePairs.remove(name);
-      return this;
-    }
-    if (value instanceof Number) {
-      // deviate from the original by checking all Numbers, not just floats & doubles
-      JSON.checkDouble(((Number) value).doubleValue());
-    }
-    nameValuePairs.put(checkName(name), value);
-    return this;
-  }
-
-  /**
-   * Equivalent to {@code put(name, value)} when both parameters are non-null; does nothing
-   * otherwise.
-   *
-   * @param name The name of the value to insert.
-   * @param value The value to insert.
-   * @return this object.
-   * @throws JSONException if the value is an invalid double (infinite or NaN).
-   */
-  public JSONObject putOpt(String name, Object value) throws JSONException {
-    if (name == null || value == null) {
-      return this;
-    }
-    return put(name, value);
-  }
-
-  /**
-   * Appends {@code value} to the array already mapped to {@code name}. If this object has no
-   * mapping for {@code name}, this inserts a new mapping. If the mapping exists but its value is
-   * not an array, the existing and new values are inserted in order into a new array which is
-   * itself mapped to {@code name}. In aggregate, this allows values to be added to a mapping one at
-   * a time.
-   *
-   * Note that {@code append(String, Object)} provides better semantics. In particular, the mapping
-   * for {@code name} will <b>always</b> be a {@link JSONArray}. Using {@code accumulate} will
-   * result in either a {@link JSONArray} or a mapping whose type is the type of {@code value}
-   * depending on the number of calls to it.
-   *
-   * @param name The name of the field to change.
-   * @param value a {@link JSONObject}, {@link JSONArray}, String, Boolean, Integer, Long, Double,
-   *        {@link #NULL} or null. May not be {@link Double#isNaN() NaNs} or
-   *        {@link Double#isInfinite() infinities}.
-   * @return this object after mutation.
-   * @throws JSONException If the object being added is an invalid number.
-   */
-  // TODO: Change {@code append) to {@link #append} when append is
-  // unhidden.
-  public JSONObject accumulate(String name, Object value) throws JSONException {
-    Object current = nameValuePairs.get(checkName(name));
-    if (current == null) {
-      return put(name, value);
-    }
-
-    if (current instanceof JSONArray) {
-      JSONArray array = (JSONArray) current;
-      array.checkedPut(value);
-    } else {
-      JSONArray array = new JSONArray();
-      array.checkedPut(current);
-      array.checkedPut(value);
-      nameValuePairs.put(name, array);
-    }
-    return this;
-  }
-
-  /**
-   * Appends values to the array mapped to {@code name}. A new {@link JSONArray} mapping for
-   * {@code name} will be inserted if no mapping exists. If the existing mapping for {@code name} is
-   * not a {@link JSONArray}, a {@link JSONException} will be thrown.
-   *
-   * @param name The name of the array to which the value should be appended.
-   * @param value The value to append.
-   * @return this object.
-   * @throws JSONException if {@code name} is {@code null} or if the mapping for {@code name} is
-   *         non-null and is not a {@link JSONArray}.
-   */
-  public JSONObject append(String name, Object value) throws JSONException {
-    Object current = nameValuePairs.get(checkName(name));
-
-    final JSONArray array;
-    if (current instanceof JSONArray) {
-      array = (JSONArray) current;
-    } else if (current == null) {
-      JSONArray newArray = new JSONArray();
-      nameValuePairs.put(name, newArray);
-      array = newArray;
-    } else {
-      throw new JSONException("Key " + name + " is not a JSONArray");
-    }
-
-    array.checkedPut(value);
-
-    return this;
-  }
-
-  String checkName(String name) throws JSONException {
-    if (name == null) {
-      throw new JSONException("Names must be non-null");
-    }
-    return name;
-  }
-
-  /**
-   * Removes the named mapping if it exists; does nothing otherwise.
-   *
-   * @param name The name of the mapping to remove.
-   * @return the value previously mapped by {@code name}, or null if there was no such mapping.
-   */
-  public Object remove(String name) {
-    return nameValuePairs.remove(name);
-  }
-
-  /**
-   * Returns true if this object has no mapping for {@code name} or if it has a mapping whose value
-   * is {@link #NULL}.
-   *
-   * @param name The name of the value to check on.
-   * @return true if the field doesn't exist or is null.
-   */
-  public boolean isNull(String name) {
-    Object value = nameValuePairs.get(name);
-    return value == null || value == NULL;
-  }
-
-  /**
-   * Returns true if this object has a mapping for {@code name}. The mapping may be {@link #NULL}.
-   *
-   * @param name The name of the value to check on.
-   * @return true if this object has a field named {@code name}
-   */
-  public boolean has(String name) {
-    return nameValuePairs.containsKey(name);
-  }
-
-  /**
-   * Returns the value mapped by {@code name}, or throws if no such mapping exists.
-   *
-   * @param name The name of the value to get.
-   * @return The value.
-   * @throws JSONException if no such mapping exists.
-   */
-  public Object get(String name) throws JSONException {
-    Object result = nameValuePairs.get(name);
-    if (result == null) {
-      throw new JSONException("No value for " + name);
-    }
-    return result;
-  }
-
-  /**
-   * Returns the value mapped by {@code name}, or null if no such mapping exists.
-   *
-   * @param name The name of the value to get.
-   * @return The value.
-   */
-  public Object opt(String name) {
-    return nameValuePairs.get(name);
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists and is a boolean or can be coerced to a
-   * boolean, or throws otherwise.
-   *
-   * @param name The name of the field we want.
-   * @return The selected value if it exists.
-   * @throws JSONException if the mapping doesn't exist or cannot be coerced to a boolean.
-   */
-  public boolean getBoolean(String name) throws JSONException {
-    Object object = get(name);
-    Boolean result = JSON.toBoolean(object);
-    if (result == null) {
-      throw JSON.typeMismatch(name, object, "boolean");
-    }
-    return result;
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists and is a boolean or can be coerced to a
-   * boolean, or false otherwise.
-   *
-   * @param name The name of the field we want.
-   * @return The selected value if it exists.
-   */
-  public boolean optBoolean(String name) {
-    return optBoolean(name, false);
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists and is a boolean or can be coerced to a
-   * boolean, or {@code fallback} otherwise.
-   *
-   * @param name The name of the field we want.
-   * @param fallback The value to return if the field isn't there.
-   * @return The selected value or the fallback.
-   */
-  public boolean optBoolean(String name, boolean fallback) {
-    Object object = opt(name);
-    Boolean result = JSON.toBoolean(object);
-    return result != null ? result : fallback;
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists and is a double or can be coerced to a
-   * double, or throws otherwise.
-   *
-   * @param name The name of the field we want.
-   * @return The selected value if it exists.
-   * @throws JSONException if the mapping doesn't exist or cannot be coerced to a double.
-   */
-  public double getDouble(String name) throws JSONException {
-    Object object = get(name);
-    Double result = JSON.toDouble(object);
-    if (result == null) {
-      throw JSON.typeMismatch(name, object, "double");
-    }
-    return result;
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists and is a double or can be coerced to a
-   * double, or {@code NaN} otherwise.
-   *
-   * @param name The name of the field we want.
-   * @return The selected value if it exists.
-   */
-  public double optDouble(String name) {
-    return optDouble(name, Double.NaN);
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists and is a double or can be coerced to a
-   * double, or {@code fallback} otherwise.
-   *
-   * @param name The name of the field we want.
-   * @param fallback The value to return if the field isn't there.
-   * @return The selected value or the fallback.
-   */
-  public double optDouble(String name, double fallback) {
-    Object object = opt(name);
-    Double result = JSON.toDouble(object);
-    return result != null ? result : fallback;
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists and is an int or can be coerced to an
-   * int, or throws otherwise.
-   *
-   * @param name The name of the field we want.
-   * @return The selected value if it exists.
-   * @throws JSONException if the mapping doesn't exist or cannot be coerced to an int.
-   */
-  public int getInt(String name) throws JSONException {
-    Object object = get(name);
-    Integer result = JSON.toInteger(object);
-    if (result == null) {
-      throw JSON.typeMismatch(name, object, "int");
-    }
-    return result;
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists and is an int or can be coerced to an
-   * int, or 0 otherwise.
-   *
-   * @param name The name of the field we want.
-   * @return The selected value if it exists.
-   */
-  public int optInt(String name) {
-    return optInt(name, 0);
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists and is an int or can be coerced to an
-   * int, or {@code fallback} otherwise.
-   *
-   * @param name The name of the field we want.
-   * @param fallback The value to return if the field isn't there.
-   * @return The selected value or the fallback.
-   */
-  public int optInt(String name, int fallback) {
-    Object object = opt(name);
-    Integer result = JSON.toInteger(object);
-    return result != null ? result : fallback;
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists and is a long or can be coerced to a
-   * long, or throws otherwise. Note that JSON represents numbers as doubles,
-   *
-   * so this is <a href="#lossy">lossy</a>; use strings to transfer numbers via JSON without loss.
-   *
-   * @param name The name of the field that we want.
-   * @return The value of the field.
-   * @throws JSONException if the mapping doesn't exist or cannot be coerced to a long.
-   */
-  public long getLong(String name) throws JSONException {
-    Object object = get(name);
-    Long result = JSON.toLong(object);
-    if (result == null) {
-      throw JSON.typeMismatch(name, object, "long");
-    }
-    return result;
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists and is a long or can be coerced to a
-   * long, or 0 otherwise. Note that JSON represents numbers as doubles, so this is
-   * <a href="#lossy">lossy</a>; use strings to transfer numbers via JSON.
-   *
-   * @param name The name of the field we want.
-   * @return The selected value.
-   */
-  public long optLong(String name) {
-    return optLong(name, 0L);
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists and is a long or can be coerced to a
-   * long, or {@code fallback} otherwise. Note that JSON represents numbers as doubles, so this is
-   * <a href="#lossy">lossy</a>; use strings to transfer numbers via JSON.
-   *
-   * @param name The name of the field we want.
-   * @param fallback The value to return if the field isn't there.
-   * @return The selected value or the fallback.
-   */
-  public long optLong(String name, long fallback) {
-    Object object = opt(name);
-    Long result = JSON.toLong(object);
-    return result != null ? result : fallback;
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists, coercing it if necessary, or throws if
-   * no such mapping exists.
-   *
-   * @param name The name of the field we want.
-   * @return The value of the field.
-   * @throws JSONException if no such mapping exists.
-   */
-  public String getString(String name) throws JSONException {
-    Object object = get(name);
-    String result = JSON.toString(object);
-    if (result == null) {
-      throw JSON.typeMismatch(name, object, "String");
-    }
-    return result;
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists, coercing it if necessary, or the empty
-   * string if no such mapping exists.
-   *
-   * @param name The name of the field we want.
-   * @return The value of the field.
-   */
-  public String optString(String name) {
-    return optString(name, "");
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists, coercing it if necessary, or
-   * {@code fallback} if no such mapping exists.
-   *
-   * @param name The name of the field that we want.
-   * @param fallback The value to return if the field doesn't exist.
-   * @return The value of the field or fallback.
-   */
-  public String optString(String name, String fallback) {
-    Object object = opt(name);
-    String result = JSON.toString(object);
-    return result != null ? result : fallback;
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists and is a {@code
-   * JSONArray}, or throws otherwise.
-   *
-   * @param name The field we want to get.
-   * @return The value of the field (if it is a JSONArray.
-   * @throws JSONException if the mapping doesn't exist or is not a {@code JSONArray}.
-   */
-  public JSONArray getJSONArray(String name) throws JSONException {
-    Object object = get(name);
-    if (object instanceof JSONArray) {
-      return (JSONArray) object;
-    } else {
-      throw JSON.typeMismatch(name, object, "JSONArray");
-    }
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists and is a {@code
-   * JSONArray}, or null otherwise.
-   *
-   * @param name The name of the field we want.
-   * @return The value of the specified field (assuming it is a JSNOArray
-   */
-  public JSONArray optJSONArray(String name) {
-    Object object = opt(name);
-    return object instanceof JSONArray ? (JSONArray) object : null;
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists and is a {@code
-   * JSONObject}, or throws otherwise.
-   *
-   * @param name The name of the field that we want.
-   * @return a specified field value (if it is a JSONObject)
-   * @throws JSONException if the mapping doesn't exist or is not a {@code JSONObject}.
-   */
-  public JSONObject getJSONObject(String name) throws JSONException {
-    Object object = get(name);
-    if (object instanceof JSONObject) {
-      return (JSONObject) object;
-    } else {
-      throw JSON.typeMismatch(name, object, "JSONObject");
-    }
-  }
-
-  /**
-   * Returns the value mapped by {@code name} if it exists and is a {@code
-   * JSONObject}, or null otherwise.
-   *
-   * @param name The name of the value we want.
-   * @return The specified value.
-   */
-  public JSONObject optJSONObject(String name) {
-    Object object = opt(name);
-    return object instanceof JSONObject ? (JSONObject) object : null;
-  }
-
-  /**
-   * Returns an array with the values corresponding to {@code names}. The array contains null for
-   * names that aren't mapped. This method returns null if {@code names} is either null or empty.
-   *
-   * @param names The names of the fields that we want the values for.
-   * @return The selected values.
-   * @throws JSONException On internal errors. Shouldn't happen.
-   */
-  public JSONArray toJSONArray(JSONArray names) throws JSONException {
-    JSONArray result = new JSONArray();
-    if (names == null) {
-      return null;
-    }
-    int length = names.length();
-    if (length == 0) {
-      return null;
-    }
-    for (int i = 0; i < length; i++) {
-      String name = JSON.toString(names.opt(i));
-      result.put(opt(name));
-    }
-    return result;
-  }
-
-  /**
-   * Returns an iterator of the {@code String} names in this object. The returned iterator supports
-   * {@link Iterator#remove() remove}, which will remove the corresponding mapping from this object.
-   * If this object is modified after the iterator is returned, the iterator's behavior is
-   * undefined. The order of the keys is undefined.
-   *
-   * @return an iterator over the keys.
-   */
-  public Iterator<String> keys() {
-    return nameValuePairs.keySet().iterator();
-  }
-
-  /**
-   * Returns the set of {@code String} names in this object. The returned set is a view of the keys
-   * in this object. {@link Set#remove(Object)} will remove the corresponding mapping from this
-   * object and set iterator behaviour is undefined if this object is modified after it is returned.
-   *
-   * See {@link #keys()}.
-   *
-   * @return The names in this object.
-   */
-  public Set<String> keySet() {
-    return nameValuePairs.keySet();
-  }
-
-  /**
-   * Returns an array containing the string names in this object. This method returns null if this
-   * object contains no mappings.
-   *
-   * @return the names.
-   */
-  public JSONArray names() {
-    return nameValuePairs.isEmpty() ? null
-        : new JSONArray(new ArrayList<String>(nameValuePairs.keySet()));
-  }
-
-  /**
-   * Encodes this object as a compact JSON string, such as:
-   *
-   * <pre>
-   * {"query":"Pizza","locations":[94043,90210]}
-   * </pre>
-   */
-  @Override
-  public String toString() {
-    try {
-      JSONStringer stringer = new JSONStringer();
-      writeTo(stringer);
-      return stringer.toString();
-    } catch (JSONException e) {
-      return null;
-    }
-  }
-
-  /**
-   * Encodes this object as a human readable JSON string for debugging, such as:
-   *
-   * <pre>
-   * {
-   *     "query": "Pizza",
-   *     "locations": [
-   *         94043,
-   *         90210
-   *     ]
-   * }
-   * </pre>
-   *
-   * @param indentSpaces the number of spaces to indent for each level of nesting.
-   * @return The string containing the pretty form of this.
-   * @throws JSONException On internal errors. Shouldn't happen.
-   */
-  public String toString(int indentSpaces) throws JSONException {
-    JSONStringer stringer = new JSONStringer(indentSpaces);
-    writeTo(stringer);
-    return stringer.toString();
-  }
-
-  void writeTo(JSONStringer stringer) throws JSONException {
-    stringer.object();
-    for (Map.Entry<String, Object> entry : nameValuePairs.entrySet()) {
-      stringer.key(entry.getKey()).value(entry.getValue());
-    }
-    stringer.endObject();
-  }
-
-  /**
-   * Encodes the number as a JSON string.
-   *
-   * @param number a finite value. May not be {@link Double#isNaN() NaNs} or
-   *        {@link Double#isInfinite() infinities}.
-   * @return The encoded number in string form.
-   * @throws JSONException On internal errors. Shouldn't happen.
-   */
-  public static String numberToString(Number number) throws JSONException {
-    if (number == null) {
-      throw new JSONException("Number must be non-null");
-    }
-
-    double doubleValue = number.doubleValue();
-    JSON.checkDouble(doubleValue);
-
-    // the original returns "-0" instead of "-0.0" for negative zero
-    if (number.equals(NEGATIVE_ZERO)) {
-      return "-0";
-    }
-
-    long longValue = number.longValue();
-    if (doubleValue == (double) longValue) {
-      return Long.toString(longValue);
-    }
-
-    return number.toString();
-  }
-
-  /**
-   * Encodes {@code data} as a JSON string. This applies quotes and any necessary character
-   * escaping.
-   *
-   * @param data the string to encode. Null will be interpreted as an empty string.
-   * @return the quoted string.
-   */
-  public static String quote(String data) {
-    if (data == null) {
-      return "\"\"";
-    }
-    try {
-      JSONStringer stringer = new JSONStringer();
-      stringer.open(JSONStringer.Scope.NULL, "");
-      stringer.value(data);
-      stringer.close(JSONStringer.Scope.NULL, JSONStringer.Scope.NULL, "");
-      return stringer.toString();
-    } catch (JSONException e) {
-      throw new AssertionError();
-    }
-  }
-
-  /**
-   * Wraps the given object if necessary.
-   *
-   * <p>
-   * If the object is null or , returns {@link #NULL}. If the object is a {@code JSONArray} or
-   * {@code JSONObject}, no wrapping is necessary. If the object is {@code NULL}, no wrapping is
-   * necessary. If the object is an array or {@code Collection}, returns an equivalent {@code
-   * JSONArray}. If the object is a {@code Map}, returns an equivalent {@code JSONObject}. If the
-   * object is a primitive wrapper type or {@code String}, returns the object. If the object is from
-   * a {@code java} package, returns the result of {@code toString}. If the object is some other
-   * kind of object then it is assumed to be a bean and is converted to a JSONObject. If wrapping
-   * fails, returns null.
-   *
-   * @param o The object to wrap.
-   * @return The wrapped (if necessary) form of the object {$code o}
-   */
-  public static Object wrap(Object o) {
-    if (o == null) {
-      return NULL;
-    }
-    if (o instanceof JSONArray || o instanceof JSONObject) {
-      return o;
-    }
-    if (o.equals(NULL)) {
-      return o;
-    }
-    try {
-      if (o instanceof Collection) {
-        return new JSONArray((Collection) o);
-      } else if (o.getClass().isArray()) {
-        return new JSONArray(o);
-      }
-      if (o instanceof Map) {
-        return new JSONObject((Map) o);
-      }
-      if (o instanceof Boolean || o instanceof Byte || o instanceof Character || o instanceof Double
-          || o instanceof Float || o instanceof Integer || o instanceof Long || o instanceof Short
-          || o instanceof String) {
-        return o;
-      }
-      // GEODE-2142: Added check to ignore GemFireCacheImpl
-      Package objectPackage = o.getClass().getPackage();
-      String objectPackageName = objectPackage != null ? objectPackage.getName() : "";
-      if (objectPackageName.startsWith("java.") || objectPackageName.startsWith("javax.")
-          || o instanceof Enum<?> || o.getClass().getClassLoader() == null
-          || o.getClass().getName().contains("GemFireCacheImpl")) {
-        return o.toString();
-      }
-      // GEODE-2142: Added the cyclicalDepCheck
-      if (cyclicDepChkEnabled.get() != null && cyclicDependencySet.get() != null) {
-        if (cyclicDepChkEnabled.get() && cyclicDependencySet.get().contains(o)) {
-          // break cyclic reference
-          return o.getClass().getCanonicalName();
-        } else {
-          cyclicDependencySet.get().add(o);
-          return new JSONObject(o);
-        }
-      } else {
-        return new JSONObject(o);
-      }
-    } catch (Exception ignored) {
-    }
-    return null;
-  }
-}
diff --git a/geode-json/src/main/java/org/json/JSONString.java b/geode-json/src/main/java/org/json/JSONString.java
deleted file mode 100755
index 9d0d312..0000000
--- a/geode-json/src/main/java/org/json/JSONString.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.json;
-
-/**
- * The <code>JSONString</code> interface allows a <code>toJSONString()</code> method so that a class
- * can change the behavior of <code>JSONObject.toString()</code>, <code>JSONArray.toString()</code>,
- * and <code>JSONWriter.value(</code>Object<code>)</code>. The <code>toJSONString</code> method will
- * be used instead of the default behavior of using the Object's <code>toString()</code> method and
- * quoting the result.
- */
-public interface JSONString {
-  /**
-   * The <code>toJSONString</code> method allows a class to produce its own JSON serialization.
-   *
-   * @return A strictly syntactically correct JSON text.
-   */
-  String toJSONString();
-}
diff --git a/geode-json/src/main/java/org/json/JSONStringer.java b/geode-json/src/main/java/org/json/JSONStringer.java
deleted file mode 100755
index c88f188..0000000
--- a/geode-json/src/main/java/org/json/JSONStringer.java
+++ /dev/null
@@ -1,459 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed 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.json;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-// Note: this class was written without inspecting the non-free org.json sourcecode.
-
-/**
- * Implements {@link JSONObject#toString} and {@link JSONArray#toString}. Most application
- * developers should use those methods directly and disregard this API. For example:
- *
- * <pre>
- * JSONObject object = ...
- * String json = object.toString();
- * </pre>
- *
- * <p>
- * Stringers only encode well-formed JSON strings. In particular:
- * <ul>
- * <li>The stringer must have exactly one top-level array or object.
- * <li>Lexical scopes must be balanced: every call to {@link #array} must have a matching call to
- * {@link #endArray} and every call to {@link #object} must have a matching call to
- * {@link #endObject}.
- * <li>Arrays may not contain keys (property names).
- * <li>Objects must alternate keys (property names) and values.
- * <li>Values are inserted with either literal {@link #value(Object) value} calls, or by nesting
- * arrays or objects.
- * </ul>
- * Calls that would result in a malformed JSON string will fail with a {@link JSONException}.
- *
- * <p>
- * This class provides no facility for pretty-printing (ie. indenting) output. To encode indented
- * output, use {@link JSONObject#toString(int)} or {@link JSONArray#toString(int)}.
- *
- * <p>
- * Some implementations of the API support at most 20 levels of nesting. Attempts to create more
- * than 20 levels of nesting may fail with a {@link JSONException}.
- *
- * <p>
- * Each stringer may be used to encode a single top level value. Instances of this class are not
- * thread safe. Although this class is nonfinal, it was not designed for inheritance and should not
- * be subclassed. In particular, self-use by overrideable methods is not specified. See <i>Effective
- * Java</i> Item 17, "Design and Document or inheritance or else prohibit it" for further
- * information.
- */
-public class JSONStringer {
-
-  /**
-   * The output data, containing at most one top-level array or object.
-   */
-  final StringBuilder out = new StringBuilder();
-
-  /**
-   * Lexical scoping elements within this stringer, necessary to insert the appropriate separator
-   * characters (ie. commas and colons) and to detect nesting errors.
-   */
-  enum Scope {
-
-    /**
-     * An array with no elements requires no separators or newlines before it is closed.
-     */
-    EMPTY_ARRAY,
-
-    /**
-     * A array with at least one value requires a comma and newline before the next element.
-     */
-    NONEMPTY_ARRAY,
-
-    /**
-     * An object with no keys or values requires no separators or newlines before it is closed.
-     */
-    EMPTY_OBJECT,
-
-    /**
-     * An object whose most recent element is a key. The next element must be a value.
-     */
-    DANGLING_KEY,
-
-    /**
-     * An object with at least one name/value pair requires a comma and newline before the next
-     * element.
-     */
-    NONEMPTY_OBJECT,
-
-    /**
-     * A special bracketless array needed by JSONStringer.join() and JSONObject.quote() only. Not
-     * used for JSON encoding.
-     */
-    NULL,
-  }
-
-  /**
-   * Unlike the original implementation, this stack isn't limited to 20 levels of nesting.
-   */
-  private final List<Scope> stack = new ArrayList<Scope>();
-
-  /**
-   * A string containing a full set of spaces for a single level of indentation, or null for no
-   * pretty printing.
-   */
-  private final String indent;
-
-  public JSONStringer() {
-    indent = null;
-  }
-
-  JSONStringer(int indentSpaces) {
-    char[] indentChars = new char[indentSpaces];
-    Arrays.fill(indentChars, ' ');
-    indent = new String(indentChars);
-  }
-
-  /**
-   * Begins encoding a new array. Each call to this method must be paired with a call to
-   * {@link #endArray}.
-   *
-   * @return this stringer.
-   * @throws JSONException On internal errors. Shouldn't happen.
-   */
-  public JSONStringer array() throws JSONException {
-    return open(Scope.EMPTY_ARRAY, "[");
-  }
-
-  /**
-   * Ends encoding the current array.
-   *
-   * @return this stringer.
-   * @throws JSONException On internal errors. Shouldn't happen.
-   */
-  public JSONStringer endArray() throws JSONException {
-    return close(Scope.EMPTY_ARRAY, Scope.NONEMPTY_ARRAY, "]");
-  }
-
-  /**
-   * Begins encoding a new object. Each call to this method must be paired with a call to
-   * {@link #endObject}.
-   *
-   * @return this stringer.
-   * @throws JSONException On internal errors. Shouldn't happen.
-   */
-  public JSONStringer object() throws JSONException {
-    return open(Scope.EMPTY_OBJECT, "{");
-  }
-
-  /**
-   * Ends encoding the current object.
-   *
-   * @return this stringer.
-   * @throws JSONException On internal errors. Shouldn't happen.
-   */
-  public JSONStringer endObject() throws JSONException {
-    return close(Scope.EMPTY_OBJECT, Scope.NONEMPTY_OBJECT, "}");
-  }
-
-  /**
-   * Enters a new scope by appending any necessary whitespace and the given bracket.
-   */
-  JSONStringer open(Scope empty, String openBracket) throws JSONException {
-    if (stack.isEmpty() && out.length() > 0) {
-      throw new JSONException("Nesting problem: multiple top-level roots");
-    }
-    beforeValue();
-    stack.add(empty);
-    out.append(openBracket);
-    return this;
-  }
-
-  /**
-   * Closes the current scope by appending any necessary whitespace and the given bracket.
-   */
-  JSONStringer close(Scope empty, Scope nonempty, String closeBracket) throws JSONException {
-    Scope context = peek();
-    if (context != nonempty && context != empty) {
-      throw new JSONException("Nesting problem");
-    }
-
-    stack.remove(stack.size() - 1);
-    if (context == nonempty) {
-      newline();
-    }
-    out.append(closeBracket);
-    return this;
-  }
-
-  /**
-   * Returns the value on the top of the stack.
-   */
-  private Scope peek() throws JSONException {
-    if (stack.isEmpty()) {
-      throw new JSONException("Nesting problem");
-    }
-    return stack.get(stack.size() - 1);
-  }
-
-  /**
-   * Replace the value on the top of the stack with the given value.
-   */
-  private void replaceTop(Scope topOfStack) {
-    stack.set(stack.size() - 1, topOfStack);
-  }
-
-  /**
-   * Encodes {@code value}.
-   *
-   * @param value a {@link JSONObject}, {@link JSONArray}, String, Boolean, Integer, Long, Double or
-   *        null. May not be {@link Double#isNaN() NaNs} or {@link Double#isInfinite() infinities}.
-   * @return this stringer.
-   * @throws JSONException On internal errors. Shouldn't happen.
-   */
-  public JSONStringer value(Object value) throws JSONException {
-    if (stack.isEmpty()) {
-      throw new JSONException("Nesting problem");
-    }
-
-    if (value instanceof JSONArray) {
-      ((JSONArray) value).writeTo(this);
-      return this;
-
-    } else if (value instanceof JSONObject) {
-      ((JSONObject) value).writeTo(this);
-      return this;
-    }
-
-    beforeValue();
-
-    if (value instanceof JSONString) {
-      out.append(((JSONString) value).toJSONString());
-      return this;
-    }
-
-    if (value == null || value instanceof Boolean || value == JSONObject.NULL) {
-      out.append(value);
-
-    } else if (value instanceof Number) {
-      out.append(JSONObject.numberToString((Number) value));
-
-    } else {
-      // Hack to make it possible that the value is not surrounded by quotes. (Used for JavaScript
-      // function calls)
-      // Example: { "name": "testkey", "value": window.myfunction() }
-      if (value.getClass().getSimpleName().contains("JSONFunction")) {
-        // note that no escaping of quotes (or anything else) is done in this case.
-        // that is fine because the only way to get to this point is to
-        // explicitly put a special kind of object into the JSON data structure.
-        out.append(value);
-      } else {
-        string(value.toString());
-      }
-    }
-
-    return this;
-  }
-
-  /**
-   * Encodes {@code value} to this stringer.
-   *
-   * @param value The value to encode.
-   * @return this stringer.
-   * @throws JSONException On internal errors. Shouldn't happen.
-   */
-  public JSONStringer value(boolean value) throws JSONException {
-    if (stack.isEmpty()) {
-      throw new JSONException("Nesting problem");
-    }
-    beforeValue();
-    out.append(value);
-    return this;
-  }
-
-  /**
-   * Encodes {@code value} to this stringer.
-   *
-   * @param value a finite value. May not be {@link Double#isNaN() NaNs} or
-   *        {@link Double#isInfinite() infinities}.
-   * @return this stringer.
-   * @throws JSONException On internal errors. Shouldn't happen.
-   */
-  public JSONStringer value(double value) throws JSONException {
-    if (stack.isEmpty()) {
-      throw new JSONException("Nesting problem");
-    }
-    beforeValue();
-    out.append(JSONObject.numberToString(value));
-    return this;
-  }
-
-  /**
-   * Encodes {@code value} to this stringer.
-   *
-   * @param value The value to encode.
-   * @return this stringer.
-   * @throws JSONException If we have an internal error. Shouldn't happen.
-   */
-  public JSONStringer value(long value) throws JSONException {
-    if (stack.isEmpty()) {
-      throw new JSONException("Nesting problem");
-    }
-    beforeValue();
-    out.append(value);
-    return this;
-  }
-
-  private void string(String value) {
-    out.append("\"");
-    char currentChar = 0;
-
-    for (int i = 0, length = value.length(); i < length; i++) {
-      char previousChar = currentChar;
-      currentChar = value.charAt(i);
-
-      /*
-       * From RFC 4627, "All Unicode characters may be placed within the quotation marks except for
-       * the characters that must be escaped: quotation mark, reverse solidus, and the control
-       * characters (U+0000 through U+001F)."
-       */
-      switch (currentChar) {
-        case '"':
-        case '\\':
-          out.append('\\').append(currentChar);
-          break;
-
-        case '/':
-          // it makes life easier for HTML embedding of javascript if we escape </ sequences
-          if (previousChar == '<') {
-            out.append('\\');
-          }
-          out.append(currentChar);
-          break;
-
-        case '\t':
-          out.append("\\t");
-          break;
-
-        case '\b':
-          out.append("\\b");
-          break;
-
-        case '\n':
-          out.append("\\n");
-          break;
-
-        case '\r':
-          out.append("\\r");
-          break;
-
-        case '\f':
-          out.append("\\f");
-          break;
-
-        default:
-          if (currentChar <= 0x1F) {
-            out.append(String.format("\\u%04x", (int) currentChar));
-          } else {
-            out.append(currentChar);
-          }
-          break;
-      }
-
-    }
-    out.append("\"");
-  }
-
-  private void newline() {
-    if (indent == null) {
-      return;
-    }
-
-    out.append("\n");
-    for (int i = 0; i < stack.size(); i++) {
-      out.append(indent);
-    }
-  }
-
-  /**
-   * Encodes the key (property name) to this stringer.
-   *
-   * @param name the name of the forthcoming value. May not be null.
-   * @return this stringer.
-   * @throws JSONException on internal errors, shouldn't happen.
-   */
-  public JSONStringer key(String name) throws JSONException {
-    if (name == null) {
-      throw new JSONException("Names must be non-null");
-    }
-    beforeKey();
-    string(name);
-    return this;
-  }
-
-  /**
-   * Inserts any necessary separators and whitespace before a name. Also adjusts the stack to expect
-   * the key's value.
-   */
-  private void beforeKey() throws JSONException {
-    Scope context = peek();
-    if (context == Scope.NONEMPTY_OBJECT) { // first in object
-      out.append(',');
-    } else if (context != Scope.EMPTY_OBJECT) { // not in an object!
-      throw new JSONException("Nesting problem");
-    }
-    newline();
-    replaceTop(Scope.DANGLING_KEY);
-  }
-
-  /**
-   * Inserts any necessary separators and whitespace before a literal value, inline array, or inline
-   * object. Also adjusts the stack to expect either a closing bracket or another element.
-   */
-  private void beforeValue() throws JSONException {
-    if (stack.isEmpty()) {
-      return;
-    }
-
-    Scope context = peek();
-    if (context == Scope.EMPTY_ARRAY) { // first in array
-      replaceTop(Scope.NONEMPTY_ARRAY);
-      newline();
-    } else if (context == Scope.NONEMPTY_ARRAY) { // another in array
-      out.append(',');
-      newline();
-    } else if (context == Scope.DANGLING_KEY) { // value for key
-      out.append(indent == null ? ":" : ": ");
-      replaceTop(Scope.NONEMPTY_OBJECT);
-    } else if (context != Scope.NULL) {
-      throw new JSONException("Nesting problem");
-    }
-  }
-
-  /**
-   * Returns the encoded JSON string.
-   *
-   * <p>
-   * If invoked with unterminated arrays or unclosed objects, this method's return value is
-   * undefined.
-   *
-   * <p>
-   * <strong>Warning:</strong> although it contradicts the general contract of
-   * {@link Object#toString}, this method returns null if the stringer contains no data.
-   */
-  @Override
-  public String toString() {
-    return out.length() == 0 ? null : out.toString();
-  }
-}
diff --git a/geode-json/src/main/java/org/json/JSONTokener.java b/geode-json/src/main/java/org/json/JSONTokener.java
deleted file mode 100755
index 702010c..0000000
--- a/geode-json/src/main/java/org/json/JSONTokener.java
+++ /dev/null
@@ -1,639 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed 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.json;
-
-// Note: this class was written without inspecting the non-free org.json sourcecode.
-
-import java.io.IOException;
-import java.io.Reader;
-
-/**
- * Parses a JSON (<a href="http://www.ietf.org/rfc/rfc4627.txt">RFC 4627</a>) encoded string into
- * the corresponding object. Most clients of this class will use only need the
- * {@link #JSONTokener(String) constructor} and {@link #nextValue} method. Example usage:
- *
- * <pre>
- * String json = "{" + "  \"query\": \"Pizza\", " + "  \"locations\": [ 94043, 90210 ] " + "}";
- *
- * JSONObject object = (JSONObject) new JSONTokener(json).nextValue();
- * String query = object.getString("query");
- * JSONArray locations = object.getJSONArray("locations");
- * </pre>
- *
- * <p>
- * For best interoperability and performance use JSON that complies with RFC 4627, such as that
- * generated by {@link JSONStringer}. For legacy reasons this parser is lenient, so a successful
- * parse does not indicate that the input string was valid JSON. All of the following syntax errors
- * will be ignored:
- * <ul>
- * <li>End of line comments starting with {@code //} or {@code #} and ending with a newline
- * character.
- * <li>C-style comments starting with {@code /*} and ending with {@code *}{@code /}. Such comments
- * may not be nested.
- * <li>Strings that are unquoted or {@code 'single quoted'}.
- * <li>Hexadecimal integers prefixed with {@code 0x} or {@code 0X}.
- * <li>Octal integers prefixed with {@code 0}.
- * <li>Array elements separated by {@code ;}.
- * <li>Unnecessary array separators. These are interpreted as if null was the omitted value.
- * <li>Key-value pairs separated by {@code =} or {@code =>}.
- * <li>Key-value pairs separated by {@code ;}.
- * </ul>
- *
- * <p>
- * Each tokener may be used to parse a single JSON string. Instances of this class are not thread
- * safe. Although this class is nonfinal, it was not designed for inheritance and should not be
- * subclassed. In particular, self-use by overrideable methods is not specified. See <i>Effective
- * Java</i> Item 17, "Design and Document or inheritance or else prohibit it" for further
- * information.
- */
-public class JSONTokener {
-
-  /**
-   * The input JSON.
-   */
-  private final String in;
-
-  /**
-   * The index of the next character to be returned by {@link #next}. When the input is exhausted,
-   * this equals the input's length.
-   */
-  private int pos;
-
-  /**
-   * @param in JSON encoded string. Null is not permitted and will yield a tokener that throws
-   *        {@code NullPointerExceptions} when methods are called.
-   */
-  public JSONTokener(String in) {
-    // consume an optional byte order mark (BOM) if it exists
-    if (in != null && in.startsWith("\ufeff")) {
-      in = in.substring(1);
-    }
-    this.in = in;
-  }
-
-  public JSONTokener(Reader input) throws IOException {
-    StringBuilder s = new StringBuilder();
-    char[] readBuf = new char[102400];
-    int n = input.read(readBuf);
-    while (n >= 0) {
-      s.append(readBuf, 0, n);
-      n = input.read(readBuf);
-    }
-    in = s.toString();
-    pos = 0;
-  }
-
-  /**
-   * Returns the next value from the input.
-   *
-   * @return a {@link JSONObject}, {@link JSONArray}, String, Boolean, Integer, Long, Double or
-   *         {@link JSONObject#NULL}.
-   * @throws JSONException if the input is malformed.
-   */
-  public Object nextValue() throws JSONException {
-    int c = nextCleanInternal();
-    switch (c) {
-      case -1:
-        throw syntaxError("End of input");
-
-      case '{':
-        return readObject();
-
-      case '[':
-        return readArray();
-
-      case '\'':
-      case '"':
-        return nextString((char) c);
-
-      default:
-        pos--;
-        return readLiteral();
-    }
-  }
-
-  private int nextCleanInternal() throws JSONException {
-    while (pos < in.length()) {
-      int c = in.charAt(pos++);
-      switch (c) {
-        case '\t':
-        case ' ':
-        case '\n':
-        case '\r':
-          continue;
-
-        case '/':
-          if (pos == in.length()) {
-            return c;
-          }
-
-          char peek = in.charAt(pos);
-          switch (peek) {
-            case '*':
-              // skip a /* c-style comment */
-              pos++;
-              int commentEnd = in.indexOf("*/", pos);
-              if (commentEnd == -1) {
-                throw syntaxError("Unterminated comment");
-              }
-              pos = commentEnd + 2;
-              continue;
-
-            case '/':
-              // skip a // end-of-line comment
-              pos++;
-              skipToEndOfLine();
-              continue;
-
-            default:
-              return c;
-          }
-
-        case '#':
-          /*
-           * Skip a # hash end-of-line comment. The JSON RFC doesn't specify this behavior, but it's
-           * required to parse existing documents. See http://b/2571423.
-           */
-          skipToEndOfLine();
-          continue;
-
-        default:
-          return c;
-      }
-    }
-
-    return -1;
-  }
-
-  /**
-   * Advances the position until after the next newline character. If the line is terminated by
-   * "\r\n", the '\n' must be consumed as whitespace by the caller.
-   */
-  private void skipToEndOfLine() {
-    for (; pos < in.length(); pos++) {
-      char c = in.charAt(pos);
-      if (c == '\r' || c == '\n') {
-        pos++;
-        break;
-      }
-    }
-  }
-
-  /**
-   * Returns the string up to but not including {@code quote}, unescaping any character escape
-   * sequences encountered along the way. The opening quote should have already been read. This
-   * consumes the closing quote, but does not include it in the returned string.
-   *
-   * @param quote either ' or ".
-   * @return The unescaped string.
-   * @throws JSONException if the string isn't terminated by a closing quote correctly.
-   */
-  public String nextString(char quote) throws JSONException {
-    /*
-     * For strings that are free of escape sequences, we can just extract the result as a substring
-     * of the input. But if we encounter an escape sequence, we need to use a StringBuilder to
-     * compose the result.
-     */
-    StringBuilder builder = null;
-
-    /* the index of the first character not yet appended to the builder. */
-    int start = pos;
-
-    while (pos < in.length()) {
-      int c = in.charAt(pos++);
-      if (c == quote) {
-        if (builder == null) {
-          // a new string avoids leaking memory
-          // noinspection RedundantStringConstructorCall
-          return new String(in.substring(start, pos - 1));
-        } else {
-          builder.append(in, start, pos - 1);
-          return builder.toString();
-        }
-      }
-
-      if (c == '\\') {
-        if (pos == in.length()) {
-          throw syntaxError("Unterminated escape sequence");
-        }
-        if (builder == null) {
-          builder = new StringBuilder();
-        }
-        builder.append(in, start, pos - 1);
-        builder.append(readEscapeCharacter());
-        start = pos;
-      }
-    }
-
-    throw syntaxError("Unterminated string");
-  }
-
-  /**
-   * Unescapes the character identified by the character or characters that immediately follow a
-   * backslash. The backslash '\' should have already been read. This supports both unicode escapes
-   * "u000A" and two-character escapes "\n".
-   */
-  private char readEscapeCharacter() throws JSONException {
-    char escaped = in.charAt(pos++);
-    switch (escaped) {
-      case 'u':
-        if (pos + 4 > in.length()) {
-          throw syntaxError("Unterminated escape sequence");
-        }
-        String hex = in.substring(pos, pos + 4);
-        pos += 4;
-        try {
-          return (char) Integer.parseInt(hex, 16);
-        } catch (NumberFormatException nfe) {
-          throw syntaxError("Invalid escape sequence: " + hex);
-        }
-
-      case 't':
-        return '\t';
-
-      case 'b':
-        return '\b';
-
-      case 'n':
-        return '\n';
-
-      case 'r':
-        return '\r';
-
-      case 'f':
-        return '\f';
-
-      case '\'':
-      case '"':
-      case '\\':
-      default:
-        return escaped;
-    }
-  }
-
-  /**
-   * Reads a null, boolean, numeric or unquoted string literal value. Numeric values will be
-   * returned as an Integer, Long, or Double, in that order of preference.
-   */
-  private Object readLiteral() throws JSONException {
-    String literal = nextToInternal("{}[]/\\:,=;# \t\f");
-
-    if (literal.length() == 0) {
-      throw syntaxError("Expected literal value");
-    } else if ("null".equalsIgnoreCase(literal)) {
-      return JSONObject.NULL;
-    } else if ("true".equalsIgnoreCase(literal)) {
-      return Boolean.TRUE;
-    } else if ("false".equalsIgnoreCase(literal)) {
-      return Boolean.FALSE;
-    }
-
-    /* try to parse as an integral type... */
-    if (literal.indexOf('.') == -1) {
-      int base = 10;
-      String number = literal;
-      if (number.startsWith("0x") || number.startsWith("0X")) {
-        number = number.substring(2);
-        base = 16;
-      } else if (number.startsWith("0") && number.length() > 1) {
-        number = number.substring(1);
-        base = 8;
-      }
-      try {
-        long longValue = Long.parseLong(number, base);
-        if (longValue <= Integer.MAX_VALUE && longValue >= Integer.MIN_VALUE) {
-          return (int) longValue;
-        } else {
-          return longValue;
-        }
-      } catch (NumberFormatException e) {
-        /*
-         * This only happens for integral numbers greater than Long.MAX_VALUE, numbers in
-         * exponential form (5e-10) and unquoted strings. Fall through to try floating point.
-         */
-      }
-    }
-
-    /* ...next try to parse as a floating point... */
-    try {
-      return Double.valueOf(literal);
-    } catch (NumberFormatException ignored) {
-    }
-
-    /* ... finally give up. We have an unquoted string */
-    // noinspection RedundantStringConstructorCall
-    return new String(literal); // a new string avoids leaking memory
-  }
-
-  /**
-   * Returns the string up to but not including any of the given characters or a newline character.
-   * This does not consume the excluded character.
-   */
-  private String nextToInternal(String excluded) {
-    int start = pos;
-    for (; pos < in.length(); pos++) {
-      char c = in.charAt(pos);
-      if (c == '\r' || c == '\n' || excluded.indexOf(c) != -1) {
-        return in.substring(start, pos);
-      }
-    }
-    return in.substring(start);
-  }
-
-  /**
-   * Reads a sequence of key/value pairs and the trailing closing brace '}' of an object. The
-   * opening brace '{' should have already been read.
-   */
-  private JSONObject readObject() throws JSONException {
-    JSONObject result = new JSONObject();
-
-    /* Peek to see if this is the empty object. */
-    int first = nextCleanInternal();
-    if (first == '}') {
-      return result;
-    } else if (first != -1) {
-      pos--;
-    }
-
-    while (true) {
-      Object name = nextValue();
-      if (!(name instanceof String)) {
-        if (name == null) {
-          throw syntaxError("Names cannot be null");
-        } else {
-          throw syntaxError(
-              "Names must be strings, but " + name + " is of type " + name.getClass().getName());
-        }
-      }
-
-      /*
-       * Expect the name/value separator to be either a colon ':', an equals sign '=', or an arrow
-       * "=>". The last two are bogus but we include them because that's what the original
-       * implementation did.
-       */
-      int separator = nextCleanInternal();
-      if (separator != ':' && separator != '=') {
-        throw syntaxError("Expected ':' after " + name);
-      }
-      if (pos < in.length() && in.charAt(pos) == '>') {
-        pos++;
-      }
-
-      result.put((String) name, nextValue());
-
-      switch (nextCleanInternal()) {
-        case '}':
-          return result;
-        case ';':
-        case ',':
-          continue;
-        default:
-          throw syntaxError("Unterminated object");
-      }
-    }
-  }
-
-  /**
-   * Reads a sequence of values and the trailing closing brace ']' of an array. The opening brace
-   * '[' should have already been read. Note that "[]" yields an empty array, but "[,]" returns a
-   * two-element array equivalent to "[null,null]".
-   */
-  private JSONArray readArray() throws JSONException {
-    JSONArray result = new JSONArray();
-
-    /* to cover input that ends with ",]". */
-    boolean hasTrailingSeparator = false;
-
-    while (true) {
-      switch (nextCleanInternal()) {
-        case -1:
-          throw syntaxError("Unterminated array");
-        case ']':
-          if (hasTrailingSeparator) {
-            result.put(null);
-          }
-          return result;
-        case ',':
-        case ';':
-          /* A separator without a value first means "null". */
-          result.put(null);
-          hasTrailingSeparator = true;
-          continue;
-        default:
-          pos--;
-      }
-
-      result.put(nextValue());
-
-      switch (nextCleanInternal()) {
-        case ']':
-          return result;
-        case ',':
-        case ';':
-          hasTrailingSeparator = true;
-          continue;
-        default:
-          throw syntaxError("Unterminated array");
-      }
-    }
-  }
-
-  /**
-   * Returns an exception containing the given message plus the current position and the entire
-   * input string.
-   *
-   * @param message The message we want to include.
-   * @return An exception that we can throw.
-   */
-  public JSONException syntaxError(String message) {
-    return new JSONException(message + this);
-  }
-
-  /**
-   * Returns the current position and the entire input string.
-   */
-  @Override
-  public String toString() {
-    // consistent with the original implementation
-    return " at character " + pos + " of " + in;
-  }
-
-  /*
-   * Legacy APIs.
-   *
-   * None of the methods below are on the critical path of parsing JSON documents. They exist only
-   * because they were exposed by the original implementation and may be used by some clients.
-   */
-
-  /**
-   * Returns true until the input has been exhausted.
-   *
-   * @return true if more input exists.
-   */
-  public boolean more() {
-    return pos < in.length();
-  }
-
-  /**
-   * Returns the next available character, or the null character '\0' if all input has been
-   * exhausted. The return value of this method is ambiguous for JSON strings that contain the
-   * character '\0'.
-   *
-   * @return the next character.
-   */
-  public char next() {
-    return pos < in.length() ? in.charAt(pos++) : '\0';
-  }
-
-  /**
-   * Returns the next available character if it equals {@code c}. Otherwise an exception is thrown.
-   *
-   * @param c The character we are looking for.
-   * @return the next character.
-   * @throws JSONException If the next character isn't {@code c}
-   */
-  public char next(char c) throws JSONException {
-    char result = next();
-    if (result != c) {
-      throw syntaxError("Expected " + c + " but was " + result);
-    }
-    return result;
-  }
-
-  /**
-   * Returns the next character that is not whitespace and does not belong to a comment. If the
-   * input is exhausted before such a character can be found, the null character '\0' is returned.
-   * The return value of this method is ambiguous for JSON strings that contain the character '\0'.
-   *
-   * @return The next non-whitespace character.
-   * @throws JSONException Should not be possible.
-   */
-  public char nextClean() throws JSONException {
-    int nextCleanInt = nextCleanInternal();
-    return nextCleanInt == -1 ? '\0' : (char) nextCleanInt;
-  }
-
-  /**
-   * Returns the next {@code length} characters of the input.
-   *
-   * <p>
-   * The returned string shares its backing character array with this tokener's input string. If a
-   * reference to the returned string may be held indefinitely, you should use
-   * {@code new String(result)} to copy it first to avoid memory leaks.
-   *
-   * @param length The desired number of characters to return.
-   * @return The next few characters.
-   * @throws JSONException if the remaining input is not long enough to satisfy this request.
-   */
-  public String next(int length) throws JSONException {
-    if (pos + length > in.length()) {
-      throw syntaxError(length + " is out of bounds");
-    }
-    String result = in.substring(pos, pos + length);
-    pos += length;
-    return result;
-  }
-
-  /**
-   * Returns the {@link String#trim trimmed} string holding the characters up to but not including
-   * the first of:
-   * <ul>
-   * <li>any character in {@code excluded}
-   * <li>a newline character '\n'
-   * <li>a carriage return '\r'
-   * </ul>
-   *
-   * <p>
-   * The returned string shares its backing character array with this tokener's input string. If a
-   * reference to the returned string may be held indefinitely, you should use
-   * {@code new String(result)} to copy it first to avoid memory leaks.
-   *
-   * @param excluded The limiting string where the search should stop.
-   * @return a possibly-empty string
-   */
-  public String nextTo(String excluded) {
-    if (excluded == null) {
-      throw new NullPointerException("excluded == null");
-    }
-    return nextToInternal(excluded).trim();
-  }
-
-  /**
-   * Equivalent to {@code nextTo(String.valueOf(excluded))}.
-   *
-   * @param excluded The limiting character.
-   * @return a possibly-empty string
-   */
-  public String nextTo(char excluded) {
-    return nextToInternal(String.valueOf(excluded)).trim();
-  }
-
-  /**
-   * Advances past all input up to and including the next occurrence of {@code thru}. If the
-   * remaining input doesn't contain {@code thru}, the input is exhausted.
-   *
-   * @param thru The string to skip over.
-   */
-  public void skipPast(String thru) {
-    int thruStart = in.indexOf(thru, pos);
-    pos = thruStart == -1 ? in.length() : (thruStart + thru.length());
-  }
-
-  /**
-   * Advances past all input up to but not including the next occurrence of {@code to}. If the
-   * remaining input doesn't contain {@code to}, the input is unchanged.
-   *
-   * @param to The character we want to skip to.
-   * @return The value of {@code to} or null.
-   */
-  public char skipTo(char to) {
-    int index = in.indexOf(to, pos);
-    if (index != -1) {
-      pos = index;
-      return to;
-    } else {
-      return '\0';
-    }
-  }
-
-  /**
-   * Unreads the most recent character of input. If no input characters have been read, the input is
-   * unchanged.
-   */
-  public void back() {
-    if (--pos == -1) {
-      pos = 0;
-    }
-  }
-
-  /**
-   * Returns the integer [0..15] value for the given hex character, or -1 for non-hex input.
-   *
-   * @param hex a character in the ranges [0-9], [A-F] or [a-f]. Any other character will yield a -1
-   *        result.
-   * @return The decoded integer.
-   */
-  public static int dehexchar(char hex) {
-    if (hex >= '0' && hex <= '9') {
-      return hex - '0';
-    } else if (hex >= 'A' && hex <= 'F') {
-      return hex - 'A' + 10;
-    } else if (hex >= 'a' && hex <= 'f') {
-      return hex - 'a' + 10;
-    } else {
-      return -1;
-    }
-  }
-}
diff --git a/geode-json/src/test/resources/expected-pom.xml b/geode-json/src/test/resources/expected-pom.xml
deleted file mode 100644
index 59cd142..0000000
--- a/geode-json/src/test/resources/expected-pom.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <!--
-  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.
-  -->
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.geode</groupId>
-  <artifactId>geode-json</artifactId>
-  <version>1.10.0-SNAPSHOT</version>
-  <name>Apache Geode</name>
-  <description>Apache Geode provides a database-like consistency model, reliable transaction processing and a shared-nothing architecture to maintain very low latency performance with high concurrency processing</description>
-  <url>http://geode.apache.org</url>
-  <licenses>
-    <license>
-      <name>The Apache Software License, Version 2.0</name>
-      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-    </license>
-  </licenses>
-  <scm>
-    <connection>scm:git:https://github.com:apache/geode.git</connection>
-    <developerConnection>scm:git:https://github.com:apache/geode.git</developerConnection>
-    <url>https://github.com/apache/geode</url>
-  </scm>
-</project>
diff --git a/geode-json/src/test/resources/sample-01.json b/geode-json/src/test/resources/sample-01.json
deleted file mode 100755
index 9cfef12..0000000
--- a/geode-json/src/test/resources/sample-01.json
+++ /dev/null
@@ -1,227 +0,0 @@
-[
-  {
-    "_id": "58309f3bd307b72ae49a9b23",
-    "index": 0,
-    "guid": "5764ebd8-b333-469e-8d83-4eb5658f1566",
-    "isActive": true,
-    "balance": "$1,099.93",
-    "picture": "http://placehold.it/32x32",
-    "age": 37,
-    "eyeColor": "blue",
-    "name": "Barrera Wilkerson",
-    "gender": "male",
-    "company": "VURBO",
-    "email": "barrerawilkerson@vurbo.com",
-    "phone": "+1 (817) 429-2473",
-    "address": "522 Vanderveer Street, Detroit, Wyoming, 4320",
-    "about": "Et officia aute ullamco magna adipisicing non ut cupidatat cupidatat aliquip. Tempor occaecat ex ad dolore aliquip mollit ea esse ipsum. Est incididunt sunt commodo duis est. Reprehenderit in ut reprehenderit ad culpa ea fugiat et est adipisicing aliquip. Id mollit voluptate qui pariatur officia.\r\n",
-    "registered": "2016-06-29T08:54:14 +07:00",
-    "latitude": -87.548434,
-    "longitude": 64.251242,
-    "tags": [
-      "aliqua",
-      "ex",
-      "sit",
-      "magna",
-      "dolor",
-      "laborum",
-      "non"
-    ],
-    "friends": [
-      {
-        "id": 0,
-        "name": "Byers Pratt"
-      },
-      {
-        "id": 1,
-        "name": "Kennedy Contreras"
-      },
-      {
-        "id": 2,
-        "name": "Frazier Monroe"
-      }
-    ],
-    "greeting": "Hello, Barrera Wilkerson! You have 3 unread messages.",
-    "favoriteFruit": "banana"
-  },
-  {
-    "_id": "58309f3b1f506440093a41d1",
-    "index": 1,
-    "guid": "de1a6cc9-f8b3-426e-b68a-cc30e1fff3c1",
-    "isActive": false,
-    "balance": "$3,397.60",
-    "picture": "http://placehold.it/32x32",
-    "age": 32,
-    "eyeColor": "blue",
-    "name": "Trisha Morris",
-    "gender": "female",
-    "company": "AMTAP",
-    "email": "trishamorris@amtap.com",
-    "phone": "+1 (805) 423-3375",
-    "address": "495 Tampa Court, Libertytown, New Hampshire, 5177",
-    "about": "Elit culpa Lorem dolor sit laborum ut ullamco ullamco nostrud reprehenderit adipisicing eiusmod. Aliqua quis dolor esse sint. Dolore in excepteur laborum anim ut consectetur. Nisi officia est eu ex ex id. Ipsum duis ullamco ad ut labore dolor. In amet tempor deserunt ullamco velit eu fugiat.\r\n",
-    "registered": "2015-02-08T06:14:19 +08:00",
-    "latitude": -81.956277,
-    "longitude": 143.685584,
-    "tags": [
-      "cillum",
-      "ullamco",
-      "magna",
-      "cillum",
-      "voluptate",
-      "magna",
-      "exercitation"
-    ],
-    "friends": [
-      {
-        "id": 0,
-        "name": "Fuentes Stout"
-      },
-      {
-        "id": 1,
-        "name": "Violet Vargas"
-      },
-      {
-        "id": 2,
-        "name": "Schmidt Wilder"
-      }
-    ],
-    "greeting": "Hello, Trisha Morris! You have 4 unread messages.",
-    "favoriteFruit": "strawberry"
-  },
-  {
-    "_id": "58309f3beaef2f31339b3755",
-    "index": 2,
-    "guid": "0bf387b7-abc2-4828-becc-1269928f7c3d",
-    "isActive": false,
-    "balance": "$1,520.64",
-    "picture": "http://placehold.it/32x32",
-    "age": 37,
-    "eyeColor": "blue",
-    "name": "Deanna Santiago",
-    "gender": "female",
-    "company": "MEGALL",
-    "email": "deannasantiago@megall.com",
-    "phone": "+1 (916) 511-2291",
-    "address": "919 Fayette Street, Homestead, Utah, 8669",
-    "about": "Sit amet ex quis velit irure Lorem non quis aliquip dolor pariatur nulla Lorem officia. Deserunt officia sit velit labore sint nostrud elit aliquip labore ullamco consectetur id amet. Ullamco duis commodo sit incididunt. Fugiat consectetur ad incididunt officia. Sint cillum minim laborum laboris id cillum est exercitation in eiusmod qui.\r\n",
-    "registered": "2015-11-18T08:39:28 +08:00",
-    "latitude": 79.105701,
-    "longitude": -146.901754,
-    "tags": [
-      "non",
-      "ullamco",
-      "cillum",
-      "ipsum",
-      "amet",
-      "aliqua",
-      "aliquip"
-    ],
-    "friends": [
-      {
-        "id": 0,
-        "name": "Hanson Anderson"
-      },
-      {
-        "id": 1,
-        "name": "Pollard Soto"
-      },
-      {
-        "id": 2,
-        "name": "Barlow Campbell"
-      }
-    ],
-    "greeting": "Hello, Deanna Santiago! You have 7 unread messages.",
-    "favoriteFruit": "apple"
-  },
-  {
-    "_id": "58309f3b49a68ad01346f27f",
-    "index": 3,
-    "guid": "d29c0dcc-48fb-4ca4-a63b-b47c0e6d6398",
-    "isActive": false,
-    "balance": "$2,069.96",
-    "picture": "http://placehold.it/32x32",
-    "age": 29,
-    "eyeColor": "green",
-    "name": "Brooks Gates",
-    "gender": "male",
-    "company": "TERRAGEN",
-    "email": "brooksgates@terragen.com",
-    "phone": "+1 (875) 483-2224",
-    "address": "562 Noll Street, Kipp, Louisiana, 7659",
-    "about": "Reprehenderit laboris mollit nulla commodo quis laborum commodo. Laborum aliquip laboris officia minim ipsum laborum ipsum reprehenderit quis laboris est sint culpa. Culpa magna aute mollit exercitation.\r\n",
-    "registered": "2016-05-04T10:34:38 +07:00",
-    "latitude": 72.77079,
-    "longitude": -134.291768,
-    "tags": [
-      "est",
-      "sunt",
-      "laboris",
-      "ea",
-      "proident",
-      "aute",
-      "excepteur"
-    ],
-    "friends": [
-      {
-        "id": 0,
-        "name": "Roxanne Morgan"
-      },
-      {
-        "id": 1,
-        "name": "Tamara Kelly"
-      },
-      {
-        "id": 2,
-        "name": "Cleveland Bush"
-      }
-    ],
-    "greeting": "Hello, Brooks Gates! You have 1 unread messages.",
-    "favoriteFruit": "banana"
-  },
-  {
-    "_id": "58309f3be746700e9af9a645",
-    "index": 4,
-    "guid": "54382bd6-c476-469d-9e1c-e546f959db51",
-    "isActive": true,
-    "balance": "$2,012.57",
-    "picture": "http://placehold.it/32x32",
-    "age": 40,
-    "eyeColor": "brown",
-    "name": "Jackie Thomas",
-    "gender": "female",
-    "company": "HINWAY",
-    "email": "jackiethomas@hinway.com",
-    "phone": "+1 (843) 470-2096",
-    "address": "910 Emerson Place, Gwynn, Federated States Of Micronesia, 4688",
-    "about": "Id cupidatat laboris elit est eiusmod esse nostrud. Ex commodo nisi voluptate est nisi laborum officia sint incididunt pariatur qui deserunt ullamco. Fugiat proident magna ipsum sit sint id adipisicing sit nostrud labore sit officia. Eiusmod exercitation non enim excepteur amet irure ullamco consectetur cupidatat proident Lorem reprehenderit aliquip. Veniam esse dolor Lorem incididunt proident officia enim in incididunt culpa. Mollit voluptate commodo aliquip anim ipsum nos [...]
-    "registered": "2014-08-03T09:21:43 +07:00",
-    "latitude": 84.871256,
-    "longitude": 2.043339,
-    "tags": [
-      "tempor",
-      "ut",
-      "deserunt",
-      "esse",
-      "nostrud",
-      "dolore",
-      "ex"
-    ],
-    "friends": [
-      {
-        "id": 0,
-        "name": "Lois Walters"
-      },
-      {
-        "id": 1,
-        "name": "Brewer Buchanan"
-      },
-      {
-        "id": 2,
-        "name": "Mccormick Fleming"
-      }
-    ],
-    "greeting": "Hello, Jackie Thomas! You have 2 unread messages.",
-    "favoriteFruit": "banana"
-  }
-]
\ No newline at end of file
diff --git a/geode-junit/build.gradle b/geode-junit/build.gradle
index 7bd09f7..9e6a641 100755
--- a/geode-junit/build.gradle
+++ b/geode-junit/build.gradle
@@ -42,9 +42,7 @@ dependencies {
   compile('org.bouncycastle:bcpkix-jdk15on')
   compile('org.hamcrest:hamcrest-all')
   compile('org.mockito:mockito-core')
-  compile('org.skyscreamer:jsonassert') {
-    exclude module: 'android-json'
-  }
+  compile('org.skyscreamer:jsonassert')
 
   testCompile('pl.pragmatists:JUnitParams')
 
diff --git a/geode-junit/src/test/resources/expected-pom.xml b/geode-junit/src/test/resources/expected-pom.xml
index cbc7ae0..f4b4604 100644
--- a/geode-junit/src/test/resources/expected-pom.xml
+++ b/geode-junit/src/test/resources/expected-pom.xml
@@ -137,12 +137,6 @@
       <groupId>org.skyscreamer</groupId>
       <artifactId>jsonassert</artifactId>
       <scope>compile</scope>
-      <exclusions>
-        <exclusion>
-          <artifactId>android-json</artifactId>
-          <groupId>*</groupId>
-        </exclusion>
-      </exclusions>
     </dependency>
   </dependencies>
 </project>
diff --git a/geode-pulse/build.gradle b/geode-pulse/build.gradle
index 8f2dd61..aab5709 100644
--- a/geode-pulse/build.gradle
+++ b/geode-pulse/build.gradle
@@ -117,7 +117,6 @@ dependencies {
   uiTestCompile(project(':geode-junit')) {
     exclude module: 'geode-core'
   }
-  uiTestCompile(project(':geode-json'))
   uiTestCompile(project(':geode-pulse:geode-pulse-test'))
   uiTestCompile('org.seleniumhq.selenium:selenium-remote-driver')
 
diff --git a/geode-web-api/build.gradle b/geode-web-api/build.gradle
index 418e0d7..cdea6c8 100644
--- a/geode-web-api/build.gradle
+++ b/geode-web-api/build.gradle
@@ -24,8 +24,6 @@ dependencies {
   compile(platform(project(':boms:geode-all-bom')))
   compileOnly(platform(project(':boms:geode-all-bom')))
 
-  integrationTestCompile(project(':geode-json'))
-  
   compileOnly(project(':geode-core'))
 
   compileOnly('javax.servlet:javax.servlet-api')
diff --git a/settings.gradle b/settings.gradle
index 4435e04..094312d 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -24,7 +24,6 @@ gradle.startParameter.continueOnFailure = true
 
 
 include 'geode-common'
-include 'geode-json'
 include 'geode-junit'
 include 'geode-dunit'
 include 'geode-core'