Package com.jayway.jsonpath

Examples of com.jayway.jsonpath.PathNotFoundException


                        propertyVal =  null;
                    } else {
                        if(ctx.options().contains(Option.SUPPRESS_EXCEPTIONS) && !ctx.options().contains(Option.REQUIRE_PROPERTIES)){
                            return;
                        } else {
                            throw new PathNotFoundException("No results for path: " + evalPath);
                        }

                    }
                } else {
                    if(!isUpstreamDefinite() &&
                       !ctx.options().contains(Option.REQUIRE_PROPERTIES) &&
                       !ctx.options().contains(Option.SUPPRESS_EXCEPTIONS)){
                        return;
                    } else {
                        throw new PathNotFoundException("Missing property in path " + evalPath);
                    }
                }
            }
            PathRef pathRef = ctx.forUpdate() ? PathRef.create(model, property) : PathRef.NO_OP;
            if (isLeaf()) {
                ctx.addResult(evalPath, pathRef, propertyVal);
            } else {
                next().evaluate(evalPath, pathRef, propertyVal, ctx);
            }
        } else {
            String evalPath = currentPath + "[" + Utils.join(", ", "'", properties) + "]";

            if (!isLeaf()) {
                throw new InvalidPathException("Multi properties can only be used as path leafs: " + evalPath);
            }

            Object merged = ctx.jsonProvider().createMap();
            for (String property : properties) {
                Object propertyVal;
                if(hasProperty(property, model, ctx)) {
                    propertyVal = readObjectProperty(property, model, ctx);
                    if(propertyVal == JsonProvider.UNDEFINED){
                        if(ctx.options().contains(Option.DEFAULT_PATH_LEAF_TO_NULL)) {
                            propertyVal = null;
                        } else {
                            continue;
                        }
                    }
                } else {
                    if(ctx.options().contains(Option.DEFAULT_PATH_LEAF_TO_NULL)){
                        propertyVal = null;
                    } else if (ctx.options().contains(Option.REQUIRE_PROPERTIES)) {
                        throw new PathNotFoundException("Missing property in path " + evalPath);
                    } else {
                        continue;
                    }
                }
                ctx.jsonProvider().setProperty(merged, property, propertyVal);
View Full Code Here


                ctx.addResult(evalPath, pathRef, evalHit);
            } else {
                next().evaluate(evalPath, pathRef, evalHit, ctx);
            }
        } catch (IndexOutOfBoundsException e) {
            throw new PathNotFoundException("Index out of bounds when evaluating path " + evalPath);
        }
    }
View Full Code Here

    }

    @Override
    public void evaluate(String currentPath, PathRef parent, Object model, EvaluationContextImpl ctx) {
        if(model == null){
            throw new PathNotFoundException("The path " + currentPath + " is null");
        }
        if (!ctx.jsonProvider().isArray(model)) {
            throw new InvalidPathException(format("Filter: %s can only be applied to arrays. Current context is: %s", toString(), model));
        }

        try {
            int idx;
            int input;
            int length;
            int from;
            int to;

            switch (operation){
                case SINGLE_INDEX:
                    handleArrayIndex(criteria.get(0), currentPath, model, ctx);
                    break;

                case INDEX_SEQUENCE:
                    for (Integer i : criteria) {
                        handleArrayIndex(i, currentPath,  model, ctx);
                    }
                    break;

                case CONTEXT_SIZE:
                    length = ctx.jsonProvider().length(model);
                    idx = length + criteria.get(0);
                    handleArrayIndex(idx, currentPath, model, ctx);
                    break;

                case SLICE_FROM: //[2:]
                    input = criteria.get(0);
                    length = ctx.jsonProvider().length(model);
                    from = input;
                    if (from < 0) {
                        //calculate slice start from array length
                        from = length + from;
                    }
                    from = Math.max(0, from);

                    logger.debug("Slice from index on array with length: {}. From index: {} to: {}. Input: {}", length, from, length - 1, toString());

                    if (length == 0 || from >= length) {
                        return;
                    }
                    for (int i = from; i < length; i++) {
                        handleArrayIndex(i, currentPath, model, ctx);
                    }
                    break;

                case SLICE_TO : //[:2]
                    input = criteria.get(0);
                    length = ctx.jsonProvider().length(model);
                    to = input;
                    if (to < 0) {
                        //calculate slice end from array length
                        to = length + to;
                    }
                    to = Math.min(length, to);

                    logger.debug("Slice to index on array with length: {}. From index: 0 to: {}. Input: {}", length, to, toString());

                    if (length == 0) {
                        return;
                    }
                    for (int i = 0; i < to; i++) {
                        handleArrayIndex(i, currentPath, model, ctx);
                    }
                    break;

                case SLICE_BETWEEN : //[2:4]
                    from = criteria.get(0);
                    to = criteria.get(1);
                    length = ctx.jsonProvider().length(model);

                    to = Math.min(length, to);

                    if (from >= to || length == 0) {
                        return;
                    }

                    logger.debug("Slice between indexes on array with length: {}. From index: {} to: {}. Input: {}", length, from, to, toString());

                    for (int i = from; i < to; i++) {
                        handleArrayIndex(i, currentPath, model, ctx);
                    }
                    break;
                }
        } catch (IndexOutOfBoundsException e) {
            throw new PathNotFoundException("Index out of bounds when evaluating path " + currentPath);
        }
    }
View Full Code Here

    }

    @Override
    public void evaluate(String currentPath, PathRef parent, Object model, EvaluationContextImpl ctx) {
        if (!ctx.jsonProvider().isMap(model)) {
            throw new PathNotFoundException("Property " + getPathFragment() + " not found in path " + currentPath);
        }

        handleObjectProperty(currentPath, model, ctx, properties);
    }
View Full Code Here

    @SuppressWarnings("unchecked")
    @Override
    public <T> T getValue(boolean unwrap) {
        if (path.isDefinite()) {
            if(resultIndex == 0){
                throw new PathNotFoundException("No results for path: " + path.toString());
            }
            return (T) jsonProvider().getArrayIndex(valueResult, 0, unwrap);
        }
        return (T)valueResult;
    }
View Full Code Here

    @SuppressWarnings("unchecked")
    @Override
    public <T> T getPath() {
        if(resultIndex == 0){
            throw new PathNotFoundException("No results for path: " + path.toString());
        }
        return (T)pathResult;
    }
View Full Code Here

    return new SpinJsonTreePathException(
      exceptionMessage("015", "Unable to cast JsonPath expression to '{}'", castClass.getName()), cause);
  }

  public PathNotFoundException unableToFindJsonPath(String path, String json) {
    return new PathNotFoundException(exceptionMessage("016", "Unable to find json path '{}' on json node '{}'", path, json));
  }
View Full Code Here

        JsonProvider jsonProvider = configuration.getProvider();
        Iterable<Object> src = null;
        try {
            src = jsonProvider.toIterable(obj);
        } catch (ClassCastException e){
            throw new PathNotFoundException("The path fragment '" + this.condition + "' can not be applied to a JSON object only a JSON array.", e);
        }
        Object result = jsonProvider.createArray();
        for (Object item : src) {
            if (isMatch(item, configuration, conditionStatements)) {
                jsonProvider.setProperty(result, jsonProvider.length(result), item);
View Full Code Here

    @Override
    public Object filter(Object obj, Configuration configuration, LinkedList<Filter> filters, boolean inArrayContext) {
        JsonProvider jsonProvider = configuration.getProvider();
        if (jsonProvider.isArray(obj)) {
            if (!inArrayContext) {
                throw new PathNotFoundException("Path '" + condition + "' is being applied to an array. Arrays can not have attributes.");
            } else {
                Object result = jsonProvider.createArray();
                for (Object current : jsonProvider.toIterable(obj)) {
                    if (jsonProvider.isMap(current)) {
                       
                        Collection<String> keys = jsonProvider.getPropertyKeys(current);

                        if(split.length == 1){
                            if (keys.contains(condition)) {
                                Object o = jsonProvider.getProperty(current, condition);

                                boolean isArr = jsonProvider.isArray(o);
                                boolean isEnd = pathToken.isEndToken();
                                if (isArr && !isEnd) {
                                    for(Object item : jsonProvider.toIterable(o)){
                                        jsonProvider.setProperty(result, jsonProvider.length(result), item);
                                    }
                                } else {
                                    jsonProvider.setProperty(result, jsonProvider.length(result), jsonProvider.getProperty(current, condition));
                                }
                            }
                        } else {
                            Object res = jsonProvider.createMap();
                            for (String prop : split) {
                                if (keys.contains(prop)) {
                                    jsonProvider.setProperty(res, prop, jsonProvider.getProperty(current, prop));
                                }
                            }
                            jsonProvider.setProperty(result, jsonProvider.length(result), res);
                        }
                    }
                }
                return result;
            }
        } else if (jsonProvider.isMap(obj)){

            Collection<String> keys = jsonProvider.getPropertyKeys(obj);
            if(!keys.contains(condition) && split.length == 1){

                if(configuration.getOptions().contains(Option.THROW_ON_MISSING_PROPERTY)){
                    throw new PathNotFoundException("Path '" + condition + "' not found in the current context:\n" + jsonProvider.toJson(obj));
                }

                if(pathToken.isEndToken()){
                    return null;
                } else {
                    throw new PathNotFoundException("Path '" + condition + "' not found in the current context:\n" + jsonProvider.toJson(obj));
                }
            } else {

                if(split.length == 1){
                    return jsonProvider.getProperty(obj, condition);
                } else {
                    Object res = jsonProvider.createMap();
                    for (String prop : split) {
                        if(keys.contains(prop)){
                          jsonProvider.setProperty(res, prop, jsonProvider.getProperty(obj, prop));
                        }
                    }
                    return res;
                }
            }
        } else {
            throw new PathNotFoundException("Failed to access property: '" + condition + "' on object " + obj);
        }
    }
View Full Code Here

                        jsonProvider.setProperty(result, jsonProvider.length(result), jsonProvider.getProperty(obj, idx.trim()));
                    }
                    return result;
                }
            } catch (IndexOutOfBoundsException e){
                throw new PathNotFoundException("Array index " + indexArr + " not found in path", e);
            }

        }
    }
View Full Code Here

TOP

Related Classes of com.jayway.jsonpath.PathNotFoundException

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.