@@ -70,8 +70,10 @@ public class {{ name }} extends AbstractOpenApiSchema {
7070 int match = 0;
7171 JsonToken token = tree.traverse(jp.getCodec()).nextToken();
7272 {% - for oneOf in model .oneOf %}
73- {% - set unParameterizedDataType = get_type (oneOf )|un_parameterize_type %}
74- // deserialize {{ unParameterizedDataType }}
73+ {% - set parameterizedDataType = get_type (oneOf ) %}
74+ {% - set unParameterizedDataType = parameterizedDataType |un_parameterize_type %}
75+ {% - set isParameterized = parameterizedDataType |is_parameterized_type %}
76+ // deserialize {{ parameterizedDataType }}
7577 try {
7678 boolean attemptParsing = true;
7779 // ensure that we respect type coercion as set on the client ObjectMapper
@@ -88,7 +90,11 @@ public class {{ name }} extends AbstractOpenApiSchema {
8890 }
8991 }
9092 if (attemptParsing) {
93+ {% - if isParameterized %}
94+ tmp = tree.traverse(jp.getCodec()).readValueAs(new TypeReference<{{ parameterizedDataType }}>() {});
95+ {% - else %}
9196 tmp = tree.traverse(jp.getCodec()).readValueAs({{ unParameterizedDataType }}.class);
97+ {% - endif %}
9298 // TODO: there is no validation against JSON schema constraints
9399 // (min, max, enum, pattern...), this does not perform a strict JSON
94100 // validation, which means the 'match' count may be higher than it should be.
@@ -101,11 +107,11 @@ public class {{ name }} extends AbstractOpenApiSchema {
101107 deserialized = tmp;
102108 match++;
103109 {% endif %}
104- log.log(Level.FINER, "Input data matches schema '{{ unParameterizedDataType }}'");
110+ log.log(Level.FINER, "Input data matches schema '{{ parameterizedDataType }}'");
105111 }
106112 } catch (Exception e) {
107113 // deserialization failed, continue
108- log.log(Level.FINER, "Input data does not match schema '{{ unParameterizedDataType }}'", e);
114+ log.log(Level.FINER, "Input data does not match schema '{{ parameterizedDataType }}'", e);
109115 }
110116 {# #}
111117 {% - endfor %}
0 commit comments