Package org.jibx.extras
Class DocumentComparator
java.lang.Object
org.jibx.extras.DocumentComparator
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 Summary
FieldsModifier and TypeFieldDescriptionprotected PrintStreamPrint stream for reporting differences.protected XmlPullParserParser for first document.protected XmlPullParserParser for second document.protected booleanCompare using schema data value adjustments flag. -
Constructor Summary
ConstructorsConstructorDescriptionDocumentComparator(PrintStream print) Constructor.DocumentComparator(PrintStream print, boolean schema) Constructor with schema adjustments flag specified. -
Method Summary
Modifier and TypeMethodDescriptionprotected static StringBuild name string.protected static StringbuildPositionString(XmlPullParser parser) Build parse input position description.booleanCompares a pair of documents by reading them in parallel from a pair of parsers.protected booleanequalValues(String texta, String textb) Check for equal values.private static booleanisSchemaLocation(String name, String ns) Check if a name/namespace pair matches a schema namespace location attribute.protected booleanVerifies that the attributes on the current start tags match.protected booleanVerifies that the current start or end tag names match.protected booleanCheck if two text strings match, ignoring leading and trailing spaces.private static StringnormalizeDecimal(String text) Normalize a decimal value for comparison.protected voidprintError(String msg) Prints error description text.
-
Field Details
-
m_parserA
protected XmlPullParser m_parserAParser for first document. -
m_parserB
protected XmlPullParser m_parserBParser for second document. -
m_differencePrint
Print stream for reporting differences. -
m_schemaCompare
protected boolean m_schemaCompareCompare using schema data value adjustments flag.
-
-
Constructor Details
-
DocumentComparator
Constructor with schema adjustments flag specified. Builds the actual parsers and sets up for comparisons.- Parameters:
print- print stream for reporting differencesschema- use schema adjustments in comparisons flag
-
DocumentComparator
Constructor. Builds the actual parser.- Parameters:
print- print stream for reporting differences
-
-
Method Details
-
buildPositionString
Build parse input position description.- Parameters:
parser- for which to build description- Returns:
- text description of current parse position
-
buildName
Build name string.- Parameters:
ns- namespace URIname- local name- Returns:
- printable names string
-
printError
Prints error description text. The generated text include position information from both documents.- Parameters:
msg- error message text
-
isSchemaLocation
Check if a name/namespace pair matches a schema namespace location attribute.- Parameters:
name-ns-- Returns:
trueif a schema namespace location,falseif not
-
normalizeDecimal
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
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:
trueif values match,falseif not
-
matchAttributes
protected boolean matchAttributes()Verifies that the attributes on the current start tags match. Any mismatches are printed immediately.- Returns:
trueif the attributes match,falseif not
-
matchText
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:
trueif the texts match,falseif not
-
matchNames
protected boolean matchNames()Verifies that the current start or end tag names match.- Returns:
trueif the names match,falseif not
-
compare
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 comparedrdrb- reader for second document to be compared- Returns:
trueif the documents are the same,falseif they're different
-