Browse Source

fix a NullPointerException that occurred when creating array filters on non-existent properties

pull/25/head
Jochen Berger 12 years ago
parent
commit
f6e0ccbca4
  1. 3
      json-path/src/main/java/com/jayway/jsonpath/internal/filter/ArrayEvalFilter.java
  2. 3
      json-path/src/main/java/com/jayway/jsonpath/internal/filter/ArrayIndexFilter.java
  3. 4
      json-path/src/main/java/com/jayway/jsonpath/internal/filter/ArrayQueryFilter.java
  4. 30
      json-path/src/test/java/com/jayway/jsonpath/JsonPathFilterTest.java

3
json-path/src/main/java/com/jayway/jsonpath/internal/filter/ArrayEvalFilter.java

@ -37,6 +37,9 @@ public class ArrayEvalFilter extends PathTokenFilter {
@Override @Override
public Object filter(Object obj, JsonProvider jsonProvider) { public Object filter(Object obj, JsonProvider jsonProvider) {
//[?(@.isbn == 10)] //[?(@.isbn == 10)]
if (obj == null){
return null;
}
List<Object> src = jsonProvider.toList(obj); List<Object> src = jsonProvider.toList(obj);
List<Object> result = jsonProvider.createList(); List<Object> result = jsonProvider.createList();

3
json-path/src/main/java/com/jayway/jsonpath/internal/filter/ArrayIndexFilter.java

@ -32,6 +32,9 @@ public class ArrayIndexFilter extends PathTokenFilter {
@Override @Override
public Object filter(Object obj,JsonProvider jsonProvider) { public Object filter(Object obj,JsonProvider jsonProvider) {
if(obj == null){
return null;
}
List<Object> src = jsonProvider.toList(obj); List<Object> src = jsonProvider.toList(obj);
List<Object> result = jsonProvider.createList(); List<Object> result = jsonProvider.createList();

4
json-path/src/main/java/com/jayway/jsonpath/internal/filter/ArrayQueryFilter.java

@ -31,7 +31,9 @@ public class ArrayQueryFilter extends PathTokenFilter {
@Override @Override
public Object filter(Object obj, JsonProvider jsonProvider, LinkedList<Filter> filters, boolean inArrayContext) { public Object filter(Object obj, JsonProvider jsonProvider, LinkedList<Filter> filters, boolean inArrayContext) {
if (obj == null){
return null;
}
Filter filter = filters.poll(); Filter filter = filters.poll();
return filter.doFilter((List)obj); return filter.doFilter((List)obj);

30
json-path/src/test/java/com/jayway/jsonpath/JsonPathFilterTest.java

@ -2,6 +2,10 @@ package com.jayway.jsonpath;
import org.junit.Test; import org.junit.Test;
import com.jayway.jsonpath.internal.filter.FilterFactory;
import com.jayway.jsonpath.internal.filter.PathTokenFilter;
import com.jayway.jsonpath.spi.impl.JsonSmartJsonProvider;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -129,4 +133,30 @@ public class JsonPathFilterTest {
assertEquals(1, res.get(0).intValue()); assertEquals(1, res.get(0).intValue());
} }
@Test
public void array_query_filter_on_non_existent_property_returns_null(){
final PathTokenFilter hugePage = FilterFactory.createFilter("[?(@.wordCount >= 10000)]");
Filter filter = new Filter.FilterAdapter<Object>() {
@Override
public boolean accept(Object obj) {
return hugePage.filter(obj, new JsonSmartJsonProvider()) != null;
}
};
assertEquals(null, JsonPath.read(DOCUMENT, "$.store.book.page[?]", filter));
}
@Test
public void array_eval_filter_on_non_existent_property_returns_null(){
final JsonPath hugePage = JsonPath.compile("$.store.book.page[?(@.wordCount >= 10000)]");
assertEquals(null, hugePage.read(DOCUMENT));
}
@Test
public void array_index_filter_on_non_existent_property_returns_null(){
final JsonPath hugePage = JsonPath.compile("$.store.book.page[12]");
assertEquals(null, hugePage.read(DOCUMENT));
}
} }

Loading…
Cancel
Save