diff options
| author | Andrew Branson <andrew.branson@cern.ch> | 2012-12-14 12:01:32 +0100 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2012-12-14 12:01:32 +0100 |
| commit | 82a3a75cf8045a638e0dcd90dcff39a67609bc68 (patch) | |
| tree | 6fb121cd8fc8d5607dac1b67eb7e757bf90cd1bb | |
| parent | 92f7cb40b6ca1917bb351e6092ef8bf8c975791d (diff) | |
Use XMLUnit XML Diff to compare system resources, for compatibility with
XMLDBs that may not return lexigraphically identical documents
| -rw-r--r-- | pom.xml | 9 | ||||
| -rw-r--r-- | src/main/java/com/c2kernel/process/Bootstrap.java | 17 |
2 files changed, 23 insertions, 3 deletions
@@ -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);
|
