Browse Source

Prevent ClassCastException when deleting missing path with suppress exceptions enabled

pull/871/head
Binokkio 2 years ago
parent
commit
eaa5e9b7f5
  1. 3
      json-path/src/main/java/com/jayway/jsonpath/JsonPath.java
  2. 65
      json-path/src/test/java/com/jayway/jsonpath/DeleteMissingPathTest.java

3
json-path/src/main/java/com/jayway/jsonpath/JsonPath.java

@ -24,6 +24,7 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Collections;
import static com.jayway.jsonpath.Option.ALWAYS_RETURN_LIST;
import static com.jayway.jsonpath.Option.AS_PATH_LIST;
@ -749,7 +750,7 @@ public class JsonPath {
boolean optAsPathList = configuration.containsOption(AS_PATH_LIST);
boolean optAlwaysReturnList = configuration.containsOption(Option.ALWAYS_RETURN_LIST);
if (optAsPathList) {
return (T) configuration.jsonProvider().createArray();
return (T) Collections.emptyList();
} else {
if (optAlwaysReturnList) {
return (T) configuration.jsonProvider().createArray();

65
json-path/src/test/java/com/jayway/jsonpath/DeleteMissingPathTest.java

@ -0,0 +1,65 @@
package com.jayway.jsonpath;
import com.jayway.jsonpath.spi.json.*;
import org.junit.Test;
public class DeleteMissingPathTest {
private DocumentContext getDocumentContextFromProvider(JsonProvider jsonProvider) {
Configuration configuration = Configuration.builder()
.jsonProvider(jsonProvider)
.options(Option.SUPPRESS_EXCEPTIONS)
.build();
return JsonPath.parse("{}", configuration);
}
@Test
public void test_delete_missing_path_with_suppress_exceptions_does_not_throw_gson() {
getDocumentContextFromProvider(new GsonJsonProvider())
.delete("$..this..path..is..missing");
}
@Test
public void test_delete_missing_path_with_suppress_exceptions_does_not_throw_jackson_json_node() {
getDocumentContextFromProvider(new JacksonJsonNodeJsonProvider())
.delete("$..this..path..is..missing");
}
@Test
public void test_delete_missing_path_with_suppress_exceptions_does_not_throw_jackson() {
getDocumentContextFromProvider(new JacksonJsonProvider())
.delete("$..this..path..is..missing");
}
@Test
public void test_delete_missing_path_with_suppress_exceptions_does_not_throw_jakarta() {
getDocumentContextFromProvider(new JakartaJsonProvider())
.delete("$..this..path..is..missing");
}
@Test
public void test_delete_missing_path_with_suppress_exceptions_does_not_throw_jettison() {
getDocumentContextFromProvider(new JettisonProvider())
.delete("$..this..path..is..missing");
}
@Test
public void test_delete_missing_path_with_suppress_exceptions_does_not_throw_json_org() {
getDocumentContextFromProvider(new JsonOrgJsonProvider())
.delete("$..this..path..is..missing");
}
@Test
public void test_delete_missing_path_with_suppress_exceptions_does_not_throw_json_smart() {
getDocumentContextFromProvider(new JsonSmartJsonProvider())
.delete("$..this..path..is..missing");
}
@Test
public void test_delete_missing_path_with_suppress_exceptions_does_not_throw_tapestry() {
getDocumentContextFromProvider(new TapestryJsonProvider())
.delete("$..this..path..is..missing");
}
}
Loading…
Cancel
Save