From 82a3a75cf8045a638e0dcd90dcff39a67609bc68 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Fri, 14 Dec 2012 12:01:32 +0100 Subject: Use XMLUnit XML Diff to compare system resources, for compatibility with XMLDBs that may not return lexigraphically identical documents --- src/main/java/com/c2kernel/process/Bootstrap.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/main/java/com/c2kernel/process/Bootstrap.java b/src/main/java/com/c2kernel/process/Bootstrap.java index a414059..ba2280c 100644 --- a/src/main/java/com/c2kernel/process/Bootstrap.java +++ b/src/main/java/com/c2kernel/process/Bootstrap.java @@ -4,6 +4,9 @@ import java.net.InetAddress; import java.util.Enumeration; import java.util.StringTokenizer; +import org.custommonkey.xmlunit.Diff; +import org.custommonkey.xmlunit.XMLUnit; + import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.TraceableEntity; import com.c2kernel.entity.proxy.ItemProxy; @@ -113,6 +116,7 @@ public class Bootstrap Logger.msg(1, "Bootstrap.verifyResource() - Verifying data of "+getDataType(itemType)+" "+itemName); Enumeration en = Gateway.getLDAPLookup().search(getTypeRoot(itemType), itemName); ItemProxy thisProxy; + Outcome newOutcome = new Outcome(0, data, getDataType(itemType), 0); if (!en.hasMoreElements()) { Logger.msg("Bootstrap.verifyResource() - "+getDataType(itemType)+" "+itemName+" not found. Creating new."); @@ -123,11 +127,18 @@ public class Bootstrap thisProxy = (ItemProxy)Gateway.getProxyManager().getProxy(path); try { Viewpoint currentData = (Viewpoint)thisProxy.getObject(ClusterStorage.VIEWPOINT+"/"+getDataType(itemType)+"/last"); - String oldData = currentData.getOutcome().getData(); - if (data.equals(oldData)) { + Outcome oldData = currentData.getOutcome(); + XMLUnit.setIgnoreWhitespace(true); + XMLUnit.setIgnoreComments(true); + Diff xmlDiff = new Diff(oldData.getDOM(), newOutcome.getDOM()); + if (xmlDiff.identical()) { Logger.msg(5, "Bootstrap.verifyResource() - Data identical, no update required"); return; } + else { + Logger.msg("Difference found in "+itemName+": "+xmlDiff.toString()); + } + } catch (ObjectNotFoundException ex) { Logger.error("Bootstrap.verifyResource() - Item exists but no data found! Attempting to insert new."); } @@ -136,7 +147,7 @@ public class Bootstrap Logger.msg("Bootstrap.verifyResource() - Writing new data to "+getDataType(itemType)+" "+itemName); History hist = new History(thisProxy.getSystemKey(), thisProxy); Event newEvent = hist.addEvent("system", "Admin", Transitions.DONE, "Import", "Import", "Import", States.FINISHED); - Outcome newOutcome = new Outcome(newEvent.getID(), data, getDataType(itemType), 0); + newOutcome.setID(newEvent.getID()); Viewpoint newLastView = new Viewpoint(thisProxy.getSystemKey(), getDataType(itemType), "last", 0, newEvent.getID()); Viewpoint newZeroView = new Viewpoint(thisProxy.getSystemKey(), getDataType(itemType), "0", 0, newEvent.getID()); Gateway.getStorage().put(thisProxy.getSystemKey(), newOutcome, thisProxy); -- cgit v1.2.3