Example usage for com.fasterxml.jackson.core ObjectCodec treeAsTokens

List of usage examples for com.fasterxml.jackson.core ObjectCodec treeAsTokens

Introduction

In this page you can find the example usage for com.fasterxml.jackson.core ObjectCodec treeAsTokens.

Prototype

public abstract JsonParser treeAsTokens(TreeNode n);

Source Link

Document

Method for constructing a JsonParser for reading contents of a JSON tree, as if it was external serialized JSON content.

Usage

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;
}