*
- * Extracted from {@link TypedJsonPdxIntegrationTest}.
+ * Extracted from {@link QueryResultFormatterPdxIntegrationTest}.
*
*
* TODO: add real assertions
*/
@Category({OQLQueryTest.class})
-public class TypedJsonQueryIntegrationTest {
+public class QueryResultFormatterQueryIntegrationTest {
private static final String RESULT = "result";
@@ -46,18 +46,19 @@ public class TypedJsonQueryIntegrationTest {
public void testUserObject() throws Exception {
Portfolio p = new Portfolio(2);
- TypedJson typedJson = new TypedJson(RESULT, p);
+ QueryResultFormatter queryResultFormatter = new QueryResultFormatter(100).add(RESULT, p);
- checkResult(typedJson);
+ checkResult(queryResultFormatter);
}
@Test
public void testUserObjectArray() throws Exception {
Portfolio[] portfolios = createPortfoliosAndPositions(2);
- TypedJson typedJson = new TypedJson(RESULT, portfolios);
+ QueryResultFormatter queryResultFormatter =
+ new QueryResultFormatter(100).add(RESULT, portfolios);
- checkResult(typedJson);
+ checkResult(queryResultFormatter);
}
@Test
@@ -65,24 +66,25 @@ public void testMemUsage() throws Exception {
Portfolio[] portfolios = createPortfoliosAndPositions(1000);
System.out.println("Size Of port " + ObjectSizer.REFLECTION_SIZE.sizeof(portfolios));
- TypedJson typedJson = new TypedJson(RESULT, portfolios);
- System.out.println("Size Of json " + ObjectSizer.REFLECTION_SIZE.sizeof(typedJson));
+ QueryResultFormatter queryResultFormatter =
+ new QueryResultFormatter(100).add(RESULT, portfolios);
+ System.out.println("Size Of json " + ObjectSizer.REFLECTION_SIZE.sizeof(queryResultFormatter));
- checkResult(typedJson);
+ checkResult(queryResultFormatter);
}
@Test
public void testQueryLike() throws Exception {
Portfolio[] portfolios = createPortfoliosAndPositions(2);
- TypedJson typedJson = new TypedJson(RESULT, null);
- typedJson.add("member", "server1");
- // checkResult(typedJson); -- fails
+ QueryResultFormatter queryResultFormatter = new QueryResultFormatter(100).add(RESULT, null);
+ queryResultFormatter.add("member", "server1");
+ // checkResult(queryResultFormatter); -- fails
for (int i = 0; i < 2; i++) {
- typedJson.add(RESULT, portfolios[i]);
+ queryResultFormatter.add(RESULT, portfolios[i]);
}
- checkResult(typedJson);
+ checkResult(queryResultFormatter);
}
private Portfolio[] createPortfoliosAndPositions(final int count) {
@@ -94,8 +96,8 @@ private Portfolio[] createPortfoliosAndPositions(final int count) {
return portfolios;
}
- private void checkResult(final TypedJson typedJson) throws GfJsonException {
- GfJsonObject gfJsonObject = new GfJsonObject(typedJson.toString());
+ private void checkResult(final QueryResultFormatter queryResultFormatter) throws GfJsonException {
+ GfJsonObject gfJsonObject = new GfJsonObject(queryResultFormatter.toString());
System.out.println(gfJsonObject);
assertThat(gfJsonObject.get(RESULT)).isNotNull();
}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/management/DataQueryEngineIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/management/DataQueryEngineIntegrationTest.java
index 6a55a2b818c1..43be476df675 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/management/DataQueryEngineIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/management/DataQueryEngineIntegrationTest.java
@@ -32,7 +32,7 @@
import org.apache.geode.management.internal.ManagementConstants;
import org.apache.geode.management.internal.SystemManagementService;
import org.apache.geode.management.internal.beans.DataQueryEngine;
-import org.apache.geode.management.internal.cli.json.TypedJson;
+import org.apache.geode.management.internal.beans.QueryDataFunction;
import org.apache.geode.management.model.EmptyObject;
import org.apache.geode.management.model.Item;
import org.apache.geode.management.model.Order;
@@ -61,7 +61,8 @@ public class DataQueryEngineIntegrationTest {
* Number of elements to be shown in queryData operation if query results contain collections like
* Map, List etc.
*/
- private static final int queryCollectionsDepth = TypedJson.DEFAULT_COLLECTION_ELEMENT_LIMIT;
+ private static final int queryCollectionsDepth =
+ QueryDataFunction.DEFAULT_COLLECTION_ELEMENT_LIMIT;
@Rule
public ServerStarterRule server = new ServerStarterRule().withNoCacheServer()
@@ -97,7 +98,7 @@ public void testCyclicWithNestedObjectReference() throws Exception {
region.put("order1", order);
String expectedResult =
- "{\"result\":[[\"org.apache.geode.management.model.Order\",{\"items\":[\"java.util.Collection\",{\"0\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":[\"java.lang.String\",\"Book\"],\"itemId\":[\"java.lang.String\",\"ID_1\"],\"order\":[\"org.apache.geode.management.model.Order\",\"org.apache.geode.management.model.Order\"]}],\"1\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":[\"java.lang.String\",\"Book\"],\"itemId\":[\"java.lang.String\",\"ID_2\"],\"order\":[\"org.apache.geode.management.model.Order\",\"org.apache.geode.management.model.Order\"]}],\"2\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":[\"java.lang.String\",\"Book\"],\"itemId\":[\"java.lang.String\",\"ID_3\"],\"order\":[\"org.apache.geode.management.model.Order\",\"org.apache.geode.management.model.Order\"]}],\"3\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":[\"java.lang.String\",\"Book\"],\"itemId\":[\"java.lang.String\",\"ID_4\"],\"order\":[\"org.apache.geode.management.model.Order\",\"org.apache.geode.management.model.Order\"]}],\"4\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":[\"java.lang.String\",\"Book\"],\"itemId\":[\"java.lang.String\",\"ID_5\"],\"order\":[\"org.apache.geode.management.model.Order\",\"org.apache.geode.management.model.Order\"]}]}],\"id\":[\"java.lang.String\",\"test\"]}]]}";
+ "{\"result\":[[\"org.apache.geode.management.model.Order\",{\"id\":\"test\",\"items\":[\"java.util.ArrayList\",{\"0\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":\"Book\",\"itemId\":\"ID_1\",\"order\":\"duplicate org.apache.geode.management.model.Order\"}],\"1\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":\"Book\",\"itemId\":\"ID_2\",\"order\":\"duplicate org.apache.geode.management.model.Order\"}],\"2\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":\"Book\",\"itemId\":\"ID_3\",\"order\":\"duplicate org.apache.geode.management.model.Order\"}],\"3\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":\"Book\",\"itemId\":\"ID_4\",\"order\":\"duplicate org.apache.geode.management.model.Order\"}],\"4\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":\"Book\",\"itemId\":\"ID_5\",\"order\":\"duplicate org.apache.geode.management.model.Order\"}]}]}]]}";
Object result = queryEngine.queryForJsonResult(QUERY_1, 0, queryResultSetLimit,
queryCollectionsDepth);
String queryResult = (String) result;
@@ -130,7 +131,7 @@ public void testCyclicWithNestedClasses() throws Exception {
queryCollectionsDepth);
String expectedResult =
- "{\"result\":[[\"org.apache.geode.management.model.Order\",{\"items\":[\"java.util.Collection\",{\"0\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":[\"java.lang.String\",\"Book\"],\"itemId\":[\"java.lang.String\",\"ID_1\"],\"order\":[\"org.apache.geode.management.model.Order\",{\"items\":[\"java.util.Collection\",{}],\"id\":[\"java.lang.String\",\"ORDER_ID_1\"]}]}],\"1\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":[\"java.lang.String\",\"Book\"],\"itemId\":[\"java.lang.String\",\"ID_2\"],\"order\":[\"org.apache.geode.management.model.Order\",{\"items\":[\"java.util.Collection\",{}],\"id\":[\"java.lang.String\",\"ORDER_ID_2\"]}]}],\"2\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":[\"java.lang.String\",\"Book\"],\"itemId\":[\"java.lang.String\",\"ID_3\"],\"order\":[\"org.apache.geode.management.model.Order\",{\"items\":[\"java.util.Collection\",{}],\"id\":[\"java.lang.String\",\"ORDER_ID_3\"]}]}],\"3\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":[\"java.lang.String\",\"Book\"],\"itemId\":[\"java.lang.String\",\"ID_4\"],\"order\":[\"org.apache.geode.management.model.Order\",{\"items\":[\"java.util.Collection\",{}],\"id\":[\"java.lang.String\",\"ORDER_ID_4\"]}]}],\"4\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":[\"java.lang.String\",\"Book\"],\"itemId\":[\"java.lang.String\",\"ID_5\"],\"order\":[\"org.apache.geode.management.model.Order\",{\"items\":[\"java.util.Collection\",{}],\"id\":[\"java.lang.String\",\"ORDER_ID_5\"]}]}]}],\"id\":[\"java.lang.String\",\"test\"]}]]}";
+ "{\"result\":[[\"org.apache.geode.management.model.Order\",{\"id\":\"test\",\"items\":[\"java.util.ArrayList\",{\"0\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":\"Book\",\"itemId\":\"ID_1\",\"order\":[\"org.apache.geode.management.model.Order\",{\"id\":\"ORDER_ID_1\",\"items\":[\"java.util.ArrayList\",{}]}]}],\"1\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":\"Book\",\"itemId\":\"ID_2\",\"order\":[\"org.apache.geode.management.model.Order\",{\"id\":\"ORDER_ID_2\",\"items\":[\"java.util.ArrayList\",{}]}]}],\"2\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":\"Book\",\"itemId\":\"ID_3\",\"order\":[\"org.apache.geode.management.model.Order\",{\"id\":\"ORDER_ID_3\",\"items\":[\"java.util.ArrayList\",{}]}]}],\"3\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":\"Book\",\"itemId\":\"ID_4\",\"order\":[\"org.apache.geode.management.model.Order\",{\"id\":\"ORDER_ID_4\",\"items\":[\"java.util.ArrayList\",{}]}]}],\"4\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":\"Book\",\"itemId\":\"ID_5\",\"order\":[\"org.apache.geode.management.model.Order\",{\"id\":\"ORDER_ID_5\",\"items\":[\"java.util.ArrayList\",{}]}]}]}]}]]}";
assertThat(queryResult).isEqualToIgnoringWhitespace(expectedResult);
// If not correct JSON format this will throw a JSONException
@@ -160,7 +161,7 @@ public void testCyclicWithNestedRefernce2ndLayer() throws Exception {
String queryResult = queryEngine.queryForJsonResult(QUERY_1, 0, queryResultSetLimit,
queryCollectionsDepth);
String expectedResult =
- "{\"result\":[[\"org.apache.geode.management.model.Order\",{\"items\":[\"java.util.Collection\",{\"0\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":[\"java.lang.String\",\"Book\"],\"itemId\":[\"java.lang.String\",\"ID_1\"],\"order\":[\"org.apache.geode.management.model.Order\",{\"items\":[\"java.util.Collection\",\"java.util.ArrayList\"],\"id\":[\"java.lang.String\",\"ORDER_ID_1\"]}]}],\"1\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":[\"java.lang.String\",\"Book\"],\"itemId\":[\"java.lang.String\",\"ID_2\"],\"order\":[\"org.apache.geode.management.model.Order\",{\"items\":[\"java.util.Collection\",\"java.util.ArrayList\"],\"id\":[\"java.lang.String\",\"ORDER_ID_2\"]}]}],\"2\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":[\"java.lang.String\",\"Book\"],\"itemId\":[\"java.lang.String\",\"ID_3\"],\"order\":[\"org.apache.geode.management.model.Order\",{\"items\":[\"java.util.Collection\",\"java.util.ArrayList\"],\"id\":[\"java.lang.String\",\"ORDER_ID_3\"]}]}],\"3\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":[\"java.lang.String\",\"Book\"],\"itemId\":[\"java.lang.String\",\"ID_4\"],\"order\":[\"org.apache.geode.management.model.Order\",{\"items\":[\"java.util.Collection\",\"java.util.ArrayList\"],\"id\":[\"java.lang.String\",\"ORDER_ID_4\"]}]}],\"4\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":[\"java.lang.String\",\"Book\"],\"itemId\":[\"java.lang.String\",\"ID_5\"],\"order\":[\"org.apache.geode.management.model.Order\",{\"items\":[\"java.util.Collection\",\"java.util.ArrayList\"],\"id\":[\"java.lang.String\",\"ORDER_ID_5\"]}]}]}],\"id\":[\"java.lang.String\",\"ORDER_TEST\"]}]]}";
+ "{\"result\":[[\"org.apache.geode.management.model.Order\",{\"id\":\"ORDER_TEST\",\"items\":[\"java.util.ArrayList\",{\"0\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":\"Book\",\"itemId\":\"ID_1\",\"order\":[\"org.apache.geode.management.model.Order\",{\"id\":\"ORDER_ID_1\",\"items\":[\"java.util.ArrayList\",{\"0\":\"duplicate org.apache.geode.management.model.Item\",\"1\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":\"Book\",\"itemId\":\"ID_2\",\"order\":[\"org.apache.geode.management.model.Order\",{\"id\":\"ORDER_ID_2\",\"items\":[\"java.util.ArrayList\",{\"0\":\"duplicate org.apache.geode.management.model.Item\",\"1\":\"duplicate org.apache.geode.management.model.Item\",\"2\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":\"Book\",\"itemId\":\"ID_3\",\"order\":[\"org.apache.geode.management.model.Order\",{\"id\":\"ORDER_ID_3\",\"items\":[\"java.util.ArrayList\",{\"0\":\"duplicate org.apache.geode.management.model.Item\",\"1\":\"duplicate org.apache.geode.management.model.Item\",\"2\":\"duplicate org.apache.geode.management.model.Item\",\"3\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":\"Book\",\"itemId\":\"ID_4\",\"order\":[\"org.apache.geode.management.model.Order\",{\"id\":\"ORDER_ID_4\",\"items\":[\"java.util.ArrayList\",{\"0\":\"duplicate org.apache.geode.management.model.Item\",\"1\":\"duplicate org.apache.geode.management.model.Item\",\"2\":\"duplicate org.apache.geode.management.model.Item\",\"3\":\"duplicate org.apache.geode.management.model.Item\",\"4\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":\"Book\",\"itemId\":\"ID_5\",\"order\":[\"org.apache.geode.management.model.Order\",{\"id\":\"ORDER_ID_5\",\"items\":[\"java.util.ArrayList\",{\"0\":\"duplicate org.apache.geode.management.model.Item\",\"1\":\"duplicate org.apache.geode.management.model.Item\",\"2\":\"duplicate org.apache.geode.management.model.Item\",\"3\":\"duplicate org.apache.geode.management.model.Item\",\"4\":\"duplicate org.apache.geode.management.model.Item\"}]}]}]}]}]}],\"4\":\"duplicate org.apache.geode.management.model.Item\"}]}]}],\"3\":\"duplicate org.apache.geode.management.model.Item\",\"4\":\"duplicate org.apache.geode.management.model.Item\"}]}]}],\"2\":\"duplicate org.apache.geode.management.model.Item\",\"3\":\"duplicate org.apache.geode.management.model.Item\",\"4\":\"duplicate org.apache.geode.management.model.Item\"}]}]}],\"1\":\"duplicate org.apache.geode.management.model.Item\",\"2\":\"duplicate org.apache.geode.management.model.Item\",\"3\":\"duplicate org.apache.geode.management.model.Item\",\"4\":\"duplicate org.apache.geode.management.model.Item\"}]}]]}";
assertThat(queryResult).isEqualToIgnoringWhitespace(expectedResult);
// If not correct JSON format this will throw a JSONException
@@ -276,7 +277,7 @@ public void testSubClassOverridingMethods() throws Exception {
String queryResult = queryEngine.queryForJsonResult(QUERY_1, 0, queryResultSetLimit,
queryCollectionsDepth);
String expectedResult =
- "{\"result\":[[\"org.apache.geode.management.model.SubOrder\",{\"items\":[\"java.util.Collection\",{}],\"id\":[\"java.lang.String\",\"null1\"]}]]}";
+ "{\"result\":[[\"org.apache.geode.management.model.SubOrder\",{\"id\":\"null1\",\"items\":[\"java.util.ArrayList\",{}]}]]}";
assertThat(queryResult).isEqualToIgnoringWhitespace(expectedResult);
// If not correct JSON format this will throw a JSONException
@@ -299,7 +300,7 @@ public void testNestedPDXObject() throws Exception {
String queryResult = queryEngine.queryForJsonResult(QUERY_1, 0, queryResultSetLimit,
queryCollectionsDepth);
String expectedResult =
- "{\"result\":[[\"org.apache.geode.pdx.PdxInstance\",{\"ID\":[\"java.lang.Integer\",111],\"status\":[\"java.lang.String\",\"active\"],\"secId\":[\"java.lang.String\",\"IBM\"]}]]}";
+ "{\"result\":[[\"org.apache.geode.pdx.internal.PdxInstanceImpl\",{\"ID\":111,\"status\":\"active\",\"secId\":\"IBM\"}]]}";
assertThat(queryResult).isEqualToIgnoringWhitespace(expectedResult);
// If not correct JSON format this will throw a JSONException
@@ -317,7 +318,7 @@ public void testArrayWithNullValues() throws Exception {
String queryResult = queryEngine.queryForJsonResult(QUERY_1, 0, queryResultSetLimit,
queryCollectionsDepth);
String expectedResult =
- "{\"result\":[[\"org.apache.geode.management.model.SubOrder[]\",[{\"items\":[\"java.util.Collection\",{}],\"id\":[\"java.lang.String\",\"null1\"]},null]]]}";
+ "{\"result\":[[\"[Lorg.apache.geode.management.model.SubOrder;\",[[\"org.apache.geode.management.model.SubOrder\",{\"id\":\"null1\",\"items\":[\"java.util.ArrayList\",{}]}],null]]]}";
assertThat(queryResult).isEqualToIgnoringWhitespace(expectedResult);
// If not correct JSON format this will throw a JSONException
@@ -335,7 +336,7 @@ public void testWithSqlDate() throws Exception {
String queryResult = queryEngine.queryForJsonResult(QUERY_1, 0, queryResultSetLimit,
queryCollectionsDepth);
String expectedResult =
- "{\"result\":[[\"org.apache.geode.management.model.SubOrder[]\",[{\"items\":[\"java.util.Collection\",{}],\"id\":[\"java.lang.String\",\"null1\"]},null]]]}";
+ "{\"result\":[[\"[Lorg.apache.geode.management.model.SubOrder;\",[[\"org.apache.geode.management.model.SubOrder\",{\"id\":\"null1\",\"items\":[\"java.util.ArrayList\",{}]}],null]]]}";
assertThat(queryResult).isEqualToIgnoringWhitespace(expectedResult);
// If not correct JSON format this will throw a JSONException
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/management/internal/cli/json/TypedJsonPdxIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/management/internal/cli/json/QueryResultFormatterPdxIntegrationTest.java
similarity index 85%
rename from geode-core/src/integrationTest/java/org/apache/geode/management/internal/cli/json/TypedJsonPdxIntegrationTest.java
rename to geode-core/src/integrationTest/java/org/apache/geode/management/internal/cli/json/QueryResultFormatterPdxIntegrationTest.java
index bead9e680250..dfe9f8cb6ad2 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/management/internal/cli/json/TypedJsonPdxIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/management/internal/cli/json/QueryResultFormatterPdxIntegrationTest.java
@@ -34,12 +34,12 @@
import org.apache.geode.pdx.internal.PdxInstanceFactoryImpl;
/**
- * Integration tests for {@link TypedJson}.
+ * Integration tests for {@link QueryResultFormatter}.
*
*
* TODO: add actual assertions
*/
-public class TypedJsonPdxIntegrationTest {
+public class QueryResultFormatterPdxIntegrationTest {
private static final String RESULT = "result";
@@ -71,9 +71,10 @@ public void supportsPdxInstance() throws Exception {
pdxInstanceFactory.writeObject("object", new SerializableObject(2));
PdxInstance pdxInstance = pdxInstanceFactory.create();
- TypedJson typedJson = new TypedJson(RESULT, pdxInstance);
+ QueryResultFormatter queryResultFormatter =
+ new QueryResultFormatter(100).add(RESULT, pdxInstance);
- checkResult(typedJson);
+ checkResult(queryResultFormatter);
}
@Test
@@ -83,13 +84,14 @@ public void supportsObjectContainingPdxInstance() throws Exception {
pdxInstanceFactory.writeString("secId", "IBM");
PdxContainer pdxContainer = new PdxContainer(pdxInstanceFactory.create(), 1);
- TypedJson typedJson = new TypedJson(RESULT, pdxContainer);
+ QueryResultFormatter queryResultFormatter =
+ new QueryResultFormatter(100).add(RESULT, pdxContainer);
- checkResult(typedJson);
+ checkResult(queryResultFormatter);
}
- private void checkResult(TypedJson typedJson) throws GfJsonException {
- GfJsonObject gfJsonObject = new GfJsonObject(typedJson.toString());
+ private void checkResult(QueryResultFormatter queryResultFormatter) throws GfJsonException {
+ GfJsonObject gfJsonObject = new GfJsonObject(queryResultFormatter.toString());
System.out.println(gfJsonObject);
assertThat(gfJsonObject.get(RESULT)).isNotNull();
}
diff --git a/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/excludedClasses.txt b/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/excludedClasses.txt
index 9886bd5825be..23a7c421ef67 100644
--- a/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/excludedClasses.txt
+++ b/geode-core/src/integrationTest/resources/org/apache/geode/codeAnalysis/excludedClasses.txt
@@ -77,6 +77,7 @@ org/apache/geode/internal/tcp/VersionedByteBufferInputStream
org/apache/geode/internal/util/concurrent/StoppableReadWriteLock
org/apache/geode/management/internal/cli/commands/ShowMetricsCommand$Category
org/apache/geode/management/internal/cli/exceptions/UserErrorException
+org/apache/geode/management/internal/cli/json/QueryResultFormatter$PreventReserializationModule
org/apache/geode/security/ResourcePermission
org/apache/geode/security/ResourcePermission$Operation
org/apache/geode/security/ResourcePermission$Resource
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/beans/DistributedSystemBridge.java b/geode-core/src/main/java/org/apache/geode/management/internal/beans/DistributedSystemBridge.java
index ff4405ff0f98..6b0d7fbe1af6 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/beans/DistributedSystemBridge.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/beans/DistributedSystemBridge.java
@@ -85,7 +85,6 @@
import org.apache.geode.management.internal.beans.stats.MemberClusterStatsMonitor;
import org.apache.geode.management.internal.beans.stats.ServerClusterStatsMonitor;
import org.apache.geode.management.internal.cli.CliUtil;
-import org.apache.geode.management.internal.cli.json.TypedJson;
/**
* This is the gateway to distributed system as a whole. Aggregated metrics and stats are shown
@@ -208,7 +207,7 @@ public class DistributedSystemBridge {
* NUmber of elements to be shown in queryData operation if query results contain collections like
* Map, List etc.
*/
- private int queryCollectionsDepth = TypedJson.DEFAULT_COLLECTION_ELEMENT_LIMIT;
+ private int queryCollectionsDepth = QueryDataFunction.DEFAULT_COLLECTION_ELEMENT_LIMIT;
/**
* used to issue queries
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/beans/QueryDataFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/beans/QueryDataFunction.java
index 997c283e1445..9b1fb91781ea 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/beans/QueryDataFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/beans/QueryDataFunction.java
@@ -43,7 +43,7 @@
import org.apache.geode.internal.cache.execute.InternalFunction;
import org.apache.geode.internal.logging.LogService;
import org.apache.geode.management.internal.ManagementConstants;
-import org.apache.geode.management.internal.cli.json.TypedJson;
+import org.apache.geode.management.internal.cli.json.QueryResultFormatter;
/**
* This function is executed on one or multiple members based on the member input to
@@ -56,6 +56,11 @@ public class QueryDataFunction implements Function, InternalEntity {
private static final Logger logger = LogService.getLogger();
+ /**
+ * Limit of collection length to be serialized in JSON format.
+ */
+ public static final int DEFAULT_COLLECTION_ELEMENT_LIMIT = 100;
+
private static final String MEMBER_KEY = "member";
private static final String RESULT_KEY = "result";
private static final String NO_DATA_FOUND = "No Data Found";
@@ -113,7 +118,7 @@ private byte[] selectWithType(final FunctionContext context, String queryString,
queryString = applyLimitClause(queryString, limit, queryResultSetLimit);
try {
- TypedJson result = new TypedJson(queryCollectionsDepth);
+ QueryResultFormatter result = new QueryResultFormatter(queryCollectionsDepth);
Region region = cache.getRegion(regionName);
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/QueryResultFormatter.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/QueryResultFormatter.java
new file mode 100644
index 000000000000..ef5590e7df3c
--- /dev/null
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/QueryResultFormatter.java
@@ -0,0 +1,456 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.management.internal.cli.json;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonStreamContext;
+import com.fasterxml.jackson.core.JsonToken;
+import com.fasterxml.jackson.core.type.WritableTypeId;
+import com.fasterxml.jackson.databind.BeanDescription;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.MapperFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationConfig;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
+import com.fasterxml.jackson.databind.ser.PropertyWriter;
+import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
+
+import org.apache.geode.cache.Region;
+import org.apache.geode.cache.query.internal.StructImpl;
+import org.apache.geode.pdx.PdxInstance;
+
+/**
+ * A JSON serializer that has special handling for collections to limit the number of elements
+ * written to the document. It also has special handling for PdxInstance and query Structs.
+ */
+public class QueryResultFormatter {
+
+ private final ObjectMapper mapper;
+
+ /**
+ * map contains the named objects to be serialized
+ */
+ private final Map> map;
+
+ /**
+ * serializedObjects is used to prevent recursive serialization in cases where
+ * there are cyclical references
+ */
+ private final Map