@Override protected AbstractPolicy deserializeAfterRead(JsonParser jp, DeserializationContext ctxt, ObjectMapper mapper, ObjectNode root) throws JsonProcessingException { AbstractPolicy result = super.deserializeAfterRead(jp, ctxt, mapper, root); if (result!=null) return result; // treat anything else as generic policy // all data is stored in the field data so extract that Map data = mapper.treeToValue(root, Map.class); if (data.containsKey("data")) data = (Map) data.get("data"); return new GenericPolicy( data ); } }
private AbstractPolicy buildPolicy(Map<String, Object> nodeMap, Node node, ParsingContextExecution context) { String type = (String) nodeMap.get(TYPE); AbstractPolicy result = null; if (type != null) { switch (type) { case HaPolicy.HA_POLICY: result = new HaPolicy(nodeMap); break; case LocationPlacementPolicy.LOCATION_PLACEMENT_POLICY: Object locationO = nodeMap.get(LocationPlacementPolicy.LOCATION_ID_PROPERTY); if (locationO instanceof String) { result = new LocationPlacementPolicy(); } else { context.getParsingErrors().add(new ParsingError(ParsingErrorLevel.ERROR, ErrorCode.SYNTAX_ERROR, null, node.getStartMark(), "Location id should be a string.", node.getEndMark(), locationO.toString())); return null; } break; } } if (result == null) { result = new GenericPolicy(nodeMap); } return result; }