From 250dbe6066e1f098ad1658a3fb453fe948a3f530 Mon Sep 17 00:00:00 2001 From: Phil Filonov Date: Wed, 4 May 2016 12:41:29 +1000 Subject: [PATCH 1/2] I have replaced internal deepCopy call with deepClone (com.rits.cloning package). --- jest-common/pom.xml | 6 ++++++ .../main/java/com/google/gson/GsonUtils.java | 14 ------------- .../java/io/searchbox/client/JestResult.java | 1 + .../java/io/searchbox/core/SearchResult.java | 1 + .../java/io/searchbox/gson/GsonUtils.java | 20 +++++++++++++++++++ pom.xml | 6 ++++++ 6 files changed, 34 insertions(+), 14 deletions(-) delete mode 100644 jest-common/src/main/java/com/google/gson/GsonUtils.java create mode 100644 jest-common/src/main/java/io/searchbox/gson/GsonUtils.java diff --git a/jest-common/pom.xml b/jest-common/pom.xml index 2d681ccd7..d6f2d7ee0 100644 --- a/jest-common/pom.xml +++ b/jest-common/pom.xml @@ -60,6 +60,12 @@ gson + + uk.com.robust-it + cloning + 1.9.2 + + junit diff --git a/jest-common/src/main/java/com/google/gson/GsonUtils.java b/jest-common/src/main/java/com/google/gson/GsonUtils.java deleted file mode 100644 index 64958ce60..000000000 --- a/jest-common/src/main/java/com/google/gson/GsonUtils.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.google.gson; - -/** - * This class is just a workaround for the non-public deepCopy methods in Gson. - */ -public class GsonUtils { - public static JsonObject deepCopy(JsonObject jsonObject) { - return jsonObject.deepCopy(); - } - - public static JsonElement deepCopy(JsonElement jsonElement) { - return jsonElement.deepCopy(); - } -} diff --git a/jest-common/src/main/java/io/searchbox/client/JestResult.java b/jest-common/src/main/java/io/searchbox/client/JestResult.java index 002fb71e4..d0d2cb8ca 100644 --- a/jest-common/src/main/java/io/searchbox/client/JestResult.java +++ b/jest-common/src/main/java/io/searchbox/client/JestResult.java @@ -2,6 +2,7 @@ import com.google.gson.*; import io.searchbox.annotations.JestId; +import io.searchbox.gson.GsonUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/jest-common/src/main/java/io/searchbox/core/SearchResult.java b/jest-common/src/main/java/io/searchbox/core/SearchResult.java index 70cb117ac..1a97442f6 100644 --- a/jest-common/src/main/java/io/searchbox/core/SearchResult.java +++ b/jest-common/src/main/java/io/searchbox/core/SearchResult.java @@ -4,6 +4,7 @@ import io.searchbox.client.JestResult; import io.searchbox.core.search.aggregation.MetricAggregation; import io.searchbox.core.search.aggregation.RootAggregation; +import io.searchbox.gson.GsonUtils; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; diff --git a/jest-common/src/main/java/io/searchbox/gson/GsonUtils.java b/jest-common/src/main/java/io/searchbox/gson/GsonUtils.java new file mode 100644 index 000000000..0efe45633 --- /dev/null +++ b/jest-common/src/main/java/io/searchbox/gson/GsonUtils.java @@ -0,0 +1,20 @@ +package io.searchbox.gson; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.rits.cloning.Cloner; + +/** + * This class is just a workaround for the non-public deepCopy methods in Gson. + */ +public class GsonUtils { + static Cloner cloner = new Cloner(); + + public static JsonObject deepCopy(JsonObject jsonObject) { + return cloner.deepClone(jsonObject); + } + + public static JsonElement deepCopy(JsonElement jsonElement) { + return cloner.deepClone(jsonElement); + } +} diff --git a/pom.xml b/pom.xml index 846b577cd..14be7a40f 100755 --- a/pom.xml +++ b/pom.xml @@ -259,6 +259,12 @@ 2.0.3-SNAPSHOT + + uk.com.robust-it + cloning + 1.9.2 + + junit From 45b3bb1c645f23a630da0d66c5bc09f61401b1c9 Mon Sep 17 00:00:00 2001 From: Phil Filonov Date: Wed, 4 May 2016 21:40:17 +1000 Subject: [PATCH 2/2] Reference to uk.com.robust-it has been removed. Instead CloneUtils class now simply mimics behaviour of native deepCopy methods defined in JsonObject, JsonArray, JsonPrimitive and JsonNull. --- jest-common/pom.xml | 6 --- .../java/io/searchbox/client/JestResult.java | 6 +-- .../java/io/searchbox/cloning/CloneUtils.java | 44 +++++++++++++++++++ .../java/io/searchbox/core/SearchResult.java | 4 +- .../java/io/searchbox/gson/GsonUtils.java | 20 --------- pom.xml | 6 --- 6 files changed, 49 insertions(+), 37 deletions(-) create mode 100644 jest-common/src/main/java/io/searchbox/cloning/CloneUtils.java delete mode 100644 jest-common/src/main/java/io/searchbox/gson/GsonUtils.java diff --git a/jest-common/pom.xml b/jest-common/pom.xml index d6f2d7ee0..2d681ccd7 100644 --- a/jest-common/pom.xml +++ b/jest-common/pom.xml @@ -60,12 +60,6 @@ gson - - uk.com.robust-it - cloning - 1.9.2 - - junit diff --git a/jest-common/src/main/java/io/searchbox/client/JestResult.java b/jest-common/src/main/java/io/searchbox/client/JestResult.java index d0d2cb8ca..c4213dbf7 100644 --- a/jest-common/src/main/java/io/searchbox/client/JestResult.java +++ b/jest-common/src/main/java/io/searchbox/client/JestResult.java @@ -2,7 +2,7 @@ import com.google.gson.*; import io.searchbox.annotations.JestId; -import io.searchbox.gson.GsonUtils; +import io.searchbox.cloning.CloneUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -201,7 +201,7 @@ protected List extractSource(boolean addEsMetadataIdField) { JsonObject currentObj = element.getAsJsonObject(); JsonObject source = currentObj.getAsJsonObject(sourceKey); if (source != null) { - JsonObject copy = GsonUtils.deepCopy(source); + JsonObject copy = (JsonObject)CloneUtils.deepClone(source); if (addEsMetadataIdField) { copy.add(ES_METADATA_ID, currentObj.get("_id")); } @@ -211,7 +211,7 @@ protected List extractSource(boolean addEsMetadataIdField) { } } } else if (obj != null) { - JsonElement copy = GsonUtils.deepCopy(obj); + JsonElement copy = (JsonElement)CloneUtils.deepClone(obj); JsonElement objId = jsonObject.get("_id"); if ((objId != null) && copy.isJsonObject() && addEsMetadataIdField) { copy.getAsJsonObject().add(ES_METADATA_ID, objId); diff --git a/jest-common/src/main/java/io/searchbox/cloning/CloneUtils.java b/jest-common/src/main/java/io/searchbox/cloning/CloneUtils.java new file mode 100644 index 000000000..151a97886 --- /dev/null +++ b/jest-common/src/main/java/io/searchbox/cloning/CloneUtils.java @@ -0,0 +1,44 @@ +package io.searchbox.cloning; + +import com.google.gson.*; + +import java.util.Map; + +/** + * This class is just a workaround for the non-public deepCopy methods in Gson. + */ +public class CloneUtils { + public static JsonElement deepClone(JsonElement jsonElement) { + if (jsonElement instanceof JsonObject) { + return deepCloneObject(jsonElement); + } else if (jsonElement instanceof JsonArray) { + return deepCloneArray(jsonElement); + } else if (jsonElement instanceof JsonPrimitive) { + return jsonElement; + } + + return JsonNull.INSTANCE; + } + + private static JsonElement deepCloneObject(JsonElement jsonElement) { + JsonObject jsonObject = (JsonObject) jsonElement; + JsonObject result = new JsonObject(); + + for (Map.Entry entry : jsonObject.entrySet()) { + result.add(entry.getKey(), deepClone(entry.getValue())); + } + + return result; + } + + private static JsonElement deepCloneArray(JsonElement jsonElement) { + JsonArray jsonArray = (JsonArray) jsonElement; + JsonArray result = new JsonArray(); + + for (JsonElement element : jsonArray) { + result.add(deepClone(element)); + } + + return result; + } +} diff --git a/jest-common/src/main/java/io/searchbox/core/SearchResult.java b/jest-common/src/main/java/io/searchbox/core/SearchResult.java index 1a97442f6..0256dce11 100644 --- a/jest-common/src/main/java/io/searchbox/core/SearchResult.java +++ b/jest-common/src/main/java/io/searchbox/core/SearchResult.java @@ -4,7 +4,7 @@ import io.searchbox.client.JestResult; import io.searchbox.core.search.aggregation.MetricAggregation; import io.searchbox.core.search.aggregation.RootAggregation; -import io.searchbox.gson.GsonUtils; +import io.searchbox.cloning.CloneUtils; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; @@ -112,7 +112,7 @@ protected Hit extractHit(Class sourceType, Class explanationT List sort = extractSort(hitObject.getAsJsonArray(SORT_KEY)); if (id != null) { - source = GsonUtils.deepCopy(source); + source = (JsonObject)CloneUtils.deepClone(source); source.add(ES_METADATA_ID, id); } hit = new Hit( diff --git a/jest-common/src/main/java/io/searchbox/gson/GsonUtils.java b/jest-common/src/main/java/io/searchbox/gson/GsonUtils.java deleted file mode 100644 index 0efe45633..000000000 --- a/jest-common/src/main/java/io/searchbox/gson/GsonUtils.java +++ /dev/null @@ -1,20 +0,0 @@ -package io.searchbox.gson; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.rits.cloning.Cloner; - -/** - * This class is just a workaround for the non-public deepCopy methods in Gson. - */ -public class GsonUtils { - static Cloner cloner = new Cloner(); - - public static JsonObject deepCopy(JsonObject jsonObject) { - return cloner.deepClone(jsonObject); - } - - public static JsonElement deepCopy(JsonElement jsonElement) { - return cloner.deepClone(jsonElement); - } -} diff --git a/pom.xml b/pom.xml index 14be7a40f..846b577cd 100755 --- a/pom.xml +++ b/pom.xml @@ -259,12 +259,6 @@ 2.0.3-SNAPSHOT - - uk.com.robust-it - cloning - 1.9.2 - - junit