This is an automated email from the ASF dual-hosted git repository.
bschuchardt pushed a commit to branch feature/GEODE-6196
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/feature/GEODE-6196 by this
push:
new 46a63e2 selected query tests now working
46a63e2 is described below
commit 46a63e24eae35db7f86115b40817127d79c303ba
Author: Bruce Schuchardt <[email protected]>
AuthorDate: Mon Mar 4 15:41:20 2019 -0800
selected query tests now working
---
.../geode/management/QueryDataDUnitTest.java | 4 +-
.../management/internal/cli/json/TypedJson.java | 140 +++++++--------------
.../internal/cli/json/TypedJsonTest.java | 4 +-
3 files changed, 46 insertions(+), 102 deletions(-)
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 fa037cd..0d4e292 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 {
JSONArray jsonArray1 = jsonArray.getJSONArray(0);
// Get the ObjectValue
- JSONObject collectionObject = (JSONObject) jsonArray1.get(1);
+ JSONArray collectionObject = (JSONArray) jsonArray1.get(1);
assertThat(collectionObject.length()).isEqualTo(100);
// Query With Override Values
@@ -284,7 +284,7 @@ public class QueryDataDUnitTest implements Serializable {
jsonArray1 = jsonArray.getJSONArray(0);
// Get the ObjectValue
- collectionObject = (JSONObject) jsonArray1.get(1);
+ collectionObject = (JSONArray) jsonArray1.get(1);
assertThat(collectionObject.length()).isEqualTo(newQueryCollectionDepth);
});
}
diff --git
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/TypedJson.java
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/TypedJson.java
index 5e0a0c7..4e22e69 100644
---
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/TypedJson.java
+++
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/json/TypedJson.java
@@ -26,6 +26,7 @@ import java.util.Map;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonToken;
+import com.fasterxml.jackson.core.type.WritableTypeId;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
@@ -58,15 +59,16 @@ public class TypedJson {
{
mapper = new ObjectMapper();
mapperModule = new SimpleModule();
+ // todo: Collection.class is probably too generic. Is there another way to
+ // limit the number of elements generated by Jackson w/o using a
serializer for Collection?
mapperModule.addSerializer(Collection.class, new
TypedJsonCollectionSerializer());
- mapperModule.addSerializer(Map.class, new TypedJsonMapSerializer());
mapperModule.addSerializer(PdxInstance.class, new
TypedJsonPdxInstanceSerializer());
mapperModule.addSerializer(StructImpl.class, new
TypedJsonStructSerializer());
mapperModule.addSerializer(Region.Entry.class, new
TypedJsonRegionEntrySerializer());
- // todo: arrays need to be handled & queryCollectionsDepth applied
mapper.registerModule(mapperModule);
mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
// todo: we need type information for enums but Jackson doesn't seem to do
that
+ // -- look at the standard EnumSerializer to see if it can be configured
mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
}
@@ -157,111 +159,29 @@ public class TypedJson {
try {
boolean addComma = false;
int length = values.size();
-
writer.write('[');
if (length == 0) {
- mapper.writeValueAsString(null);
+ mapper.writeValue(writer, null);
} else {
for (int i = 0; i < length; i += 1) {
if (addComma) {
writer.write(',');
}
- mapper.writeValue(writer, values.get(i));
+ // System.out.format("BRUCE: writeList is serializing %s\n",
values.get(i));
+ mapper.writerFor(values.get(i).getClass()).writeValue(writer,
values.get(i));
+
addCommaBeforeNextElement = false;
addComma = true;
}
}
writer.write(']');
-
- return writer;
} catch (IOException e) {
throw new GfJsonException(e);
}
+ return writer;
}
- private String quote(String string) {
- StringWriter sw = new StringWriter();
- synchronized (sw.getBuffer()) {
- try {
- return quote(string, sw).toString();
- } catch (IOException ignored) {
- // will never happen - we are writing to a string writer
- return "";
- }
- }
- }
-
-
- /**
- * Handle some special GemFire classes. We don't want to expose some of the
internal classes.
- * Hence corresponding interface or external classes should be shown.
- */
- private String internalToExternal(Class clazz, Object value) {
- if (value != null && value instanceof Region.Entry) {
- return Region.Entry.class.getCanonicalName();
- }
- if (value != null && value instanceof PdxInstance) {
- return PdxInstance.class.getCanonicalName();
- }
- return clazz.getCanonicalName();
- }
-
- private Writer quote(String string, Writer w) throws IOException {
- if (string == null || string.length() == 0) {
- w.write("\"\"");
- return w;
- }
-
- char b;
- char c = 0;
- String hhhh;
- int i;
- int len = string.length();
-
- w.write('"');
- for (i = 0; i < len; i += 1) {
- b = c;
- c = string.charAt(i);
- switch (c) {
- case '\\':
- case '"':
- w.write('\\');
- w.write(c);
- break;
- case '/':
- if (b == '<') {
- w.write('\\');
- }
- w.write(c);
- break;
- case '\b':
- w.write("\\b");
- break;
- case '\t':
- w.write("\\t");
- break;
- case '\n':
- w.write("\\n");
- break;
- case '\f':
- w.write("\\f");
- break;
- case '\r':
- w.write("\\r");
- break;
- default:
- if (c < ' ' || (c >= '\u0080' && c < '\u00a0') || (c >= '\u2000' &&
c < '\u2100')) {
- hhhh = "000" + Integer.toHexString(c);
- w.write("\\u" + hhhh.substring(hhhh.length() - 4));
- } else {
- w.write(c);
- }
- }
- }
- w.write('"');
- return w;
- }
class TypedJsonCollectionSerializer extends JsonSerializer<Collection> {
@@ -269,9 +189,12 @@ public class TypedJson {
public void serializeWithType(Collection value, JsonGenerator gen,
SerializerProvider serializers, TypeSerializer typeSer)
throws IOException {
- typeSer.writeTypePrefix(gen, typeSer.typeId(value,
JsonToken.START_OBJECT));
+ gen.setCurrentValue(value);
+ boolean isArray = value.getClass().isArray();
+ WritableTypeId typeIdDef = typeSer.writeTypePrefix(gen,
+ typeSer.typeId(value, JsonToken.START_ARRAY));
_serialize(value, gen);
- typeSer.writeTypeSuffix(gen, typeSer.typeId(value,
JsonToken.START_OBJECT));
+ typeSer.writeTypeSuffix(gen, typeIdDef);
}
@Override
@@ -283,9 +206,13 @@ public class TypedJson {
}
public void _serialize(Collection value, JsonGenerator gen) throws
IOException {
+ // System.out.println("BRUCE: collection serializer starting for
collection " + value);
Iterator<Object> objects = value.iterator();
for (int i = 0; i < maxCollectionElements && objects.hasNext(); i++) {
- gen.writeObjectField("" + i, objects.next());
+ Object nextObject = objects.next();
+ // System.out.format("BRUCE: collection serializer writing #%s: %s\n",
i, nextObject);
+ gen.writeObject(nextObject);
+ // System.out.println("BRUCE: collection serializer done writing #" +
i);
}
}
@@ -296,13 +223,18 @@ public class TypedJson {
}
class TypedJsonMapSerializer extends JsonSerializer<Map> {
+
@Override
public void serializeWithType(Map value, JsonGenerator gen,
SerializerProvider serializers, TypeSerializer typeSer)
throws IOException {
- typeSer.writeTypePrefix(gen, typeSer.typeId(value,
JsonToken.START_OBJECT));
+ gen.setCurrentValue(value);
+ WritableTypeId typeIdDef = typeSer.writeTypePrefix(gen,
+ typeSer.typeId(value, JsonToken.START_OBJECT));
+ // typeSer.writeTypePrefix(gen, typeSer.typeId(value,
JsonToken.START_ARRAY));
_serialize(value, gen);
- typeSer.writeTypeSuffix(gen, typeSer.typeId(value,
JsonToken.START_OBJECT));
+ // typeSer.writeTypeSuffix(gen, typeSer.typeId(value,
JsonToken.START_ARRAY));
+ typeSer.writeTypeSuffix(gen, typeIdDef);
}
@Override
@@ -317,7 +249,18 @@ public class TypedJson {
Iterator<Map.Entry> entries = value.entrySet().iterator();
for (int i = 0; i < maxCollectionElements && entries.hasNext(); i++) {
Map.Entry entry = entries.next();
- gen.writeObjectField(entry.getKey().toString(), entry.getValue());
+ // System.out.format("BRUCE: map serializer writing key %s value %s
value class %s\n",
+ // entry.getKey(), entry.getValue(),
entry.getValue().getClass().getName());
+ // gen.writeObjectField(entry.getKey().toString(), entry.getValue());
+ // try {
+ gen.writeFieldName(entry.getKey().toString());
+ gen.writeObject(entry.getValue());
+ // } catch (JsonGenerationException e) {
+ // System.out.println("BRUCE: exception serializing value for " +
+ // entry.getKey().toString());
+ // throw e;
+ // }
+ // System.out.println("BRUCE: map serializer done writing key " +
entry.getKey());
}
}
@@ -332,9 +275,10 @@ public class TypedJson {
public void serializeWithType(PdxInstance value, JsonGenerator gen,
SerializerProvider serializers, TypeSerializer typeSer)
throws IOException {
- typeSer.writeTypePrefix(gen, typeSer.typeId(value,
JsonToken.START_OBJECT));
+ WritableTypeId writableTypeId = typeSer.typeId(value,
JsonToken.START_OBJECT);
+ typeSer.writeTypePrefix(gen, writableTypeId);
_serialize(value, gen);
- typeSer.writeTypeSuffix(gen, typeSer.typeId(value,
JsonToken.START_OBJECT));
+ typeSer.writeTypeSuffix(gen, writableTypeId);
}
@Override
@@ -363,7 +307,7 @@ public class TypedJson {
SerializerProvider serializers, TypeSerializer typeSer)
throws IOException {
typeSer.writeTypePrefix(gen, typeSer.typeId(value,
JsonToken.START_OBJECT));
- serialize(value, gen, serializers);
+ _serialize(value, gen);
typeSer.writeTypeSuffix(gen, typeSer.typeId(value,
JsonToken.START_OBJECT));
}
diff --git
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/json/TypedJsonTest.java
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/json/TypedJsonTest.java
index 74a2e0a..9a6996d 100644
---
a/geode-core/src/test/java/org/apache/geode/management/internal/cli/json/TypedJsonTest.java
+++
b/geode-core/src/test/java/org/apache/geode/management/internal/cli/json/TypedJsonTest.java
@@ -139,8 +139,8 @@ public class TypedJsonTest {
public void testObjects() throws Exception {
Object object = new Object();
- TypedJson typedJson = new TypedJson(RESULT, object, 100);
-
+ TypedJson typedJson = new TypedJson(100);
+ typedJson.add(RESULT, object);
checkResult(typedJson);
}