Class DocumentComparator

java.lang.Object
org.jibx.extras.DocumentComparator

public class DocumentComparator extends Object
XML document comparator. This uses XMLPull parsers to read a pair of documents in parallel, comparing the streams of components seen from the two documents. The comparison ignores differences in whitespace separating elements, but in non-schema mode treats whitespace as significant within elements with only character data content.
Author:
Dennis M. Sosnoski
  • Field Details

    • m_parserA

      protected XmlPullParser m_parserA
      Parser for first document.
    • m_parserB

      protected XmlPullParser m_parserB
      Parser for second document.
    • m_differencePrint

      protected PrintStream m_differencePrint
      Print stream for reporting differences.
    • m_schemaCompare

      protected boolean m_schemaCompare
      Compare using schema data value adjustments flag.
  • Constructor Details

    • DocumentComparator

      public DocumentComparator(PrintStream print, boolean schema) throws XmlPullParserException
      Constructor with schema adjustments flag specified. Builds the actual parsers and sets up for comparisons.
      Parameters:
      print - print stream for reporting differences
      schema - use schema adjustments in comparisons flag
    • DocumentComparator

      public DocumentComparator(PrintStream print) throws XmlPullParserException
      Constructor. Builds the actual parser.
      Parameters:
      print - print stream for reporting differences
  • Method Details

    • buildPositionString

      protected static String buildPositionString(XmlPullParser parser)
      Build parse input position description.
      Parameters:
      parser - for which to build description
      Returns:
      text description of current parse position
    • buildName

      protected static String buildName(String ns, String name)
      Build name string.
      Parameters:
      ns - namespace URI
      name - local name
      Returns:
      printable names string
    • printError

      protected void printError(String msg)
      Prints error description text. The generated text include position information from both documents.
      Parameters:
      msg - error message text
    • isSchemaLocation

      private static boolean isSchemaLocation(String name, String ns)
      Check if a name/namespace pair matches a schema namespace location attribute.
      Parameters:
      name -
      ns -
      Returns:
      true if a schema namespace location, false if not
    • normalizeDecimal

      private static String normalizeDecimal(String text)
      Normalize a decimal value for comparison. A leading '+' sign is ignored, while a leading '-' is kept. If no non-zero digits are seen a "0" value is returned; otherwise, all significant digits are kept and returned (including a decimal point only if there are fraction digits)
      Parameters:
      text -
      Returns:
      normalized value
    • equalValues

      protected boolean equalValues(String texta, String textb)
      Check for equal values. If the schema compare flag is configured, this applies some basic schema rules in the comparisons, allowing '0' to match 'false' and '1' to match 'true', and comparing values using date or dateTime structure as decoded values.
      Parameters:
      texta -
      textb -
      Returns:
      true if values match, false if not
    • matchAttributes

      protected boolean matchAttributes()
      Verifies that the attributes on the current start tags match. Any mismatches are printed immediately.
      Returns:
      true if the attributes match, false if not
    • matchText

      protected boolean matchText(String texta, String textb, String lead)
      Check if two text strings match, ignoring leading and trailing spaces. Any mismatch is printed immediately, with the supplied lead text.
      Parameters:
      texta -
      textb -
      lead - error text lead
      Returns:
      true if the texts match, false if not
    • matchNames

      protected boolean matchNames()
      Verifies that the current start or end tag names match.
      Returns:
      true if the names match, false if not
    • compare

      public boolean compare(Reader rdra, Reader rdrb)
      Compares a pair of documents by reading them in parallel from a pair of parsers. The comparison ignores differences in whitespace separating elements, but treats whitespace as significant within elements with only character data content.
      Parameters:
      rdra - reader for first document to be compared
      rdrb - reader for second document to be compared
      Returns:
      true if the documents are the same, false if they're different