System Programming Interfaces

The venerable and overgrown Controller class has been split into two: all functionality that applies to XSLT only has been moved into a subclass, XsltController. The transform() method (which at one time implemented the JAXP Transformer.transform() interface) has been dropped; instead the specific entry points such as XsltController.applyTemplates() and XsltController.callTemplate() must be used. These methods in turn have been changed so that they now deliver the raw result of the transformation (without the sequence normalization process that wraps the result into a document node). Any wrapping that is required is now performed in the s9api API layer (classes XsltTransformer and Xslt30Transformer), and is specific to the type of Destination supplied.

The Configuration class no longer has a finalize() method (because this is deprecated in Java 9). The only action of the finalize() method was to ensure that any log file was closed; an application that supplies a logger that needs closing is now responsible for ensuring that it is closed after use, which can be achieved if convenient by calling Configuration.close().

A number of key interfaces such as Sequence, SequenceIterator, Receiver, and NodeInfo now have default implementations of some of their methods, making it easier to define new implementations of these interfaces. In some cases this has led to removal of the static helper methods that previously were used to avoid code duplication.