JAXP interface (transformation, XPath, schema processing)
The ability to configure Saxon to use DOM Level 2 (the default is 3) at the configuration level is removed. It is retained at the level of the DOM DocumentWrapper, though it has not been tested for some time.
The JAXP Transformation API (also known as Trax) has been re-implemented as a layer on top of s9api.
The implementation classes are now in package
net.sf.saxon.jaxp, though the
factory class names are unchanged.
The internal redesign may affect applications that "down-cast" from the JAXP interfaces to
the Saxon implementation classes. For example, casting a JAXP
net.sf.saxon.Controller will no longer work. The implementation classes remain
available via getter methods, so it should always be possible to convert such code so it
continues to work. For example, if you need to get the
Controller, you can cast
net.sf.saxon.jaxp.TransformerImpl, and then call the method
The reason for this redesign is so that core classes such as
PreparedStyleSheet are no longer constrained to implement JAXP interfaces,
which is increasingly unviable as the limitations of the XSLT 1.0 processing model become
clearer. For example, it opens the door to a redesign to accommodate XSLT 3.0 packages.
Controller no longer needs to implement the JAXP
Transformer interface, it has been possible to drop some of its methods, for
example the weakly-typed versions of the methods for setting parameter values, such methods
now require the supplied value to be a
Sequence. Similarly, the
Controller no longer has methods for setting and getting output properties.
In the JAXP XPath interface, various Saxon extensions (mostly deprecated methods) have been dropped, reflecting the fact that this interface is provided only for compatibility reasons, and applications requiring full use of Saxon functionality should be using the s9api interface.
Replacing the use of the JAXP
ErrorListener class proved too difficult, but most
classes now use an
UnfailingErrorListener, which is a subclass of
ErrorListener that throws no exceptions. This has enabled the removal of a lot
of superfluous error-catching code.
SchemaException class, used to report errors in a schema, now has
TransformerException rather than
as its base class. The main reason to extend
TransformerException is so that the
exception can be passed to a JAXP
The error handling in the JAXP
ValidatorHandler implementations has been changed to conform to the way it is
defined in the JAXP specifications. The default
ErrorHandler is now "null", which
gives draconian error handling (any validation error is fatal and causes immediate
ErrorHandler may also be set explicitly to "null", with the
same meaning. Any
ErrorHandler supplied to the
SchemaFactory is used
only during schema processing, and is not inherited by
ValidatorHandler for use during instance validation; nor does it modify the
ErrorListener registered with the
The Saxon JAR files no longer include the XPath service file causing them to be recognized by
XPathFactory search. Applications that use this search mechanism are
generally looking for an XPath 1.0 processor and can fail simply because Saxon is on the
classpath, which then gets reported as a Saxon problem. The JAXP interface to XPath remains
available (despite its many limitations), but the
XPathFactory must be