SAX2: org.xml.sax.helpers.SAXUtils

Miles Sabin msabin at
Tue Jan 18 18:06:13 GMT 2000

Jim Layer wrote,
> A public, standard mechanism (widely supported as is SAX) to 
> acquire a parser by feature, would appear to at least 
> mitigate, if not eliminate, this bit of inelegance.


Agreed. Over the weekend I put together a trial implementation 
of the proposal I made at,

with support for query by feature.

Roughly speaking it looks like,

  public interface XMLReaderImplementation
    // Does this implementation support
    // the given feature in the given enabled/disabled state
    public boolean supportsFeature
      (String name, boolean state);

    // Create an instance of this implementation
    public XMLReader createReader();

  public class XMLReaderImplementations
    // Create a default reader
    XMLReader createReader();

    // Create a reader which supports the given
    // features in the enabled state
    XMLReader createReader(String[] featuresWanted);

    // Create a reader which supports the given
    // features in the enabled/disabled state 
    XMLReader createReader
      (String[] featuresWanted, String[] featuresNotWanted);

    // Get the default implementation
    XMLReaderImplementation getImplementation();

    // Get an implementation which supports the
    // given features in the enabled state
    XMLReaderImplementation getImplementation
      (String[] featuresWanted);

    // Get an implementation which supports
    // given features in the enabled/disabled state
    XMLReaderImplementation getImplementation
      (String[] featuresWanted, String[] featuresNotWanted)

    // Return an Enumeration of all the
    // XMLReaderImplementations on the CLASSPATH
    Enumeration implementations();

So, if you want an XMLReader that supports validation you
can do,

  XMLReader r = XMLReaderImplementations.
    createReader("whatever the validation feature string is");

If you need to do more complex querying of the capabilities
of the installed parsers you can do,

  Enumeration impls =

    XMLReaderImplementation impl =

    if( ... impl ...) // some complex condition

    // etc.

The XMLReaderImplementation interface is needed because
otherwise we'd have to instantiate a reader _before_ being
able to test it's features ... to decide if we want to
instantiate it. And if you want to create more than one
instance of a particular type of parser you can hang onto the
XMLReaderImplementation and reuse it, rather then repeating
the query.

As described in my proposal, it's completely plug-n-play: no
more mucking about with -Dorg.xml.sax.parser=, just put the
parser on the CLASSPATH and it's available.

David has a copy ... anyone else interested should mail me.

Nb. it's _only_ an implementation of the factory/query stuff ...
the rest of SAX2 is skeletons only.



Miles Sabin                       Cromwell Media
Internet Systems Architect        5/6 Glenthorne Mews
+44 (0)20 8817 4030               London, W6 0LJ, England
msabin at

xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at
Archived as: or CD-ROM/ISBN 981-02-3594-1
Please note: New list subscriptions now closed in preparation for transfer to OASIS.

More information about the Xml-dev mailing list