Browse Source

Improved error messages.

pull/41/head
Kalle Stenflo 10 years ago
parent
commit
eb30ce7665
  1. 24
      json-path-web-test/src/main/java/com/jayway/jsonpath/web/boot/Main.java
  2. 2
      json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/ArrayPathToken.java
  3. 25
      json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/PathCompiler.java
  4. 14
      json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/PathToken.java
  5. 2
      json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/PropertyPathToken.java

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

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

25
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<Criteria2> 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) {

14
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 + "]");
}
}

2
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);

Loading…
Cancel
Save