From ac83eb0934e854edafd29b345a00acd7d96a847e Mon Sep 17 00:00:00 2001 From: Kalle Stenflo Date: Wed, 11 Jun 2014 13:57:00 +0200 Subject: [PATCH] Fixed bug with multiple properties. $.store.book[0]['title', 'author'] --- .../internal/spi/compiler/EvaluationContextImpl.java | 1 + .../jsonpath/internal/spi/compiler/PathCompiler.java | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/EvaluationContextImpl.java b/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/EvaluationContextImpl.java index da143e61..1e6c1c24 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/EvaluationContextImpl.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/spi/compiler/EvaluationContextImpl.java @@ -82,4 +82,5 @@ class EvaluationContextImpl implements EvaluationContext { public List getPathList() { return pathResult; } + } 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 0cf65553..a8b70955 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 @@ -42,7 +42,8 @@ public class PathCompiler { path = "$." + path; } - Path p = cache.get(path + filterList.toString()); + String cacheKey = path + filterList.toString(); + Path p = cache.get(cacheKey); if(p != null){ return p; } @@ -110,7 +111,7 @@ public class PathCompiler { Path pa = new CompiledPath(root); - cache.put(path, pa); + cache.put(cacheKey, pa); return pa; } @@ -344,6 +345,7 @@ public class PathCompiler { StringBuilder buffer = new StringBuilder(); boolean propertyIsOpen = false; + boolean propertyDone = false; while (current != ']') { switch (current) { @@ -351,12 +353,17 @@ public class PathCompiler { if (propertyIsOpen) { property = buffer.toString(); propertyIsOpen = false; + propertyDone = true; } else { propertyIsOpen = true; } break; default: if (propertyIsOpen) { + if(propertyDone){ + //Don't understand how to create a "Normalized path expressions" for this type of query + throw new InvalidPathException("Only single properties are supported."); + } buffer.append(current); } break;