In the following code sample, there is a source and target object. The target object is derived from the source through the adjustment of some of the fields within the source. A difference is computed and then applied to the source. That resulting object is then compared to the target object with the expectation no difference should be detected. Yet, this is not the case; there is a difference in one of the fields.
package com.cyberfront.build;
import java.io.IOException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.flipkart.zjsonpatch.JsonDiff;
import com.flipkart.zjsonpatch.JsonPatch;
public class Main {
private static final String stringSource = "{\"@type\":\"SimpleCollection\",\"id\":\"17aead29-2097-436d-b9d2-d95e0de423db\",\"notes\":\"sapien minim mandamus fugit postulant nominavi solet numquam\",\"description\":\"qui splendide porttitor simul maiestatis fabellas viverra omnesque\",\"version\":7,\"collectionValue\":[{\"@type\":\"SimpleReference\",\"id\":\"a08f2ab0-cf27-440b-b9f5-71b1021aa206\",\"notes\":\"intellegebat doctus signiferumque dis dicam appetere fringilla esse\",\"description\":\"sapientem massa legimus nunc ultricies sed eirmod\",\"version\":0,\"referenceValue\":{\"@type\":\"SimpleB\",\"id\":\"33b89e6e-3cd2-4f49-b053-b654f6f8df5f\",\"notes\":\"ignota adhuc convenire splendide vivendo\",\"description\":\"nostra efficitur morbi sit fusce tacimates eum vitae\",\"version\":0,\"intValue\":899213098,\"type\":\"SIMPLE_B\"},\"type\":\"SIMPLE_REFERENCE\"},{\"@type\":\"SimpleReference\",\"id\":\"a08f2ab0-cf27-440b-b9f5-71b1021aa206\",\"notes\":\"intellegebat doctus signiferumque dis dicam appetere fringilla esse\",\"description\":\"sapientem massa legimus nunc ultricies sed eirmod\",\"version\":0,\"referenceValue\":{\"@type\":\"SimpleB\",\"id\":\"33b89e6e-3cd2-4f49-b053-b654f6f8df5f\",\"notes\":\"ignota adhuc convenire splendide vivendo\",\"description\":\"nostra efficitur morbi sit fusce tacimates eum vitae\",\"version\":0,\"intValue\":899213098,\"type\":\"SIMPLE_B\"},\"type\":\"SIMPLE_REFERENCE\"},{\"@type\":\"SimpleD\",\"id\":\"41ef6628-6ff6-4be4-b8ab-f836f30e8f58\",\"notes\":\"adolescens mea phasellus facilisis unum\",\"description\":\"inceptos petentium etiam efficiantur wisi venenatis\",\"version\":0,\"booleanValue\":false,\"type\":\"SIMPLE_D\"},{\"@type\":\"SimpleB\",\"id\":\"12a771f8-2d9d-4060-b02c-2772862154ff\",\"notes\":\"hendrerit civibus sagittis congue inceptos ante facilis honestatis\",\"description\":\"antiopam reprimique putent urbanitas ne volumus\",\"version\":2,\"intValue\":-1035459272,\"type\":\"SIMPLE_B\"}],\"type\":\"SIMPLE_COLLECTION\"}";
private static final String stringTarget = "{\"@type\":\"SimpleCollection\",\"id\":\"17aead29-2097-436d-b9d2-d95e0de423db\",\"notes\":\"sapien minim mandamus fugit postulant nominavi solet numquam\",\"description\":\"qui splendide porttitor simul maiestatis fabellas viverra omnesque\",\"version\":10,\"collectionValue\":[{\"@type\":\"SimpleReference\",\"id\":\"f4b10497-ecb9-4e6a-aa66-bd4c874da6f0\",\"notes\":\"cras habitant liber verterem neque litora eruditi vehicula\",\"description\":\"te comprehensam mutat latine deterruisset quis sadipscing non verear\",\"version\":0,\"referenceValue\":{\"@type\":\"SimpleD\",\"id\":\"d4754e2d-edfc-4263-add2-4a17082f6b50\",\"notes\":\"ceteros condimentum rhoncus mei salutatus volutpat delectus tation mollis\",\"description\":\"ante ea errem mnesarchum civibus\",\"version\":0,\"booleanValue\":true,\"type\":\"SIMPLE_D\"},\"type\":\"SIMPLE_REFERENCE\"},{\"@type\":\"SimpleReference\",\"id\":\"a08f2ab0-cf27-440b-b9f5-71b1021aa206\",\"notes\":\"intellegebat doctus signiferumque dis dicam appetere fringilla esse\",\"description\":\"sapientem massa legimus nunc ultricies sed eirmod\",\"version\":0,\"referenceValue\":{\"@type\":\"SimpleB\",\"id\":\"33b89e6e-3cd2-4f49-b053-b654f6f8df5f\",\"notes\":\"ignota adhuc convenire splendide vivendo\",\"description\":\"nostra efficitur morbi sit fusce tacimates eum vitae\",\"version\":0,\"intValue\":899213098,\"type\":\"SIMPLE_B\"},\"type\":\"SIMPLE_REFERENCE\"},{\"@type\":\"SimpleReference\",\"id\":\"a08f2ab0-cf27-440b-b9f5-71b1021aa206\",\"notes\":\"intellegebat doctus signiferumque dis dicam appetere fringilla esse\",\"description\":\"sapientem massa legimus nunc ultricies sed eirmod\",\"version\":0,\"referenceValue\":{\"@type\":\"SimpleB\",\"id\":\"33b89e6e-3cd2-4f49-b053-b654f6f8df5f\",\"notes\":\"ignota adhuc convenire splendide vivendo\",\"description\":\"nostra efficitur morbi sit fusce tacimates eum vitae\",\"version\":0,\"intValue\":899213098,\"type\":\"SIMPLE_B\"},\"type\":\"SIMPLE_REFERENCE\"},{\"@type\":\"SimpleB\",\"id\":\"12a771f8-2d9d-4060-b02c-2772862154ff\",\"notes\":\"morbi fermentum inani tritani malorum ultrices\",\"description\":\"antiopam reprimique putent urbanitas ne volumus\",\"version\":3,\"intValue\":-1035459272,\"type\":\"SIMPLE_B\"}],\"type\":\"SIMPLE_COLLECTION\"}";
private final static ObjectMapper mapper = new ObjectMapper();
public static void main(String[] args) {
try {
// Convert the stringSource into a JSON object
JsonNode jsonSource = mapper.readTree(stringSource);
// Convert the stringTarget into a JSON object
JsonNode jsonTarget = mapper.readTree(stringTarget);
// Compute the patch required to transform jsonSource into jsonTarget
JsonNode jsonSourceTargetDiff = JsonDiff.asJson(jsonSource, jsonTarget);
// Apply that patch back to jsonSource. The result should identical to jsonTarget
JsonNode jsonSourceAppliedDiff = JsonPatch.apply(jsonSourceTargetDiff, jsonSource);
// Identify the difference between the target object and the JSON object we just computed by applying the difference to the
// source. This should result in an empty array since applying the patch should result in the target, but it isn't empty.
JsonNode jsonTargetDiffDiff = JsonDiff.asJson(jsonSourceAppliedDiff, jsonTarget);
System.out.println(" jsonSource: " + jsonSource.toString());
System.out.println(" jsonTarget: " + jsonTarget.toString());
System.out.println(" jsonSourceTargetDiff: " + jsonSourceTargetDiff.toString());
System.out.println("jsonSourceAppliedDiff: " + jsonSourceAppliedDiff.toString());
System.out.println(" jsonTargetDiffDiff: " + jsonTargetDiffDiff.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
jsonSource: {"@type":"SimpleCollection","id":"17aead29-2097-436d-b9d2-d95e0de423db","notes":"sapien minim mandamus fugit postulant nominavi solet numquam","description":"qui splendide porttitor simul maiestatis fabellas viverra omnesque","version":7,"collectionValue":[{"@type":"SimpleReference","id":"a08f2ab0-cf27-440b-b9f5-71b1021aa206","notes":"intellegebat doctus signiferumque dis dicam appetere fringilla esse","description":"sapientem massa legimus nunc ultricies sed eirmod","version":0,"referenceValue":{"@type":"SimpleB","id":"33b89e6e-3cd2-4f49-b053-b654f6f8df5f","notes":"ignota adhuc convenire splendide vivendo","description":"nostra efficitur morbi sit fusce tacimates eum vitae","version":0,"intValue":899213098,"type":"SIMPLE_B"},"type":"SIMPLE_REFERENCE"},{"@type":"SimpleReference","id":"a08f2ab0-cf27-440b-b9f5-71b1021aa206","notes":"intellegebat doctus signiferumque dis dicam appetere fringilla esse","description":"sapientem massa legimus nunc ultricies sed eirmod","version":0,"referenceValue":{"@type":"SimpleB","id":"33b89e6e-3cd2-4f49-b053-b654f6f8df5f","notes":"ignota adhuc convenire splendide vivendo","description":"nostra efficitur morbi sit fusce tacimates eum vitae","version":0,"intValue":899213098,"type":"SIMPLE_B"},"type":"SIMPLE_REFERENCE"},{"@type":"SimpleD","id":"41ef6628-6ff6-4be4-b8ab-f836f30e8f58","notes":"adolescens mea phasellus facilisis unum","description":"inceptos petentium etiam efficiantur wisi venenatis","version":0,"booleanValue":false,"type":"SIMPLE_D"},{"@type":"SimpleB","id":"12a771f8-2d9d-4060-b02c-2772862154ff","notes":"hendrerit civibus sagittis congue inceptos ante facilis honestatis","description":"antiopam reprimique putent urbanitas ne volumus","version":2,"intValue":-1035459272,"type":"SIMPLE_B"}],"type":"SIMPLE_COLLECTION"}
jsonTarget: {"@type":"SimpleCollection","id":"17aead29-2097-436d-b9d2-d95e0de423db","notes":"sapien minim mandamus fugit postulant nominavi solet numquam","description":"qui splendide porttitor simul maiestatis fabellas viverra omnesque","version":10,"collectionValue":[{"@type":"SimpleReference","id":"f4b10497-ecb9-4e6a-aa66-bd4c874da6f0","notes":"cras habitant liber verterem neque litora eruditi vehicula","description":"te comprehensam mutat latine deterruisset quis sadipscing non verear","version":0,"referenceValue":{"@type":"SimpleD","id":"d4754e2d-edfc-4263-add2-4a17082f6b50","notes":"ceteros condimentum rhoncus mei salutatus volutpat delectus tation mollis","description":"ante ea errem mnesarchum civibus","version":0,"booleanValue":true,"type":"SIMPLE_D"},"type":"SIMPLE_REFERENCE"},{"@type":"SimpleReference","id":"a08f2ab0-cf27-440b-b9f5-71b1021aa206","notes":"intellegebat doctus signiferumque dis dicam appetere fringilla esse","description":"sapientem massa legimus nunc ultricies sed eirmod","version":0,"referenceValue":{"@type":"SimpleB","id":"33b89e6e-3cd2-4f49-b053-b654f6f8df5f","notes":"ignota adhuc convenire splendide vivendo","description":"nostra efficitur morbi sit fusce tacimates eum vitae","version":0,"intValue":899213098,"type":"SIMPLE_B"},"type":"SIMPLE_REFERENCE"},{"@type":"SimpleReference","id":"a08f2ab0-cf27-440b-b9f5-71b1021aa206","notes":"intellegebat doctus signiferumque dis dicam appetere fringilla esse","description":"sapientem massa legimus nunc ultricies sed eirmod","version":0,"referenceValue":{"@type":"SimpleB","id":"33b89e6e-3cd2-4f49-b053-b654f6f8df5f","notes":"ignota adhuc convenire splendide vivendo","description":"nostra efficitur morbi sit fusce tacimates eum vitae","version":0,"intValue":899213098,"type":"SIMPLE_B"},"type":"SIMPLE_REFERENCE"},{"@type":"SimpleB","id":"12a771f8-2d9d-4060-b02c-2772862154ff","notes":"morbi fermentum inani tritani malorum ultrices","description":"antiopam reprimique putent urbanitas ne volumus","version":3,"intValue":-1035459272,"type":"SIMPLE_B"}],"type":"SIMPLE_COLLECTION"}
jsonSourceTargetDiff: [{"op":"replace","path":"/version","value":10},{"op":"add","path":"/collectionValue/0","value":{"@type":"SimpleReference","id":"f4b10497-ecb9-4e6a-aa66-bd4c874da6f0","notes":"cras habitant liber verterem neque litora eruditi vehicula","description":"te comprehensam mutat latine deterruisset quis sadipscing non verear","version":0,"referenceValue":{"@type":"SimpleD","id":"d4754e2d-edfc-4263-add2-4a17082f6b50","notes":"ceteros condimentum rhoncus mei salutatus volutpat delectus tation mollis","description":"ante ea errem mnesarchum civibus","version":0,"booleanValue":true,"type":"SIMPLE_D"},"type":"SIMPLE_REFERENCE"}},{"op":"replace","path":"/collectionValue/3/@type","value":"SimpleB"},{"op":"replace","path":"/collectionValue/3/id","value":"12a771f8-2d9d-4060-b02c-2772862154ff"},{"op":"replace","path":"/collectionValue/3/notes","value":"morbi fermentum inani tritani malorum ultrices"},{"op":"replace","path":"/collectionValue/3/description","value":"antiopam reprimique putent urbanitas ne volumus"},{"op":"replace","path":"/collectionValue/3/version","value":3},{"op":"remove","path":"/collectionValue/3/booleanValue","value":false},{"op":"replace","path":"/collectionValue/3/type","value":"SIMPLE_B"},{"op":"copy","from":"/collectionValue/3/intValue","path":"/collectionValue/3/intValue"},{"op":"remove","path":"/collectionValue/4","value":{"@type":"SimpleB","id":"12a771f8-2d9d-4060-b02c-2772862154ff","notes":"hendrerit civibus sagittis congue inceptos ante facilis honestatis","description":"antiopam reprimique putent urbanitas ne volumus","version":2,"intValue":-1035459272,"type":"SIMPLE_B"}}]
jsonSourceAppliedDiff: {"@type":"SimpleCollection","id":"17aead29-2097-436d-b9d2-d95e0de423db","notes":"sapien minim mandamus fugit postulant nominavi solet numquam","description":"qui splendide porttitor simul maiestatis fabellas viverra omnesque","version":10,"collectionValue":[{"@type":"SimpleReference","id":"f4b10497-ecb9-4e6a-aa66-bd4c874da6f0","notes":"cras habitant liber verterem neque litora eruditi vehicula","description":"te comprehensam mutat latine deterruisset quis sadipscing non verear","version":0,"referenceValue":{"@type":"SimpleD","id":"d4754e2d-edfc-4263-add2-4a17082f6b50","notes":"ceteros condimentum rhoncus mei salutatus volutpat delectus tation mollis","description":"ante ea errem mnesarchum civibus","version":0,"booleanValue":true,"type":"SIMPLE_D"},"type":"SIMPLE_REFERENCE"},{"@type":"SimpleReference","id":"a08f2ab0-cf27-440b-b9f5-71b1021aa206","notes":"intellegebat doctus signiferumque dis dicam appetere fringilla esse","description":"sapientem massa legimus nunc ultricies sed eirmod","version":0,"referenceValue":{"@type":"SimpleB","id":"33b89e6e-3cd2-4f49-b053-b654f6f8df5f","notes":"ignota adhuc convenire splendide vivendo","description":"nostra efficitur morbi sit fusce tacimates eum vitae","version":0,"intValue":899213098,"type":"SIMPLE_B"},"type":"SIMPLE_REFERENCE"},{"@type":"SimpleReference","id":"a08f2ab0-cf27-440b-b9f5-71b1021aa206","notes":"intellegebat doctus signiferumque dis dicam appetere fringilla esse","description":"sapientem massa legimus nunc ultricies sed eirmod","version":0,"referenceValue":{"@type":"SimpleB","id":"33b89e6e-3cd2-4f49-b053-b654f6f8df5f","notes":"ignota adhuc convenire splendide vivendo","description":"nostra efficitur morbi sit fusce tacimates eum vitae","version":0,"intValue":899213098,"type":"SIMPLE_B"},"type":"SIMPLE_REFERENCE"},{"@type":"SimpleB","id":"12a771f8-2d9d-4060-b02c-2772862154ff","notes":"morbi fermentum inani tritani malorum ultrices","description":"antiopam reprimique putent urbanitas ne volumus","version":3,"type":"SIMPLE_B","intValue":null}],"type":"SIMPLE_COLLECTION"}
jsonTargetDiffDiff: [{"op":"replace","path":"/collectionValue/3/intValue","value":-1035459272}]
Below is the pom.xml for my project.
I have attached the complete project below. It was produced using Eclipse neon.3.