JAXP interface (transformation, XPath, schema processing)
It is now possible to set the Configuration used by a TransformerFactory
or DocumentBuilderFactory using the setAttribute() method with the attribute
name FeatureKeys.CONFIGURATION. By reading this attribute on a TransformerFactory,
and setting it on a DocumentBuilderFactory, it is possible to ensure that all documents
use the same Configuration without introducing any compile-time dependencies on Saxon.
A wider range of JAXP-defined options is now supported on the DocumentBuilderFactory interface.
For example, a request to perform XInclude processing is now accepted (though it will only work if the underlying
XML parser is Xerces).
It is now possible to provide a user-written URI resolver for use by the XSLT unparsed-text() function. This
must be an instance of net.sf.saxon.trans.UnparsedTextURIResolver, and it is set as a property of
the Controller object (Saxon's implementation of the JAXP Transformer). One use case for
this feature is to allow access to unparsed text files to be disabled when an untrusted stylesheet is run.
xsl:message
There have been some changes to the handling of xsl:message output in XSLT:
- The class nominated to
receive
xsl:messageoutput is no longer required to be an instance ofEmitter, it can now be any instance ofnet.sf.saxon.event.Receiver(of whichEmitteris a subclass, so existing code should still work). The sequence of calls to this Receiver has been clarified: there is a singleopen()call at the start of the transformation, and a singleclose()call at the end; and each evaluation of anxsl:messageinstruction starts with astartDocument()call and ends withendDocument(). ThestartDocument()event has apropertiesargument indicating whetherterminate="yes"was specified, and thelocationIdon calls such asstartElement()andcharacters()can be used to identify the location in the stylesheet where the message data originated (this is achieved by passing the suppliedlocationIdin a call togetPipelineConfiguration().getLocator().getSystemId(locationId), or togetLineNumber()on the same object). - A new class
net.sf.saxon.event.MessageWarnercan be selected for receiving message output; this class follows the JAXP specification by passing the message output to thewarning()method of the currentErrorListener, or to theerror()method ifterminate="yes"is specified. For backwards compatibility reasons this has not been made the default behavior.