Loading tools/XmlDiff/src/org/etsi/mts/ttcn/part9/xmldiff/DiffErrorHandler.java +3 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ public class DiffErrorHandler implements ErrorHandler { errors.add(err); appendDescripion(err); hasErrors = true; XmlDiff.logger.warning("Fatal error while parsing: ", err.getMessage()); } @Override Loading @@ -49,6 +50,7 @@ public class DiffErrorHandler implements ErrorHandler { errors.add(err); appendDescripion(err); hasErrors = true; XmlDiff.logger.warning("Error while parsing: ", err.getMessage()); } private synchronized void appendDescripion(Throwable err) { Loading @@ -59,6 +61,7 @@ public class DiffErrorHandler implements ErrorHandler { @Override public void warning(SAXParseException warn) throws SAXException { warnings.add(warn); XmlDiff.logger.warning("Error while parsing: ", warn.getMessage()); } /************************************************************ Loading tools/XmlDiff/src/org/etsi/mts/ttcn/part9/xmldiff/LogUtil.java 0 → 100644 +63 −0 Original line number Diff line number Diff line package org.etsi.mts.ttcn.part9.xmldiff; import java.util.logging.Level; import java.util.logging.LogRecord; import java.util.logging.Logger; public class LogUtil { public final Logger logger; public LogUtil(Logger logger) { super(); this.logger = logger; } private void _log(Level lvl, Object... args) { if (!logger.isLoggable(lvl)) return; StringBuilder msg = new StringBuilder(); StackTraceElement[] trace = Thread.currentThread().getStackTrace(); StackTraceElement caller = null; if (trace.length > 3) { caller = trace[3]; } if (caller != null) { msg.append(caller.getFileName()).append(':'); msg.append(caller.getLineNumber()).append(':'); // msg.append(caller.getClassName()).append(':'); // msg.append(caller.getMethodName()).append(':'); } for (Object arg : args) { msg.append(arg); } LogRecord record = new LogRecord(lvl, msg.toString()); if (caller != null) { record.setSourceClassName(caller.getClassName()); record.setSourceMethodName(caller.getMethodName()); } logger.log(record); } public void severe(Object... args) { _log(Level.SEVERE, args); } public void warning(Object... args) { _log(Level.WARNING, args); } public void config(Object... args) { _log(Level.CONFIG, args); } public void info(Object... args) { _log(Level.INFO, args); } public void debug(Object... args) { _log(Level.FINE, args); } public void debug2(Object... args) { _log(Level.FINER, args); } public void debug3(Object... args) { _log(Level.FINEST, args); } } tools/XmlDiff/src/org/etsi/mts/ttcn/part9/xmldiff/XmlDiff.java +42 −2 Original line number Diff line number Diff line Loading @@ -12,6 +12,9 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.Logger; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; Loading Loading @@ -39,6 +42,20 @@ import org.xml.sax.SAXException; * */ public class XmlDiff { public static LogUtil logger = null; static { logger = new LogUtil(Logger.getLogger("org.etsi.mts.ttcn.part9.xmldiff")); try { FileHandler fh = new FileHandler("XmlDiff.log", true); fh.setLevel(Level.INFO); logger.logger.addHandler(fh); } catch (SecurityException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static class IgnoreSchemePrefix implements DifferenceListener { @Override public int differenceFound(Difference difference) { Loading @@ -46,8 +63,12 @@ public class XmlDiff { if (id == DifferenceEngine.NAMESPACE_PREFIX_ID /*|| id == DifferenceEngine.NAMESPACE_URI_ID */ ) { logger.debug3("Difference ignored: Namespace prefix ID", difference.getDescription()); return RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; } logger.debug3("Difference accepted: Namespace prefix ID", difference.getDescription()); return RETURN_ACCEPT_DIFFERENCE; } Loading Loading @@ -94,9 +115,11 @@ public class XmlDiff { public XmlDiff(File file, String[] xsdFileNames, String[] xsdSearchPath) { this.referenceXmlFile = file; if (!this.referenceXmlFile.exists()) { logger.severe("No such file: ", this.referenceXmlFile.getAbsolutePath()); throw new IllegalArgumentException("No such file: " + this.referenceXmlFile.getAbsolutePath()); } if (!this.referenceXmlFile.canRead()) { logger.severe("Can't read: ", this.referenceXmlFile.getAbsolutePath()); throw new IllegalArgumentException("Can't read: " + this.referenceXmlFile.getAbsolutePath()); } Loading @@ -110,6 +133,7 @@ public class XmlDiff { missing = findXsdFiles(xsdFileNames, xsdSearchPath); if (missing != null) { logger.severe("Missing XSD files " + missing + " in search path " + Arrays.toString(xsdSearchPath)); throw new IllegalArgumentException("Missing XSD files " + missing + " in search path " + Arrays.toString(xsdSearchPath)); } Loading @@ -125,18 +149,32 @@ public class XmlDiff { * @throws XmlDiffError if an error occurs before or during diffing */ public boolean diff(String input, StringBuilder diffDetails) throws XmlDiffError { logger.debug("Looking for difference: reference file ", referenceXmlFile, ", input {", input, "}"); InputStream stream; try { stream = new FileInputStream(referenceXmlFile); } catch (FileNotFoundException e) { logger.severe("File not found: ", referenceXmlFile.getAbsolutePath()); throw new XmlDiffError(e); } Reader rd = new InputStreamReader(stream, StandardCharsets.UTF_8); StringReader inputReader = new StringReader(input); return diff(rd, inputReader, diffDetails); boolean v = diff(rd, inputReader, diffDetails); if (!v) { logger.info("Compared reference file ", referenceXmlFile, " with input {", input, "}, found differences ", diffDetails); } else { logger.debug("No differences found between reference file ", referenceXmlFile, " and input {", input, "}"); } return v; } public boolean diff(Reader input, StringBuilder diffDetails) throws XmlDiffError { /** Created for debugging purposes * @param input * @param diffDetails * @return * @throws XmlDiffError */ boolean diff(Reader input, StringBuilder diffDetails) throws XmlDiffError { InputStream stream; try { stream = new FileInputStream(referenceXmlFile); Loading Loading @@ -246,9 +284,11 @@ public class XmlDiff { private Document parseXml(Reader inReader, String kind) throws SAXException, IOException, XmlDiffError { DocumentBuilder parser; logger.debug2("Parse ", kind); try { parser = xmlParserFactory.newDocumentBuilder(); } catch (ParserConfigurationException e) { logger.severe("Failed to setup a parser for ", kind, ": ", e.getMessage()); throw new RuntimeException("Internal error: failed to create an XML parser", e); } parser.setErrorHandler(errorHandler); Loading Loading
tools/XmlDiff/src/org/etsi/mts/ttcn/part9/xmldiff/DiffErrorHandler.java +3 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ public class DiffErrorHandler implements ErrorHandler { errors.add(err); appendDescripion(err); hasErrors = true; XmlDiff.logger.warning("Fatal error while parsing: ", err.getMessage()); } @Override Loading @@ -49,6 +50,7 @@ public class DiffErrorHandler implements ErrorHandler { errors.add(err); appendDescripion(err); hasErrors = true; XmlDiff.logger.warning("Error while parsing: ", err.getMessage()); } private synchronized void appendDescripion(Throwable err) { Loading @@ -59,6 +61,7 @@ public class DiffErrorHandler implements ErrorHandler { @Override public void warning(SAXParseException warn) throws SAXException { warnings.add(warn); XmlDiff.logger.warning("Error while parsing: ", warn.getMessage()); } /************************************************************ Loading
tools/XmlDiff/src/org/etsi/mts/ttcn/part9/xmldiff/LogUtil.java 0 → 100644 +63 −0 Original line number Diff line number Diff line package org.etsi.mts.ttcn.part9.xmldiff; import java.util.logging.Level; import java.util.logging.LogRecord; import java.util.logging.Logger; public class LogUtil { public final Logger logger; public LogUtil(Logger logger) { super(); this.logger = logger; } private void _log(Level lvl, Object... args) { if (!logger.isLoggable(lvl)) return; StringBuilder msg = new StringBuilder(); StackTraceElement[] trace = Thread.currentThread().getStackTrace(); StackTraceElement caller = null; if (trace.length > 3) { caller = trace[3]; } if (caller != null) { msg.append(caller.getFileName()).append(':'); msg.append(caller.getLineNumber()).append(':'); // msg.append(caller.getClassName()).append(':'); // msg.append(caller.getMethodName()).append(':'); } for (Object arg : args) { msg.append(arg); } LogRecord record = new LogRecord(lvl, msg.toString()); if (caller != null) { record.setSourceClassName(caller.getClassName()); record.setSourceMethodName(caller.getMethodName()); } logger.log(record); } public void severe(Object... args) { _log(Level.SEVERE, args); } public void warning(Object... args) { _log(Level.WARNING, args); } public void config(Object... args) { _log(Level.CONFIG, args); } public void info(Object... args) { _log(Level.INFO, args); } public void debug(Object... args) { _log(Level.FINE, args); } public void debug2(Object... args) { _log(Level.FINER, args); } public void debug3(Object... args) { _log(Level.FINEST, args); } }
tools/XmlDiff/src/org/etsi/mts/ttcn/part9/xmldiff/XmlDiff.java +42 −2 Original line number Diff line number Diff line Loading @@ -12,6 +12,9 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.Logger; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; Loading Loading @@ -39,6 +42,20 @@ import org.xml.sax.SAXException; * */ public class XmlDiff { public static LogUtil logger = null; static { logger = new LogUtil(Logger.getLogger("org.etsi.mts.ttcn.part9.xmldiff")); try { FileHandler fh = new FileHandler("XmlDiff.log", true); fh.setLevel(Level.INFO); logger.logger.addHandler(fh); } catch (SecurityException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static class IgnoreSchemePrefix implements DifferenceListener { @Override public int differenceFound(Difference difference) { Loading @@ -46,8 +63,12 @@ public class XmlDiff { if (id == DifferenceEngine.NAMESPACE_PREFIX_ID /*|| id == DifferenceEngine.NAMESPACE_URI_ID */ ) { logger.debug3("Difference ignored: Namespace prefix ID", difference.getDescription()); return RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; } logger.debug3("Difference accepted: Namespace prefix ID", difference.getDescription()); return RETURN_ACCEPT_DIFFERENCE; } Loading Loading @@ -94,9 +115,11 @@ public class XmlDiff { public XmlDiff(File file, String[] xsdFileNames, String[] xsdSearchPath) { this.referenceXmlFile = file; if (!this.referenceXmlFile.exists()) { logger.severe("No such file: ", this.referenceXmlFile.getAbsolutePath()); throw new IllegalArgumentException("No such file: " + this.referenceXmlFile.getAbsolutePath()); } if (!this.referenceXmlFile.canRead()) { logger.severe("Can't read: ", this.referenceXmlFile.getAbsolutePath()); throw new IllegalArgumentException("Can't read: " + this.referenceXmlFile.getAbsolutePath()); } Loading @@ -110,6 +133,7 @@ public class XmlDiff { missing = findXsdFiles(xsdFileNames, xsdSearchPath); if (missing != null) { logger.severe("Missing XSD files " + missing + " in search path " + Arrays.toString(xsdSearchPath)); throw new IllegalArgumentException("Missing XSD files " + missing + " in search path " + Arrays.toString(xsdSearchPath)); } Loading @@ -125,18 +149,32 @@ public class XmlDiff { * @throws XmlDiffError if an error occurs before or during diffing */ public boolean diff(String input, StringBuilder diffDetails) throws XmlDiffError { logger.debug("Looking for difference: reference file ", referenceXmlFile, ", input {", input, "}"); InputStream stream; try { stream = new FileInputStream(referenceXmlFile); } catch (FileNotFoundException e) { logger.severe("File not found: ", referenceXmlFile.getAbsolutePath()); throw new XmlDiffError(e); } Reader rd = new InputStreamReader(stream, StandardCharsets.UTF_8); StringReader inputReader = new StringReader(input); return diff(rd, inputReader, diffDetails); boolean v = diff(rd, inputReader, diffDetails); if (!v) { logger.info("Compared reference file ", referenceXmlFile, " with input {", input, "}, found differences ", diffDetails); } else { logger.debug("No differences found between reference file ", referenceXmlFile, " and input {", input, "}"); } return v; } public boolean diff(Reader input, StringBuilder diffDetails) throws XmlDiffError { /** Created for debugging purposes * @param input * @param diffDetails * @return * @throws XmlDiffError */ boolean diff(Reader input, StringBuilder diffDetails) throws XmlDiffError { InputStream stream; try { stream = new FileInputStream(referenceXmlFile); Loading Loading @@ -246,9 +284,11 @@ public class XmlDiff { private Document parseXml(Reader inReader, String kind) throws SAXException, IOException, XmlDiffError { DocumentBuilder parser; logger.debug2("Parse ", kind); try { parser = xmlParserFactory.newDocumentBuilder(); } catch (ParserConfigurationException e) { logger.severe("Failed to setup a parser for ", kind, ": ", e.getMessage()); throw new RuntimeException("Internal error: failed to create an XML parser", e); } parser.setErrorHandler(errorHandler); Loading