diff --git a/json-path-web-test/src/main/java/com/jayway/jsonpath/web/boot/Main.java b/json-path-web-test/src/main/java/com/jayway/jsonpath/web/boot/Main.java index bcd5b282..38eeaa89 100644 --- a/json-path-web-test/src/main/java/com/jayway/jsonpath/web/boot/Main.java +++ b/json-path-web-test/src/main/java/com/jayway/jsonpath/web/boot/Main.java @@ -21,25 +21,35 @@ import org.glassfish.jersey.servlet.ServletContainer; public class Main { public static void main(String[] args) throws Exception { - Server s = new Server(); + int port = 8080; + if(args.length > 0){ + try { + port = Integer.parseInt(args[0]); + } catch (NumberFormatException nfe) { + System.out.println("Invalid usage! Port argument must be an integer (if not supplied " + port + " is used)"); + } + } + System.out.println("Server started on port: " + port); - s.setConnectors(new Connector[] { createConnector(s) }); + Server server = new Server(); + + server.setConnectors(new Connector[]{createConnector(server, port)}); ServletContextHandler context = new ServletContextHandler(NO_SESSIONS); context.setContextPath("/"); ServletHolder servletHolder = new ServletHolder(createJerseyServlet()); servletHolder.setInitOrder(1); context.addServlet(servletHolder, "/*"); - s.setHandler(context); + server.setHandler(context); - s.start(); - s.join(); + server.start(); + server.join(); } - private static ServerConnector createConnector(Server s){ + private static ServerConnector createConnector(Server s, int port){ ServerConnector connector = new ServerConnector(s); connector.setHost("localhost"); - connector.setPort(8080); + connector.setPort(port); return connector; } diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/ArrayPathToken.java b/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/ArrayPathToken.java index d044a106..2db5f85a 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/ArrayPathToken.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/ArrayPathToken.java @@ -113,7 +113,7 @@ class ArrayPathToken extends PathToken { } } } catch (IndexOutOfBoundsException e) { - throw new PathNotFoundException(e); + throw new PathNotFoundException("Index out of bounds when evaluating path " + currentPath); } } diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/PathCompiler.java b/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/PathCompiler.java index ec9bd7e0..fb01cec1 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/PathCompiler.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/PathCompiler.java @@ -312,16 +312,6 @@ public class PathCompiler { criteria.add(createCriteria(pathBuffer, operatorBuffer, valueBuffer)); - /* - Iterator iterator = criteria.iterator(); - Criteria2 current = iterator.next(); - Filter2 filter = Filter2.filter(current); - while (iterator.hasNext()) { - filter. addCriteria(iterator.next()); - } - - return new FilterPathToken(filter); - */ Filter2 filter2 = Filter2.filter(criteria); return new FilterPathToken(filter2); @@ -329,21 +319,6 @@ public class PathCompiler { private Criteria2 createCriteria(StringBuilder pathBuffer, StringBuilder operatorBuffer, StringBuilder valueBuffer) { return Criteria2.create(pathBuffer.toString().trim(), operatorBuffer.toString().trim(), valueBuffer.toString().trim()); - - /* - String value = valueBuffer.toString().trim(); - Path path = PathCompiler.tokenize(pathBuffer.toString().trim()); - String operator = operatorBuffer.toString().trim(); - - - - - if (operator.isEmpty() && value.isEmpty()) { - return Criteria.where(path).exists(true); - } else { - return Criteria.where(path).matches(operator, value); - } - */ } private boolean isAnd(char c) { diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/PathToken.java b/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/PathToken.java index 750da61b..f6611878 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/PathToken.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/PathToken.java @@ -36,11 +36,15 @@ abstract class PathToken { void handleArrayIndex(int index, String currentPath, Object json, EvaluationContextImpl ctx) { String evalPath = currentPath + "[" + index + "]"; - Object evalHit = ctx.jsonProvider().getProperty(json, index); - if (isLeaf()) { - ctx.addResult(evalPath, evalHit); - } else { - next().evaluate(evalPath, evalHit, ctx); + try { + Object evalHit = ctx.jsonProvider().getProperty(json, index); + if (isLeaf()) { + ctx.addResult(evalPath, evalHit); + } else { + next().evaluate(evalPath, evalHit, ctx); + } + } catch (IndexOutOfBoundsException e) { + throw new PathNotFoundException("Index out of bounds when evaluating path " + currentPath + "[" + index + "]"); } } diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/PropertyPathToken.java b/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/PropertyPathToken.java index 0b26885c..207ebffb 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/PropertyPathToken.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/PropertyPathToken.java @@ -20,7 +20,7 @@ class PropertyPathToken extends PathToken { @Override void evaluate(String currentPath, Object model, EvaluationContextImpl ctx) { if (!ctx.jsonProvider().isMap(model)) { - throw new PathNotFoundException("Property " + currentPath + " not found!"); + throw new PathNotFoundException("Property ['" + property + "'] not found in path " + currentPath); } handleObjectProperty(currentPath, model, ctx, property);