summaryrefslogtreecommitdiff
path: root/src/data
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2014-05-10 01:06:28 +0200
committerPeter Wu <peter@lekensteyn.nl>2014-05-10 01:06:28 +0200
commite4d8d30fca3bc621e0f5ec6eba6117b510621c6f (patch)
tree4140460064f6f89670c655fceedea4b9e2e35516 /src/data
parentd1a7285924143a2430c65edbc9455b67f5fae926 (diff)
downloadDatafiller-e4d8d30fca3bc621e0f5ec6eba6117b510621c6f.tar.gz
Add validator debugger where the wrong type is returned
Diffstat (limited to 'src/data')
-rw-r--r--src/data/DebuggingJsonDeserializer.java41
-rw-r--r--src/data/ValidatingJsonDeserializer.java2
2 files changed, 42 insertions, 1 deletions
diff --git a/src/data/DebuggingJsonDeserializer.java b/src/data/DebuggingJsonDeserializer.java
new file mode 100644
index 0000000..1b00d4d
--- /dev/null
+++ b/src/data/DebuggingJsonDeserializer.java
@@ -0,0 +1,41 @@
+package data;
+
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParseException;
+import java.lang.reflect.Type;
+
+/**
+ * Validates the deserialization of a JSON string. The main motivation of this
+ * class is to print the property name of an object that throws an
+ * IllegalStateException because a string was expected, but a different type got
+ * returned.
+ *
+ * @author Peter Wu
+ */
+public class DebuggingJsonDeserializer extends ValidatingJsonDeserializer {
+
+ private final Class overriddenClass;
+
+ private DebuggingJsonDeserializer(Class overriddenClass) {
+ this.overriddenClass = overriddenClass;
+ }
+
+ @Override
+ public Object deserialize(JsonElement je, Type type,
+ JsonDeserializationContext jdc) throws JsonParseException {
+ checkObject("", je, overriddenClass);
+ return null;
+ }
+
+ public static void tryValidate(String json, Class cls) {
+ new GsonBuilder()
+ .registerTypeAdapter(Dummy.class, new DebuggingJsonDeserializer(cls))
+ .create()
+ .fromJson(json, Dummy.class);
+ }
+
+ private class Dummy {
+ }
+}
diff --git a/src/data/ValidatingJsonDeserializer.java b/src/data/ValidatingJsonDeserializer.java
index c168821..f44b681 100644
--- a/src/data/ValidatingJsonDeserializer.java
+++ b/src/data/ValidatingJsonDeserializer.java
@@ -30,7 +30,7 @@ public class ValidatingJsonDeserializer<T> implements JsonDeserializer<T> {
return obj;
}
- private void checkObject(String path, JsonElement je, Class type) {
+ void checkObject(String path, JsonElement je, Class type) {
JsonObject jsonObj = je.getAsJsonObject();
for (Field f : type.getDeclaredFields()) {
JsonElement val = jsonObj.get(f.getName());