@Override public String[] deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { JsonNode node = p.getCodec().readTree(p); List<String> strings = new ArrayList<>(); ObjectCodec oc = p.getCodec(); if (node.isArray()) { for (JsonNode n : node) { strings.add(oc.treeToValue(n, String.class)); } } else { strings.add(oc.treeToValue(node, String.class)); } return strings.toArray(new String[0]); } }
public abstract class OptionalArrayDeserializer<T> extends JsonDeserializer<List<T>> { private final Class<T> clazz; public OptionalArrayDeserializer(Class<T> clazz) { this.clazz = clazz; } @Override public List<T> deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { ObjectCodec oc = jp.getCodec(); JsonNode node = oc.readTree(jp); ArrayList<T> list = new ArrayList<>(); if (node.isArray()) { for (JsonNode elementNode : node) { list.add(oc.treeToValue(elementNode, clazz)); } } else { list.add(oc.treeToValue(node, clazz)); } return list; } }
public abstract class EmptyArrayAsNullDeserializer<T> extends JsonDeserializer<T> { private final Class<T> clazz; protected EmptyArrayAsNullDeserializer(Class<T> clazz) { this.clazz = clazz; } @Override public T deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { ObjectCodec oc = jp.getCodec(); JsonNode node = oc.readTree(jp); if (node.isArray() && !node.getElements().hasNext()) { return null; } return oc.treeToValue(node, clazz); } }
@Override public KubernetesResource deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { ObjectNode node = jp.readValueAsTree(); String key = getKey(node); if (key != null) { Class<? extends KubernetesResource> resourceType = getTypeForKey(key); if (resourceType == null) { throw ctxt.mappingException("No resource type found for:" + key); } else { return jp.getCodec().treeToValue(node, resourceType); } } return null; }
protected static <T> T asObject(final ObjectCodec codec, final JsonNode node, final String fieldName, final Class<T> clazz) throws JsonProcessingException { T object = null; final JsonNode nodeObject = node.get(fieldName); if (nodeObject != null) { object = codec.treeToValue(nodeObject, clazz); } return object; } }
static ErrorTypeDefinition fromJson(JsonParser parser, TreeNode json) throws IOException { return parser.getCodec().treeToValue(json, ImmutableErrorTypeDefinition.class); }
static ObjectTypeDefinition fromJson(JsonParser parser, TreeNode json) throws IOException { return parser.getCodec().treeToValue(json, ImmutableObjectTypeDefinition.class); }
@SuppressWarnings("unchecked") private static Map<String, Object> readMeta(JsonNode errorNode, JsonParser jp) throws IOException { JsonNode metaNode = errorNode.get(ErrorDataSerializer.META); if (metaNode != null) { return jp.getCodec().treeToValue(metaNode, Map.class); } return null; }
@Override public ValueImpl deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException { ObjectCodec mapper = jsonParser.getCodec(); JsonNode root = mapper.readTree(jsonParser); Class<? extends ValueImpl> valueClass = getValueClass(root, jsonParser); return mapper.treeToValue(root, valueClass); }
private static <T> BiFunction<JsonParser, TreeNode, T> valueCreator(Class<T> clazz) { return (jp, tree) -> { try { return jp.getCodec().treeToValue(tree, clazz); } catch (JsonProcessingException e) { throw new ValueReadException(e); } }; }
@SuppressWarnings("DuplicateThrows") @Override public CommandSubclass deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException { ObjectCodec codec = parser.getCodec(); return codec.treeToValue(parser.readValueAsTree(), commandSubclassKlass); } }
@Override public ValueImpl deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException { ObjectCodec mapper = jsonParser.getCodec(); JsonNode root = mapper.readTree(jsonParser); Class<? extends ValueImpl> valueClass = getValueClass(root, jsonParser); return mapper.treeToValue(root, valueClass); }
private static MultiValue parseValue(JsonParser parser, String name, ObjectNode node) throws JsonProcessingException { return new MultiValue(name, parser.getCodec().treeToValue(node, Map.class)); }
@Override public ExpandableNode deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException, JsonProcessingException { ObjectCodec oc = jsonParser.getCodec(); JsonNode node = oc.readTree(jsonParser); // Only the node reference impl version has a project name property. if (node.has("projectName")) { NodeReference basicReference = oc.treeToValue(node, NodeReference.class); return basicReference; } else { NodeResponse expandedField = JsonUtil.readValue(node.toString(), NodeResponse.class); return expandedField; } }
protected Event parse(JsonNode jsonNode, ObjectCodec codec, DeserializationContext ctxt, String type) throws JsonProcessingException { return new RawEvent(codec.treeToValue(jsonNode, Map.class), type); } }
@Override public OpenRevision deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { ObjectNode node = jp.readValueAsTree(); if(node.has("ok")) { return jp.getCodec().treeToValue(node, OkOpenRevision.class); } else if(node.has("missing")) { return jp.getCodec().treeToValue(node, MissingOpenRevision.class); } else { // Should never happen throw new IllegalStateException("Unexpected object in open revisions response."); } } }
private static <T> T toValue(ObjectCodec codec, JsonNode node, Class<T> valueType) throws JsonProcessingException { if (node.isPojo()) { Object pojo = ((POJONode) node).getPojo(); if (valueType.isInstance(pojo)) { return valueType.cast(pojo); } } return codec.treeToValue(node, valueType); }
@Override public SlackEvent deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { ObjectCodec codec = p.getCodec(); JsonNode node = codec.readTree(p); SlackEventType type = SlackEventType.get(node.get(TYPE_FIELD).asText()); // Messages can have subtypes that we need to handle if (type == SlackEventType.MESSAGE && node.has(SUBTYPE_FIELD)) { SlackMessageSubtype subtype = SlackMessageSubtype.get(node.get(SUBTYPE_FIELD).asText()); return codec.treeToValue(node, subtype.getMessageClass()); } return codec.treeToValue(node, type.getEventClass()); } }
@Override public Object deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { TreeNode node = jp.readValueAsTree(); Class<?> concreteType = determineConcreteType(node); return jp.getCodec().treeToValue(node, concreteType); }
@Override public FieldPatch<?> deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { final TreeNode node = p.readValueAsTree(); final TreeNode setNode = node.get("value"); final Object value = setNode != null ? p.getCodec().treeToValue(setNode, valueType) : null; return FieldPatch.nullableOf(value); } }