diff options
author | Peter Wu <peter@lekensteyn.nl> | 2014-05-10 01:06:28 +0200 |
---|---|---|
committer | Peter Wu <peter@lekensteyn.nl> | 2014-05-10 01:06:28 +0200 |
commit | e4d8d30fca3bc621e0f5ec6eba6117b510621c6f (patch) | |
tree | 4140460064f6f89670c655fceedea4b9e2e35516 /src/data | |
parent | d1a7285924143a2430c65edbc9455b67f5fae926 (diff) | |
download | Datafiller-e4d8d30fca3bc621e0f5ec6eba6117b510621c6f.tar.gz |
Add validator debugger where the wrong type is returned
Diffstat (limited to 'src/data')
-rw-r--r-- | src/data/DebuggingJsonDeserializer.java | 41 | ||||
-rw-r--r-- | src/data/ValidatingJsonDeserializer.java | 2 |
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()); |