Browse Source

update Issue 515

pull/836/head
ERICXUCHI 3 years ago
parent
commit
4bfd0b9766
  1. 4
      json-path/src/main/java/com/jayway/jsonpath/DocumentContext.java
  2. 24
      json-path/src/main/java/com/jayway/jsonpath/internal/JsonContext.java
  3. 123
      json-path/src/test/java/Issue_515.java

4
json-path/src/main/java/com/jayway/jsonpath/DocumentContext.java

@ -14,5 +14,7 @@
*/
package com.jayway.jsonpath;
public interface DocumentContext extends ReadContext, WriteContext {
import java.io.Externalizable;
public interface DocumentContext extends ReadContext, WriteContext, Externalizable {
}

24
json-path/src/main/java/com/jayway/jsonpath/internal/JsonContext.java

@ -29,6 +29,10 @@ import com.jayway.jsonpath.spi.cache.CacheProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@ -37,11 +41,12 @@ import static com.jayway.jsonpath.internal.Utils.notEmpty;
import static com.jayway.jsonpath.internal.Utils.notNull;
public class JsonContext implements DocumentContext {
public static List<Configuration> configurationList=new ArrayList<>();
private static final Logger logger = LoggerFactory.getLogger(JsonContext.class);
private final Configuration configuration;
private final Object json;
private Configuration configuration;
private Object json;
JsonContext(Object json, Configuration configuration) {
notNull(json, "json can not be null");
@ -50,7 +55,9 @@ public class JsonContext implements DocumentContext {
this.json = json;
}
public JsonContext() {
}
@Override
public Configuration configuration() {
return configuration;
@ -225,6 +232,19 @@ public class JsonContext implements DocumentContext {
return jsonPath;
}
@Override
public void writeExternal( ObjectOutput objectOutput ) throws IOException {
configurationList.add(this.configuration);
objectOutput.writeObject(json);
objectOutput.writeInt(configurationList.size()-1);
}
@Override
public void readExternal( ObjectInput objectInput ) throws IOException, ClassNotFoundException {
json=objectInput.readObject();
configuration=configurationList.get(objectInput.readInt());
}
private final static class LimitingEvaluationListener implements EvaluationListener {
final int limit;

123
json-path/src/test/java/Issue_515.java

@ -0,0 +1,123 @@
import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.JsonPath;
import org.junit.Assert;
import org.junit.Test;
import java.io.*;
import java.lang.reflect.Field;
import static org.junit.Assert.fail;
public class Issue_515 {
@Test
public void Test_DocumentContextSerializable1(){
String json = "{\n" +
" \"store\": [\n" +
" {\n" +
" \"books\": [\n" +
" {\n" +
" \"category\": \"reference\",\n" +
" \"author\": \"Nigel Rees\",\n" +
" \"title\": \"Sayings of the Century\",\n" +
" \"price\": 8.95\n" +
" }\n" +
" ],\n" +
" \"address\": [\n" +
" {\n" +
" \"city\": \"New York\"\n" +
" },\n" +
" {\n" +
" \"city\": \"Paris\"\n" +
" }\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"books\": [\n" +
" {\n" +
" \"category\": \"fiction\",\n" +
" \"author\": \"Evelyn Waugh\",\n" +
" \"title\": \"Sword of Honour\",\n" +
" \"price\": 12.99\n" +
" }\n" +
" ]\n" +
" }\n" +
" ]\n" +
"}";
DocumentContext originContext= JsonPath.parse(json);
boolean equal=true;
try {
FileOutputStream fos=new FileOutputStream("obj.txt");
ObjectOutputStream outputStream=new ObjectOutputStream(fos);
outputStream.writeObject(originContext);
outputStream.close();
fos.close();
FileInputStream ios=new FileInputStream("obj.txt");
ObjectInputStream inputStream=new ObjectInputStream(ios);
DocumentContext inputObj=(DocumentContext) inputStream.readObject();
Field[] inputFields=inputObj.getClass().getDeclaredFields(),originFields=originContext.getClass().getDeclaredFields();
ios.close();
inputStream.close();
if(inputFields.length==originFields.length){
for(int i=0;i<inputFields.length;i++){
inputFields[i].setAccessible(true);
originFields[i].setAccessible(true);
if(!inputFields[i].get(inputObj).equals(originFields[i].get(originContext))){
equal=false;
break;
}
}
}else{
equal=false;
}
} catch (IOException | ClassNotFoundException | IllegalAccessException e) {
fail();
}finally {
File file=new File("obj.txt");
boolean del=file.delete();
if(!del){
equal=false;
}
}
Assert.assertTrue(equal);
}
@Test
public void Test_DocumentContextSerializable2(){
String json = "{}";
DocumentContext originContext=JsonPath.parse(json);
boolean equal=true;
try {
FileOutputStream fos=new FileOutputStream("obj.txt");
ObjectOutputStream outputStream=new ObjectOutputStream(fos);
outputStream.writeObject(originContext);
outputStream.close();
fos.close();
FileInputStream ios=new FileInputStream("obj.txt");
ObjectInputStream inputStream=new ObjectInputStream(ios);
DocumentContext inputObj=(DocumentContext) inputStream.readObject();
Field[] inputFields=inputObj.getClass().getDeclaredFields(),originFields=originContext.getClass().getDeclaredFields();
ios.close();
inputStream.close();
if(inputFields.length==originFields.length){
for(int i=0;i<inputFields.length;i++){
inputFields[i].setAccessible(true);
originFields[i].setAccessible(true);
if(!inputFields[i].get(inputObj).equals(originFields[i].get(originContext))){
equal=false;
break;
}
}
}else{
equal=false;
}
} catch (IOException | ClassNotFoundException | IllegalAccessException e) {
fail();
}finally {
File file=new File("obj.txt");
boolean del=file.delete();
if(!del){
equal=false;
}
}
Assert.assertTrue(equal);
}
}
Loading…
Cancel
Save