At this point, the time spent on verification had dropped by about a factor of four, and was no longer a huge concern. Version 3 is essentially what shipped in JDOM 1.0. However, by this point I had decided that JDOM was not good enough, and suspected that I could do better. My defection had more to do with issues of API design than with performance. I was also concerned with correctness, since JDOM still wasn't verifying everything it could, and it was still possible (though difficult) to use JDOM to create malformed documents. Consequently, I embarked on XOM.
XOM, unlike JDOM, made no compromises on correctness in the name of performance. The rule in XOM was that correctness came first, always. Nonetheless, for people to choose XOM over JDOM, its performance was going to have to be comparable to or better than that of JDOM. Thus, it was time to take another whack at the verification problem.
The optimization efforts of JDOM version 3 had improved the
performance of the
method, but I hoped to eliminate it completely in this next
optimization. The reason for this is that you don't always need to check
the XML input if it's coming from a known good source. In
particular, an XML parser carries out many of the necessary checks
before the input reaches the XML verifier, and there's no reason to
duplicate this work. Because the constructors always checked for correctness, they caused a real drain on parsing speed performance, ...