package controllers; import java.io.IOException; import java.util.List; import java.util.Map; import org.custommonkey.xmlunit.DetailedDiff; import org.custommonkey.xmlunit.Diff; import org.custommonkey.xmlunit.XMLUnit; import org.xml.sax.SAXException; import play.libs.Json; import play.mvc.Controller; import play.mvc.Result; import com.fasterxml.jackson.databind.node.ObjectNode; public class ComparisonHandler extends Controller { public static Result compareXML() { final Map<String, String[]> post = request().body().asFormUrlEncoded(); String expected = post.get("expected")[0]; String actual = post.get("actual")[0]; System.out.println(expected); System.out.println(actual); ObjectNode returnJson = Json.newObject(); if (expected.equals(actual)) { returnJson.put("similarity", "100%"); } else { returnJson.put("similarity", "not 100%"); } return ok(returnJson); } public static Result compareWithXMLUnit() { /** * Process request */ final Map<String, String[]> jsonReceived = request().body() .asFormUrlEncoded(); String expected = jsonReceived.get("expected")[0]; String actual = jsonReceived.get("actual")[0]; /** * The returning object */ ObjectNode returnJson = Json.newObject(); /** * Setup the eval conditions */ String evalResult = "not evaluated"; setupXMLUnit(); Diff d; DetailedDiff dd; try { d = new Diff(expected, actual); dd = new DetailedDiff(d); dd.overrideElementQualifier(null); if (dd.identical()) { evalResult = "identical"; } else if (dd.similar()) { evalResult = "similar but not identical"; printDifferences(dd); } else { evalResult = "not similar"; printDifferences(dd); } } catch (SAXException e) { evalResult = "failed to test, malformed XML"; e.printStackTrace(); return ok(returnJson.put("similarity", evalResult)); } catch (IOException e) { evalResult = "failed to test, IO Exception"; e.printStackTrace(); return ok(returnJson.put("similarity", evalResult)); } finally { returnJson.put("similarity", evalResult); System.out.print("Evaluation Result: " + evalResult); } return ok(returnJson); } private static void printDifferences(DetailedDiff dd) { System.out.println("Differences: "); @SuppressWarnings("rawtypes") List l = dd.getAllDifferences(); for (Object object : l) { System.out.println(object); } } private static void setupXMLUnit() { XMLUnit.setCompareUnmatched(false); XMLUnit.setExpandEntityReferences(true); XMLUnit.setIgnoreComments(false); XMLUnit.setIgnoreAttributeOrder(true); XMLUnit.setIgnoreDiffBetweenTextAndCDATA(true); XMLUnit.setIgnoreWhitespace(true); XMLUnit.setNormalize(true); XMLUnit.setNormalizeWhitespace(false); } }