From 016261d9cfdcab859a674f90c1b53858dee44f36 Mon Sep 17 00:00:00 2001 From: Jesse Wilson Date: Mon, 24 Oct 2011 01:32:46 +0000 Subject: [PATCH] Throw JsonParseException in event of binding failures like type mismatches. --- gson/src/main/java/com/google/gson/Gson.java | 3 ++- .../gson/functional/ReadersWritersTest.java | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/gson/src/main/java/com/google/gson/Gson.java b/gson/src/main/java/com/google/gson/Gson.java index 5f2237ae..80c20fe3 100644 --- a/gson/src/main/java/com/google/gson/Gson.java +++ b/gson/src/main/java/com/google/gson/Gson.java @@ -637,7 +637,6 @@ public final class Gson { T target = (T) fromJson(reader, typeOfT); return target; } catch (IllegalStateException e) { - // TODO(inder): Figure out whether it is indeed right to rethrow this as JsonSyntaxException throw new JsonSyntaxException(e); } } @@ -732,6 +731,8 @@ public final class Gson { return null; } throw new JsonSyntaxException(e); + } catch (IllegalStateException e) { + throw new JsonSyntaxException(e); } catch (IOException e) { // TODO(inder): Figure out whether it is indeed right to rethrow this as JsonSyntaxException throw new JsonSyntaxException(e); diff --git a/gson/src/test/java/com/google/gson/functional/ReadersWritersTest.java b/gson/src/test/java/com/google/gson/functional/ReadersWritersTest.java index 95782878..e21fb903 100644 --- a/gson/src/test/java/com/google/gson/functional/ReadersWritersTest.java +++ b/gson/src/test/java/com/google/gson/functional/ReadersWritersTest.java @@ -18,8 +18,11 @@ package com.google.gson.functional; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonStreamParser; +import com.google.gson.JsonSyntaxException; import com.google.gson.common.TestTypes.BagOfPrimitives; +import com.google.gson.reflect.TypeToken; +import java.util.Map; import junit.framework.TestCase; import java.io.CharArrayReader; @@ -113,4 +116,20 @@ public class ReadersWritersTest extends TestCase { assertEquals("two", actualTwo.stringValue); assertFalse(parser.hasNext()); } + + public void testTypeMismatchThrowsJsonSyntaxExceptionForStrings() { + try { + gson.fromJson("true", new TypeToken>() {}.getType()); + fail(); + } catch (JsonSyntaxException expected) { + } + } + + public void testTypeMismatchThrowsJsonSyntaxExceptionForReaders() { + try { + gson.fromJson(new StringReader("true"), new TypeToken>() {}.getType()); + fail(); + } catch (JsonSyntaxException expected) { + } + } }