List of usage examples for com.fasterxml.jackson.core ObjectCodec treeAsTokens
public abstract JsonParser treeAsTokens(TreeNode n);
From source file:com.addthis.codec.jackson.CodecTypeDeserializer.java
@Nullable private Object _deserializeTypedFromArray(ArrayNode arrayNode, ObjectCodec objectCodec, DeserializationContext ctxt) throws IOException { if (idRes.isValidTypeId("_array")) { Config aliasDefaults = pluginMap.aliasDefaults("_array").toConfig(); String arrayField = aliasDefaults.getString("_primary"); try {//from w w w . j ava2 s . c o m ObjectNode objectFieldValues = (ObjectNode) objectCodec.createObjectNode(); Jackson.setAt(objectFieldValues, arrayNode, arrayField); ObjectNode aliasFieldDefaults = Jackson.configConverter(aliasDefaults.root()); Jackson.merge(objectFieldValues, aliasFieldDefaults); JsonDeserializer<Object> deser = _findDeserializer(ctxt, "_array"); JsonParser treeParser = objectCodec.treeAsTokens(objectFieldValues); treeParser.nextToken(); return deser.deserialize(treeParser, ctxt); } catch (IOException ex) { throw Jackson.maybeUnwrapPath(arrayField, ex); } } else { return null; } }
From source file:com.addthis.codec.jackson.CodecTypeDeserializer.java
private Object _deserializeObjectFromProperty(ObjectNode objectNode, ObjectCodec objectCodec, DeserializationContext ctxt) throws IOException { String type = objectNode.get(_typePropertyName).asText(); if (!_typeIdVisible) { objectNode.remove(_typePropertyName); }/*from ww w. j a v a 2 s . c om*/ JsonDeserializer<Object> deser; try { deser = _findDeserializer(ctxt, type); } catch (Throwable cause) { throw wrapWithPath(cause, Class.class, _typePropertyName); } ConfigObject aliasDefaults = pluginMap.aliasDefaults(type); String primaryField; if (aliasDefaults.containsKey("_primary")) { primaryField = (String) aliasDefaults.get("_primary").unwrapped(); } else { primaryField = null; } boolean unwrapPrimary = handleDefaultsAndImplicitPrimary(objectNode, aliasDefaults, deser, ctxt); try { JsonParser treeParser = objectCodec.treeAsTokens(objectNode); treeParser.nextToken(); return deser.deserialize(treeParser, ctxt); } catch (IOException cause) { if (unwrapPrimary) { throw Jackson.maybeUnwrapPath(primaryField, cause); } else { throw cause; } } }
From source file:org.apache.unomi.persistence.spi.PropertyTypedObjectDeserializer.java
@Override public Object deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { if (jp.getCurrentTokenId() != JsonTokenId.ID_START_OBJECT) { return super.deserialize(jp, ctxt); }/*from www . java 2s . co m*/ ObjectCodec codec = jp.getCodec(); TreeNode treeNode = codec.readTree(jp); Class<? extends Object> objectClass = null; if (treeNode instanceof ObjectNode) { ObjectNode root = (ObjectNode) treeNode; Iterator<Map.Entry<String, JsonNode>> elementsIterator = root.fields(); while (elementsIterator.hasNext()) { Map.Entry<String, JsonNode> element = elementsIterator.next(); String name = element.getKey(); if (fieldValuesToMatch.containsKey(name)) { Set<String> valuesToMatch = fieldValuesToMatch.get(name); for (String valueToMatch : valuesToMatch) { if (element.getValue().asText().matches(valueToMatch)) { objectClass = registry.get(name + "=" + valueToMatch); break; } } if (objectClass != null) { break; } } } if (objectClass == null) { objectClass = HashMap.class; } } else { } if (objectClass == null) { return super.deserialize(codec.treeAsTokens(treeNode), ctxt); } return codec.treeToValue(treeNode, objectClass); }
From source file:com.addthis.codec.jackson.CodecTypeDeserializer.java
@Nullable public Object _deserializeTypedFromObject(ObjectNode objectNode, ObjectCodec objectCodec, DeserializationContext ctxt) throws IOException { if (objectNode.hasNonNull(_typePropertyName)) { return _deserializeObjectFromProperty(objectNode, objectCodec, ctxt); }//www . j ava 2s. c o m String singleKeyName = getSingleKeyIfPresent(objectNode); if (singleKeyName != null) { Object bean = _deserializeObjectFromSingleKey(objectNode, singleKeyName, objectCodec, ctxt); if (bean != null) { return bean; } } Object bean = _deserializeObjectFromInlinedType(objectNode, objectCodec, ctxt); if (bean != null) { return bean; } if (idRes.isValidTypeId("_default")) { ConfigObject aliasDefaults = pluginMap.aliasDefaults("_default"); JsonDeserializer<Object> deser = _findDeserializer(ctxt, "_default"); boolean unwrapPrimary = handleDefaultsAndImplicitPrimary(objectNode, aliasDefaults, deser, ctxt); try { JsonParser treeParser = objectCodec.treeAsTokens(objectNode); treeParser.nextToken(); bean = deser.deserialize(treeParser, ctxt); } catch (IOException cause) { if (unwrapPrimary) { throw Jackson.maybeUnwrapPath((String) aliasDefaults.get("_primary").unwrapped(), cause); } else { throw cause; } } } return bean; }
From source file:com.addthis.codec.jackson.CodecTypeDeserializer.java
@Nullable private Object _deserializeObjectFromInlinedType(ObjectNode objectNode, ObjectCodec objectCodec, DeserializationContext ctxt) throws IOException { String matched = null;// w w w . j av a 2 s. c o m for (String alias : pluginMap.inlinedAliases()) { if (objectNode.get(alias) != null) { if (matched != null) { String message = String.format( "no type specified, more than one key, and both %s and %s match for inlined types.", matched, alias); JsonMappingException exception = ctxt.instantiationException(_baseType.getRawClass(), message); exception.prependPath(_baseType, matched); throw exception; } matched = alias; } } if (matched != null) { ConfigObject aliasDefaults = pluginMap.aliasDefaults(matched); JsonNode configValue = objectNode.get(matched); String primaryField = (String) aliasDefaults.get("_primary").unwrapped(); objectNode.remove(matched); Jackson.setAt(objectNode, configValue, primaryField); Jackson.merge(objectNode, Jackson.configConverter(aliasDefaults)); if (_typeIdVisible) { objectNode.put(_typePropertyName, matched); } try { JsonDeserializer<Object> deser = _findDeserializer(ctxt, matched); JsonParser treeParser = objectCodec.treeAsTokens(objectNode); treeParser.nextToken(); return deser.deserialize(treeParser, ctxt); } catch (IOException cause) { IOException unwrapped = Jackson.maybeUnwrapPath(primaryField, cause); if (unwrapped != cause) { throw wrapWithPath(unwrapped, idRes.typeFromId(ctxt, matched), matched); } else { throw unwrapped; } } } else { return null; } }
From source file:com.addthis.codec.jackson.CodecTypeDeserializer.java
@Nullable private Object _deserializeObjectFromSingleKey(ObjectNode objectNode, String singleKeyName, ObjectCodec objectCodec, DeserializationContext ctxt) throws IOException { if (idRes.isValidTypeId(singleKeyName)) { ConfigObject aliasDefaults = pluginMap.aliasDefaults(singleKeyName); String primaryField;//from w ww . ja v a 2 s .c o m if (aliasDefaults.containsKey("_primary")) { primaryField = (String) aliasDefaults.get("_primary").unwrapped(); } else { primaryField = null; } boolean unwrapPrimary = false; try { JsonNode singleKeyValue = objectNode.get(singleKeyName); JsonDeserializer<Object> deser = _findDeserializer(ctxt, singleKeyName); if (!singleKeyValue.isObject()) { // if value is not an object, try supporting _primary syntax to derive one if (primaryField != null) { ObjectNode singleKeyObject = (ObjectNode) objectCodec.createObjectNode(); Jackson.setAt(singleKeyObject, singleKeyValue, primaryField); Jackson.merge(singleKeyObject, Jackson.configConverter(aliasDefaults)); singleKeyValue = singleKeyObject; unwrapPrimary = true; } // else let the downstream serializer try to handle it or complain } else { ObjectNode singleKeyObject = (ObjectNode) singleKeyValue; unwrapPrimary = handleDefaultsAndImplicitPrimary(singleKeyObject, aliasDefaults, deser, ctxt); } if (_typeIdVisible && singleKeyValue.isObject()) { ((ObjectNode) singleKeyValue).put(_typePropertyName, singleKeyName); } JsonParser treeParser = objectCodec.treeAsTokens(singleKeyValue); treeParser.nextToken(); return deser.deserialize(treeParser, ctxt); } catch (IOException cause) { if (unwrapPrimary) { cause = Jackson.maybeUnwrapPath(primaryField, cause); } throw wrapWithPath(cause, idRes.typeFromId(ctxt, singleKeyName), singleKeyName); } catch (Throwable cause) { throw wrapWithPath(cause, idRes.typeFromId(ctxt, singleKeyName), singleKeyName); } } return null; }