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 PrintStream
Print stream for reporting differences.protected XmlPullParser
Parser for first document.protected XmlPullParser
Parser for second document.protected boolean
Compare 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 String
Build name string.protected static String
buildPositionString
(XmlPullParser parser) Build parse input position description.boolean
Compares a pair of documents by reading them in parallel from a pair of parsers.protected boolean
equalValues
(String texta, String textb) Check for equal values.private static boolean
isSchemaLocation
(String name, String ns) Check if a name/namespace pair matches a schema namespace location attribute.protected boolean
Verifies that the attributes on the current start tags match.protected boolean
Verifies that the current start or end tag names match.protected boolean
Check if two text strings match, ignoring leading and trailing spaces.private static String
normalizeDecimal
(String text) Normalize a decimal value for comparison.protected void
printError
(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:
true
if a schema namespace location,false
if 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:
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
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
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:
true
if the documents are the same,false
if they're different
-