Example usage for com.fasterxml.jackson.core JsonParser getTokenLocation

List of usage examples for com.fasterxml.jackson.core JsonParser getTokenLocation

Introduction

In this page you can find the example usage for com.fasterxml.jackson.core JsonParser getTokenLocation.

Prototype

public abstract JsonLocation getTokenLocation();

Source Link

Document

Method that return the starting location of the current token; that is, position of the first character from input that starts the current token.

Usage

From source file:com.reprezen.swagedit.model.NodeDeserializer.java

@Override
public AbstractNode deserialize(JsonParser p, DeserializationContext context)
        throws IOException, JsonProcessingException {

    JsonLocation startLocation = p.getTokenLocation();
    if (p.getCurrentToken() == JsonToken.FIELD_NAME) {
        p.nextToken();/*from   w  w  w.  j  a  v  a 2  s .c om*/
    }

    switch (p.getCurrentToken()) {
    case START_OBJECT:
        return deserializeObjectNode(p, context, startLocation);
    case START_ARRAY:
        return deserializeArrayNode(p, context, startLocation);
    default:
        return deserializeValueNode(p, context, startLocation);
    }
}

From source file:org.apache.usergrid.chop.api.ProjectDeserializer.java

private void validate(JsonParser jsonParser, String input, String expected) throws JsonProcessingException {
    if (!input.equals(expected)) {
        throw new JsonParseException("Unexpected token: " + input, jsonParser.getTokenLocation());
    }/*  w  ww  .  j  ava 2 s.c o  m*/
}

From source file:org.hawkular.alerts.rest.json.LinkDeserializer.java

private void validateText(JsonParser jsonParser, String input) throws JsonProcessingException {
    Matcher m = textPattern.matcher(input);
    if (!m.matches()) {
        throw new JsonParseException("Unexpected token: " + input, jsonParser.getTokenLocation());
    }/*  w ww .  ja v  a 2  s .  c  o  m*/
}

From source file:com.addthis.codec.jackson.CodecBeanDeserializer.java

@Override
public Object deserialize(JsonParser jp, DeserializationContext ctxt)
        throws IOException, JsonProcessingException {
    JsonLocation currentLocation = jp.getTokenLocation();
    JsonToken t = jp.getCurrentToken();//from   ww  w.  j a v  a2  s  . co m
    try {
        if (t == JsonToken.START_OBJECT) {
            ObjectNode objectNode = jp.readValueAsTree();
            handleDefaultsAndRequiredAndNull(ctxt, objectNode);
            jp = jp.getCodec().treeAsTokens(objectNode);
            jp.nextToken();
        } else if (t == JsonToken.END_OBJECT) {
            // for some reason this is how they chose to handle single field objects
            jp.nextToken();
            ObjectNode objectNode = ctxt.getNodeFactory().objectNode();
            handleDefaultsAndRequiredAndNull(ctxt, objectNode);
            jp = jp.getCodec().treeAsTokens(objectNode);
            jp.nextToken();
        }
        Object value = getDelegatee().deserialize(jp, ctxt);
        if (value instanceof SuperCodable) {
            ((SuperCodable) value).postDecode();
        }
        return value;
    } catch (JsonMappingException ex) {
        throw Jackson.maybeImproveLocation(currentLocation, ex);
    }
}

From source file:com.addthis.codec.jackson.CodecTypeDeserializer.java

@Override
public Object deserializeTypedFromAny(JsonParser jp, DeserializationContext ctxt) throws IOException {
    // a jackson thing we might as well include
    if (jp.canReadTypeId()) {
        Object typeId = jp.getTypeId();
        if (typeId != null) {
            return _deserializeWithNativeTypeId(jp, ctxt, typeId);
        }/* ww  w. ja  v a  2  s .co m*/
    }
    // can use this to approximate error location if a sub-method throws an exception
    JsonLocation currentLocation = jp.getTokenLocation();
    JsonNode jsonNode;
    // empty objects can appear with END_OBJECT. that has special handling lots of places, but not in readTree
    if (jp.getCurrentToken() == JsonToken.END_OBJECT) {
        jsonNode = ctxt.getNodeFactory().objectNode();
    } else {
        jsonNode = jp.readValueAsTree();
    }
    ObjectCodec objectCodec = jp.getCodec();

    try {
        Object bean = null;
        // _array handler
        if (jsonNode.isArray()) {
            bean = _deserializeTypedFromArray((ArrayNode) jsonNode, objectCodec, ctxt);
            // object handler
        } else if (jsonNode.isObject()) {
            bean = _deserializeTypedFromObject((ObjectNode) jsonNode, objectCodec, ctxt);
        }
        if (bean != null) {
            return bean;
        } else {
            // Jackson 2.6+ throws NPE on null typeId parameter (underlying Map changed from HashMap
            // to ConcurrentHashMap), so use empty string instead of null
            JsonDeserializer<Object> deser = _findDeserializer(ctxt, "");
            JsonParser treeParser = jp.getCodec().treeAsTokens(jsonNode);
            treeParser.nextToken();
            return deser.deserialize(treeParser, ctxt);
        }
    } catch (JsonMappingException ex) {
        throw Jackson.maybeImproveLocation(currentLocation, ex);
    }
}

From source file:ninja.leaping.configurate.json.JSONConfigurationLoader.java

private void parseValue(JsonParser parser, ConfigurationNode node) throws IOException {
    JsonToken token = parser.getCurrentToken();
    switch (token) {
    case START_OBJECT:
        parseObject(parser, node);//from   w  w  w .  ja  v a2s  . co m
        break;
    case START_ARRAY:
        parseArray(parser, node);
        break;
    case VALUE_NUMBER_FLOAT:
        node.setValue(parser.getFloatValue());
        break;
    case VALUE_NUMBER_INT:
        node.setValue(parser.getIntValue());
        break;
    case VALUE_STRING:
        node.setValue(parser.getText());
        break;
    case VALUE_TRUE:
    case VALUE_FALSE:
        node.setValue(parser.getBooleanValue());
        break;
    case VALUE_NULL: // Ignored values
    case FIELD_NAME:
        break;
    default:
        throw new IOException("Unsupported token type: " + token + " (at " + parser.getTokenLocation() + ")");
    }
}

From source file:org.sead.repositories.reference.RefRepository.java

private static void indexChildren(File index, JsonParser jp) throws IOException {

    JsonGenerator generator = new JsonFactory().createGenerator(index, JsonEncoding.UTF8);
    generator.useDefaultPrettyPrinter();

    generator.writeStartObject();//from  w  w w .j a v a 2 s .  c  om

    JsonToken cur = jp.nextToken();
    while (cur.equals(JsonToken.START_OBJECT)) {
        long start = jp.getTokenLocation().getByteOffset();
        int depth = 1;
        while (depth > 0) {
            cur = jp.nextToken();
            if (cur.equals(JsonToken.START_OBJECT)) {
                depth++;
            } else if (cur.equals(JsonToken.END_OBJECT)) {
                depth--;
            } else if (cur.equals(JsonToken.FIELD_NAME) && depth == 1) {
                if (jp.getText().equals("@id")) {
                    cur = jp.nextToken();

                    String vName = jp.getText();
                    generator.writeNumberField(vName, start);
                } else {
                    report(jp, cur);
                }
            }
        }
        cur = jp.nextToken();
    }
    generator.writeEndObject();
    generator.close();

}

From source file:org.sead.repositories.reference.RefRepository.java

private static void report(JsonParser jp, JsonToken token) {
    boolean struct = token.isStructStart() || token.isStructEnd();
    try {/*from  w  w w .ja v a  2s.  c  o m*/
        String tag = struct ? token.asString() : jp.getText();
        log.trace("Tag: " + tag);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    long currentOffset = jp.getCurrentLocation().getByteOffset();
    long tokenOffset = jp.getTokenLocation().getByteOffset();
    log.trace("Cur: " + currentOffset + " tok: " + tokenOffset);
}