1 package io.swagger.v3.core.util;
2
3 import com.fasterxml.jackson.core.JsonParser;
4 import com.fasterxml.jackson.core.JsonProcessingException;
5 import com.fasterxml.jackson.databind.DeserializationContext;
6 import com.fasterxml.jackson.databind.JsonDeserializer;
7 import com.fasterxml.jackson.databind.JsonNode;
8 import com.fasterxml.jackson.databind.node.ObjectNode;
9 import io.swagger.v3.oas.models.PathItem;
10 import io.swagger.v3.oas.models.callbacks.Callback;
11
12 import java.io.IOException;
13 import java.util.Iterator;
14 import java.util.LinkedHashMap;
15 import java.util.Map;
16
17 public class CallbackDeserializer extends JsonDeserializer<Callback> {
18 @Override
19 public Callback deserialize(JsonParser jp, DeserializationContext ctxt)
20 throws IOException, JsonProcessingException {
21 Callback result = new Callback();
22 JsonNode node = jp.getCodec().readTree(jp);
23 ObjectNode objectNode = (ObjectNode)node;
24 Map<String, Object> extensions = new LinkedHashMap<>();
25 for (Iterator<String> it = objectNode.fieldNames(); it.hasNext(); ) {
26 String childName = it.next();
27 JsonNode child = objectNode.get(childName);
28
29 if (childName.startsWith("x-")) {
30 extensions.put(childName, Json.mapper().convertValue(child, Object.class));
31 } else if (childName.equals("$ref")) {
32 result.$ref(child.asText());
33 } else {
34 result.put(childName, Json.mapper().convertValue(child, PathItem.class));
35 }
36 }
37 if (!extensions.isEmpty()) {
38 result.setExtensions(extensions);
39 }
40 return result;
41 }
42 }
43