Survive wrong enum constants
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 28 Nov 2013 14:44:08 +0100
changeset 340eda32ccb6882
parent 338 edd0ccc8ae19
child 347 d70b10e97a68
child 348 b18accb1660f
Survive wrong enum constants
json-tck/src/main/java/net/java/html/json/tests/JSONTest.java
json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java
     1.1 --- a/json-tck/src/main/java/net/java/html/json/tests/JSONTest.java	Tue Nov 26 10:20:50 2013 +0100
     1.2 +++ b/json-tck/src/main/java/net/java/html/json/tests/JSONTest.java	Thu Nov 28 14:44:08 2013 +0100
     1.3 @@ -451,6 +451,14 @@
     1.4          assert 0 == v.getValue() : "Value is empty: " + v.getValue();
     1.5          assert 0 == v.getSmall() : "Small value is empty: " + v.getSmall();
     1.6      }
     1.7 +
     1.8 +    @KOTest public void deserializeWrongEnum() throws Exception {
     1.9 +        String str = "{ \"sex\" : \"unknown\" }";
    1.10 +        ByteArrayInputStream is = new ByteArrayInputStream(str.getBytes("UTF-8"));
    1.11 +        Person p = Models.parse(newContext(), Person.class, is);
    1.12 +        assert p.getSex() == null : "Wrong sex means null, but was: " + p.getSex();
    1.13 +    }
    1.14 +
    1.15      
    1.16      private static BrwsrCtx newContext() {
    1.17          return Utils.newContext(JSONTest.class);
     2.1 --- a/json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java	Tue Nov 26 10:20:50 2013 +0100
     2.2 +++ b/json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java	Thu Nov 28 14:44:08 2013 +0100
     2.3 @@ -374,9 +374,13 @@
     2.4                          w.append("    }\n");
     2.5                      } else {
     2.6                          if (isEnum[0]) {
     2.7 +                            w.append("    try {\n");
     2.8                              w.append("    this.prop_").append(pn);
     2.9                              w.append(" = ret[" + cnt + "] == null ? null : ");
    2.10                              w.append(type).append(".valueOf(org.apidesign.html.json.impl.JSON.stringValue(ret[" + cnt + "]));\n");
    2.11 +                            w.append("    } catch (IllegalArgumentException ex) {\n");
    2.12 +                            w.append("      ex.printStackTrace();\n");
    2.13 +                            w.append("    }\n");
    2.14                          } else if (isPrimitive(type)) {
    2.15                              w.append("    this.prop_").append(pn);
    2.16                              w.append(" = ret[" + cnt + "] == null ? ");