summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Branson <andrew.branson@cern.ch>2012-12-14 12:01:32 +0100
committerAndrew Branson <andrew.branson@cern.ch>2012-12-14 12:01:32 +0100
commit82a3a75cf8045a638e0dcd90dcff39a67609bc68 (patch)
tree6fb121cd8fc8d5607dac1b67eb7e757bf90cd1bb
parent92f7cb40b6ca1917bb351e6092ef8bf8c975791d (diff)
Use XMLUnit XML Diff to compare system resources, for compatibility with
XMLDBs that may not return lexigraphically identical documents
-rw-r--r--pom.xml9
-rw-r--r--src/main/java/com/c2kernel/process/Bootstrap.java17
2 files changed, 23 insertions, 3 deletions
diff --git a/pom.xml b/pom.xml
index fafd186..e9c34c0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,6 +37,10 @@
<groupId>com.novell.ldap</groupId>
<artifactId>jldap</artifactId>
</dependency>
+ <dependency>
+ <groupId>xmlunit</groupId>
+ <artifactId>xmlunit</artifactId>
+ </dependency>
</dependencies>
<dependencyManagement>
<dependencies>
@@ -66,6 +70,11 @@
<artifactId>jldap</artifactId>
<version>4.3</version>
</dependency>
+ <dependency>
+ <groupId>xmlunit</groupId>
+ <artifactId>xmlunit</artifactId>
+ <version>1.3</version>
+ </dependency>
</dependencies>
</dependencyManagement>
<build>
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<Path> 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);