Gotcha!

The API chapters wouldn’t be complete without letting you know about some problems that I frequently run into or that I’m asked about. Hopefully they’ll help save you some time, and maybe make your code more bug-proof. Read on, and see where JAXP catches folks these days.

Default Parsers and JAXP Implementations

It’s worth saying again: the implementation of JAXP determines the default parser. If you switch the JAXP implementation, you often end up switching the parser that is used, if you haven’t set any system properties for JAXP. Your classpath may have to change, or you will get all sorts of ClassNotFoundExceptions.

To avoid this problem completely, you could simply set the relevant JAXP system property to the parser factory you want to use, and regardless of what implementation you choose, you’ll get expected behavior. Or better yet, put a jaxp.properties file in the lib directory of your Java installation.[15] This file can be as simple as this:

javax.xml.parsers.SAXParserFactory	org.apache.xerces.XercesFactory

By changing the factory implementation, you change the parser wrapper that is returned from calls to newSAXParser( ). And lest you try the example file given, the org.apache.xerces.XercesFactory class doesn’t exist; it’s just for example purposes. It happened to fit within the confines of the code block!

Features on Factories, Properties on Parsers

One common mistake is to mix up factories and properties in the JAXP world. The best way to remember the correct application ...

Get Java and XML, Second Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.