1
1
import javax.ws.rs.core.GenericType;
2
2
import javax.ws.rs.core.Response;
3
+ import java.io.IOException;
3
4
import java.util.ArrayList;
4
5
import java.util.HashMap;
5
6
import java.util.Map;
6
7
8
+ import com.fasterxml.jackson.core.JsonParser;
9
+ import com.fasterxml.jackson.core.JsonProcessingException;
10
+ import com.fasterxml.jackson.databind.DeserializationContext;
11
+ import com.fasterxml.jackson.databind.JsonNode;
12
+ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
13
+ import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
14
+
7
15
{ {> additionalModelTypeAnnotations} }{ {> generatedAnnotation} }{ {> xmlAnnotation} }
16
+ @JsonDeserialize(using={ {classname} }.{ {classname} }Deserializer.class)
8
17
public class { {classname} } extends AbstractOpenApiSchema{ {#vendorExtensions.x-implements} }, { {{.} }}{ {/vendorExtensions.x-implements} } {
18
+ public static class {{classname} }Deserializer extends StdDeserializer<{ {classname} }> {
19
+ public {{classname} }Deserializer() {
20
+ this({{classname} }.class);
21
+ }
22
+
23
+ public { {classname} }Deserializer(Class<?> vc) {
24
+ super(vc);
25
+ }
26
+
27
+ @Override
28
+ public { {classname} } deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
29
+ JsonNode tree = jp.readValueAsTree();
30
+
31
+ Object deserialized = null;
32
+ {{#anyOf} }
33
+ // deserialzie { {{.} }}
34
+ try {
35
+ deserialized = tree.traverse(jp.getCodec()).readValueAs({{{.} }}.class);
36
+ { {classname} } ret = new { {classname} }();
37
+ ret.setActualInstance(deserialized);
38
+ return ret;
39
+ } catch (Exception e) {
40
+ // deserialization failed, continue
41
+ }
42
+
43
+ { {/anyOf} }
44
+ throw new IOException(String.format("Failed deserialization for { {classname} }: no match found"));
45
+ }
46
+ }
9
47
10
48
// store a list of schema names defined in anyOf
11
49
public final static Map<String , GenericType > schemas = new HashMap<String , GenericType >();
@@ -14,6 +52,13 @@ public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-im
14
52
super(" anyOf" , {{#isNullable} }Boolean.TRUE{ {/isNullable} }{ {^isNullable} }Boolean.FALSE{ {/isNullable} });
15
53
}
16
54
55
+ { {#anyOf} }
56
+ public { {classname} }({ {{.} }} o) {
57
+ super(" anyOf" , {{#isNullable} }Boolean.TRUE{ {/isNullable} }{ {^isNullable} }Boolean.FALSE{ {/isNullable} });
58
+ setActualInstance(o);
59
+ }
60
+
61
+ { {/anyOf} }
17
62
static {
18
63
{{#anyOf} }
19
64
schemas.put("{ {{.} }}", new GenericType<{ {{.} }}>() {
@@ -42,6 +87,6 @@ public class {{classname}} extends AbstractOpenApiSchema{{#vendorExtensions.x-im
42
87
}
43
88
44
89
{ {/anyOf} }
45
- throw new RuntimeException("Invalid instance type. Must be { {#oneOf } }{ {{.} }}{ {^-last} }, { {/-last} }{ {/oneOf } }");
90
+ throw new RuntimeException("Invalid instance type. Must be { {#anyOf } }{ {{.} }}{ {^-last} }, { {/-last} }{ {/anyOf } }");
46
91
}
47
92
}
0 commit comments