Class Controller
- All Implemented Interfaces:
InstructionInfoProvider
- Direct Known Subclasses:
IdentityTransformer
The Controller is serially reusable, as required by JAXP: when one transformation or query is finished, it can be used to run another. However, there is no advantage in doing this rather than allocating a new Controller each time.
The Controller can also be used when running Java applications that use neither XSLT nor XQuery. A dummy Controller is created when running free-standing XPath expressions.
The Controller holds those parts of the dynamic context that do not vary during the course of a transformation or query, or that do not change once their value has been computed. This also includes those parts of the static context that are required at run-time.
Wherever possible XSLT applications should use the JAXP Transformer class directly, rather than relying on Saxon-specific methods in the Controller. However, some features are currently available only through this class. This applies especially to new features specific to XSLT 2.0, since the JAXP interface still supports only XSLT 1.0. Such methods may be superseded in the future by JAXP methods.
Many methods on the Controller are designed for internal use and should not be considered stable. From release 8.4 onwards, those methods that are considered sufficiently stable to constitute path of the Saxon public API are labelled with the JavaDoc tag "since": the value indicates the release at which the method was added to the public API.
- Since:
- 8.4
- Author:
- Michael H. Kay
-
Constructor Summary
ConstructorsConstructorDescriptionController
(Configuration config) Create a Controller and initialise variables.Controller
(Configuration config, Executable executable) Create a Controller and initialise variables. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addTraceListener
(TraceListener trace) Adds the specified trace listener to receive trace events from this instance.void
Add a URI to the set of output destinations that cannot be written to, either because they have already been written to, or because they have been readallocateSequenceOutputter
(int size) Allocate a SequenceOutputter for a new output destination.void
Check whether an XSLT implicit result tree can be written.boolean
Check that an output destination has not been used before, optionally adding this URI to the set of URIs that have been used.void
Clear the document pool.void
Reset the parameters to a null list.void
defineGlobalParameters
(Bindery bindery) Define the global parameters of the transformation or query.Get the base output URI.Get the current bindery.Get the ClassLoader supplied using the methodsetClassLoader(java.lang.ClassLoader)
.Get the Configuration associated with this Controller.Get the item used as the context for evaluating global variables.Get the current date and time for this query or transformation.Get the document pool.Get the error listener.Get the Executable object.Get the initial context item.Get the initial mode for the transformationGet the initial templateGet diagnostic information about this context.Get the KeyManager.Get the Emitter used for xsl:message output.Get the name pool in use.Get the output properties for the transformation.getOutputProperty
(String name) Get the value of an output property.Get the output URI resolver.getParameter
(String expandedName) Get a parameter to the transformation.Get the principal result destination.Deprecated.int
Get the policy for handling recoverable errorsint
getRememberedNumber
(NodeInfo node) Get the number of a node if it is the last remembered one.Get the Rule Manager.Get the fallback URI resolver.Get the TraceListener.Get the URI resolver.getUserData
(Object key, String name) Get user data associated with a key.void
Initialize the controller ready for a new transformation.final boolean
Test whether instruction execution is being traced.boolean
Determine whether an output URI is available for use.Make a builder for the selected tree model.makeCharacterMapExpander
(String useMaps, SerializerFactory sf) Make a CharacterMapExpander to handle the character map definitions in the serialization properties.Make an Emitter to be used for xsl:message output.Make a PipelineConfiguration based on the properties of this Controller.Make a Stripper configured to implement the whitespace stripping rules.Make an XPathContext object for expression evaluation.final void
pauseTracing
(boolean pause) Pause or resume tracing.void
preEvaluateGlobals
(XPathContext context) Pre-evaluate global variables (when debugging/tracing).prepareInputTree
(Source source) Prepare an input tree for processing.prepareNextStylesheet
(String href, String baseURI, Result result) Prepare another stylesheet to handle the output of this one.void
Report a recoverable error.void
registerDocument
(DocumentInfo doc, String systemId) Add a document to the document pool.void
removeTraceListener
(TraceListener trace) Removes the specified trace listener so that the listener will no longer receive trace events.void
Report a fatal errorvoid
reset()
Reset thisTransformer
to its original configuration.void
Accept a SequenceOutputter that is now available for reusevoid
setBaseOutputURI
(String uri) Set the base output URI.void
setClassLoader
(ClassLoader loader) Set a ClassLoader to be used when loading external classes.void
setCurrentDateTime
(DateTimeValue dateTime) Set the current date and time for this query or transformation.void
setErrorListener
(ErrorListener listener) Set the error listener.void
setExecutable
(Executable exec) Associate this Controller with an Executable.void
setInitialContextItem
(Item item) Set the initial context item.void
setInitialMode
(String expandedModeName) Set the initial mode for the transformation.void
setInitialTemplate
(String expandedName) Set the initial named template to be used as the entry point.void
setMessageEmitter
(Emitter emitter) Set the Emitter to be used for xsl:message output.void
setOutputProperties
(Properties properties) Set the output properties for the transformation.void
setOutputProperty
(String name, String value) Set an output property for the transformation.void
setOutputURIResolver
(OutputURIResolver resolver) Set the URI resolver for secondary output documents.void
setParameter
(String expandedName, Object value) Set a parameter for the transformation.void
Associate this Controller with a compiled stylesheet.void
Deprecated.From Saxon 8.7, replaced bysetInitialContextItem(Item)
void
setRecoveryPolicy
(int policy) Set the policy for handling recoverable errrorsvoid
setRememberedNumber
(NodeInfo node, int number) Set the last remembered node, for node numbering purposes.void
Set the RuleManager, used to manage template rules for each mode.void
setTreeModel
(int model) Set the tree data model to use.void
setURIResolver
(URIResolver resolver) Set an object that will be used to resolve URIs used in document(), etc.void
setUserData
(Object key, String name, Object data) Set user data associated with a key.void
Perform a transformation from a Source document to a Result document.void
transformDocument
(NodeInfo startNode, Result result) Transform a source XML document supplied as a tree.static NodeInfo
unravel
(Source source, Configuration config) Get a NodeInfo corresponding to a DOM Node, either by wrapping or unwrapping the DOM Node.
-
Constructor Details
-
Controller
Create a Controller and initialise variables. Constructor is protected, the Controller should be created using newTransformer() in the PreparedStylesheet class.- Parameters:
config
- The Configuration used by this Controller
-
Controller
Create a Controller and initialise variables. Constructor is protected, the Controller should be created using newTransformer() in the PreparedStylesheet class.- Parameters:
config
- The Configuration used by this Controllerexecutable
- The executable used by this Controller
-
-
Method Details
-
reset
public void reset()Reset this
Transformer
to its original configuration.Transformer
is reset to the same state as when it was created withTransformerFactory.newTransformer()
,TransformerFactory.newTransformer(javax.xml.transform.Source source)
orTemplates.newTransformer()
.reset()
is designed to allow the reuse of existingTransformer
s thus saving resources associated with the creation of newTransformer
s.The above is from the JAXP specification. With Saxon, it's unlikely that reusing a Transformer will give any performance benefits over creating a new one. The one case where it might be beneficial is to reuse the document pool (the set of documents that have been loaded using the doc() or document() functions). Therefore, this method does not clear the document pool. If you want to clear the document pool, call the method
clearDocumentPool()
as well.The reset
Transformer
is not guaranteed to have the sameURIResolver
orErrorListener
Object
s, e.g.Object.equals(Object obj)
. It is guaranteed to have a functionally equalURIResolver
andErrorListener
.- Overrides:
reset
in classTransformer
- Since:
- 1.5
-
getConfiguration
Get the Configuration associated with this Controller. The Configuration holds settings that potentially apply globally to many different queries and transformations.- Returns:
- the Configuration object
- Since:
- 8.4
-
setInitialMode
Set the initial mode for the transformation.XSLT 2.0 allows a transformation to be started in a mode other than the default mode. The transformation then starts by looking for the template rule in this mode that best matches the initial context node.
This method may eventually be superseded by a standard JAXP method.
- Parameters:
expandedModeName
- the name of the initial mode. The mode is supplied as an expanded QName, that is "localname" if there is no namespace, or "{uri}localname" otherwise- Since:
- 8.4
-
getInitialMode
Get the initial mode for the transformation- Returns:
- the initial mode, as a name in Clark format
-
setOutputProperties
Set the output properties for the transformation. These properties will override properties set in the templates with xsl:output.As well as the properties defined in the JAXP OutputKeys class, Saxon defines an additional set of properties in
SaxonOutputKeys
. These fall into two categories: Constants representing serialization properties defined in XSLT 2.0 (which are not yet supported by JAXP), and constants supporting Saxon extensions to the set of serialization properties.- Specified by:
setOutputProperties
in classTransformer
- Parameters:
properties
- the output properties to be used for the transformation. If the value is null, the properties are reset to be the properties of the Templates object (that is, for XSLT 2.0, the properties set in the unnamed xsl:output object).- Throws:
IllegalArgumentException
- if any of the properties are invalid (other than properties in a user-defined namespace)- Since:
- 8.4
- See Also:
-
getOutputProperties
Get the output properties for the transformation.As well as the properties defined in the JAXP OutputKeys class, Saxon defines an additional set of properties in
SaxonOutputKeys
. These fall into two categories: Constants representing serialization properties defined in XSLT 2.0 (which are not yet supported by JAXP), and constants supporting Saxon extensions to the set of serialization properties.- Specified by:
getOutputProperties
in classTransformer
- Returns:
- the output properties being used for the transformation, including properties defined in the stylesheet for the unnamed output format
- Since:
- 8.4
- See Also:
-
setOutputProperty
Set an output property for the transformation.As well as the properties defined in the JAXP OutputKeys class, Saxon defines an additional set of properties in
SaxonOutputKeys
. These fall into two categories: Constants representing serialization properties defined in XSLT 2.0 (which are not yet supported by JAXP), and constants supporting Saxon extensions to the set of serialization properties.- Specified by:
setOutputProperty
in classTransformer
- Parameters:
name
- the name of the propertyvalue
- the value of the property- Throws:
IllegalArgumentException
- if the property is invalid (except for properties in a user-defined namespace)- Since:
- 8.4
- See Also:
-
getOutputProperty
Get the value of an output property.As well as the properties defined in the JAXP OutputKeys class, Saxon defines an additional set of properties in
SaxonOutputKeys
. These fall into two categories: Constants representing serialization properties defined in XSLT 2.0 (which are not yet supported by JAXP), and constants supporting Saxon extensions to the set of serialization properties.- Specified by:
getOutputProperty
in classTransformer
- Parameters:
name
- the name of the requested property- Returns:
- the value of the requested property
- Since:
- 8.4
- See Also:
-
setBaseOutputURI
Set the base output URI. This defaults to the system ID of the principal Result object, but a different value can be set for use where there is no principal result. The command line interface sets this to the current working directory.The concept of the base output URI is new in XSLT 2.0: it defines the base URI for resolving relative URIs in the
href
attribute of thexsl:result-document
instruction. This method may be superseded by a standard JAXP method when JAXP is updated to support XSLT 2.0.- Parameters:
uri
- the base output URI- Since:
- 8.4
-
getBaseOutputURI
Get the base output URI. This defaults to the system ID of the principal Result object, but a different value can be set for use where there is no principal result. The command line interface sets this to the current working directory.The concept of the base output URI is new in XSLT 2.0: it defines the base URI for resolving relative URIs in the
href
attribute of thexsl:result-document
instruction. This method may be superseded by a standard JAXP method when JAXP is updated to support XSLT 2.0.- Returns:
- the base output URI
- Since:
- 8.4
-
getPrincipalResult
Get the principal result destination.This method is intended for internal use only.
-
checkUniqueOutputDestination
Check that an output destination has not been used before, optionally adding this URI to the set of URIs that have been used.- Parameters:
uri
- the URI to be used as the output destination- Returns:
- true if the URI is available for use; false if it has already been used.
This method is intended for internal use only.
-
isUnusedOutputDestination
Determine whether an output URI is available for use. This method is intended for use by applications, via an extension function.- Parameters:
uri
- A uri that the application is proposing to use in the href attribute of xsl:result-document: if this function returns false, then the xsl:result-document call will fail saying the URI has already been used.- Returns:
- true if the URI is available for use. Note that this function is not "stable": it may return different results for the same URI at different points in the transformation.
-
checkImplicitResultTree
Check whether an XSLT implicit result tree can be written. This is allowed only if no xsl:result-document has been written for the principal output URI- Throws:
XPathException
-
allocateSequenceOutputter
Allocate a SequenceOutputter for a new output destination. Reuse the existing one if it is available for reuse (this is designed to ensure that the TinyTree structure is also reused, creating a forest of trees all sharing the same data structure) -
reuseSequenceOutputter
Accept a SequenceOutputter that is now available for reuse -
setInitialTemplate
Set the initial named template to be used as the entry point.XSLT 2.0 allows a transformation to start by executing a named template, rather than by matching an initial context node in a source document. This method may eventually be superseded by a standard JAXP method once JAXP supports XSLT 2.0.
Although the Saxon command line interface does not allow both a source document and an initial template to be specified, this API has no such restriction.
Note that any parameters supplied using
setParameter(java.lang.String, java.lang.Object)
are used as the values of global stylesheet parameters. There is no way to supply values for local parameters of the initial template.- Parameters:
expandedName
- The expanded name of the template in {uri}local format- Throws:
XPathException
- if there is no named template with this name- Since:
- 8.4
-
getInitialTemplate
Get the initial template- Returns:
- the name of the initial template, as an expanded name in Clark format if set, or null otherwise
- Since:
- 8.7
-
makePipelineConfiguration
Make a PipelineConfiguration based on the properties of this Controller.This interface is intended primarily for internal use, although it may be necessary for applications to call it directly for use in conjunction with the experimental pull API.
-
makeMessageEmitter
Make an Emitter to be used for xsl:message output.This method is intended for internal use only.
- Returns:
- The newly constructed message Emitter
- Throws:
XPathException
- if any dynamic error occurs; in particular, if the registered MessageEmitter class is not an Emitter
-
setMessageEmitter
Set the Emitter to be used for xsl:message output.Recent versions of the JAXP interface specify that by default the output of xsl:message is sent to the registered ErrorListener. Saxon does not yet implement this convention. Instead, the output is sent to a default message emitter, which is a slightly customised implementation of the standard Saxon Emitter interface.
This interface can be used to change the way in which Saxon outputs xsl:message output.
It is not necessary to use this interface in order to change the destination to which messages are written: that can be achieved by obtaining the standard message emitter and calling its
Emitter.setWriter(java.io.Writer)
method.This method is intended for use by advanced applications. The Emitter interface itself is not part of the stable Saxon public API.
- Parameters:
emitter
- The emitter to receive xsl:message output.
-
getMessageEmitter
Get the Emitter used for xsl:message output. This returns the emitter previously supplied to thesetMessageEmitter(net.sf.saxon.event.Emitter)
method, or the default message emitter otherwise.- Returns:
- the Emitter being used for xsl:message output
-
makeCharacterMapExpander
public CharacterMapExpander makeCharacterMapExpander(String useMaps, SerializerFactory sf) throws XPathException Make a CharacterMapExpander to handle the character map definitions in the serialization properties.This method is intended for internal use only.
- Parameters:
useMaps
- the expanded use-character-maps property: a space-separated list of names of character maps to be used, each one expressed as an expanded-QName in Clark notation (that is, {uri}local-name).- Returns:
- a CharacterMapExpander if one is required, or null if not (for example, if the useMaps argument is an empty string).
- Throws:
XPathException
- if a name in the useMaps property cannot be resolved to a declared character map.
-
setRecoveryPolicy
public void setRecoveryPolicy(int policy) Set the policy for handling recoverable errrors- Parameters:
policy
- the recovery policy to be used. The options areConfiguration.RECOVER_SILENTLY
,Configuration.RECOVER_WITH_WARNINGS
, orConfiguration.DO_NOT_RECOVER
.- Since:
- 8.7.1
-
getRecoveryPolicy
public int getRecoveryPolicy()Get the policy for handling recoverable errors- Returns:
- the current policy. If none has been set with this Controller, the value registered with the Configuration is returned.
- Since:
- 8.7.1
-
setErrorListener
Set the error listener.- Specified by:
setErrorListener
in classTransformer
- Parameters:
listener
- the ErrorListener to be used
-
getErrorListener
Get the error listener.- Specified by:
getErrorListener
in classTransformer
- Returns:
- the ErrorListener in use
-
recoverableError
Report a recoverable error. This is an XSLT concept: by default, such an error results in a warning message, and processing continues. In XQuery, however, there are no recoverable errors so a fatal error is reported.This method is intended for internal use only.
- Parameters:
err
- An exception holding information about the error- Throws:
DynamicError
- if the error listener decides not to recover from the error
-
reportFatalError
Report a fatal error -
getExecutable
Get the Executable object.This method is intended for internal use only.
- Returns:
- the Executable (which represents the compiled stylesheet)
-
getDocumentPool
Get the document pool. This is used only for source documents, not for stylesheet modules.This method is intended for internal use only.
- Returns:
- the source document pool
-
clearDocumentPool
public void clearDocumentPool()Clear the document pool. This is sometimes useful when re-using the same Transformer for a sequence of transformations, but it isn't done automatically, because when the transformations use common look-up documents, the caching is beneficial. -
setPrincipalSourceDocument
Deprecated.From Saxon 8.7, replaced bysetInitialContextItem(Item)
Set the initial context node (used for evaluating global variables). When a transformation is invoked using thetransform(javax.xml.transform.Source, javax.xml.transform.Result)
method, the initial context node is set automatically. This method is useful in XQuery, to define an initial context node for evaluating global variables, and also in XSLT 2.0, when the transformation is started by invoking a named template.- Parameters:
doc
- The principal source document- Since:
- 8.4
-
setInitialContextItem
Set the initial context item. When a transformation is invoked using thetransform(javax.xml.transform.Source, javax.xml.transform.Result)
method, the initial context node is set automatically. This method is useful in XQuery, to define an initial context node for evaluating global variables, and also in XSLT 2.0, when the transformation is started by invoking a named template. When an initial context item is set, it also becomes the context item used for evaluating global variables. However, the context item for global variables may subsequently be changed independently. In XQuery, the two context items are always the same; in XSLT, the context node for evaluating global variables is the root of the tree containing the initial context item.- Parameters:
item
- The initial context item. The XSLT specification says that this must be a node; however this restriction is not enforced, and any item can be supplied as an initial context item if the transformation is started by calling a named initial template. (There is no similar restriction in XQuery)- Since:
- 8.7
-
getBindery
Get the current bindery.This method is intended for internal use only.
- Returns:
- the Bindery (in which values of all variables are held)
-
getPrincipalSourceDocument
Deprecated.From Saxon 8.7, replaced bygetInitialContextItem()
andgetContextForGlobalVariables()
Get the context item used for evaluating global variables, provided this is a document node. If the initial context item is not defined, or is not a node in a document, return null.- Returns:
- the context item used for evaluating global variables, provided this is a document node, otherwise null
- Since:
- 8.4
-
getInitialContextItem
Get the initial context item. This returns the item (often a document node) previously supplied to thesetInitialContextItem(net.sf.saxon.om.Item)
method, or the initial context node set implicitly using methods such astransform(javax.xml.transform.Source, javax.xml.transform.Result)
.- Returns:
- the initial context item. Note that in XSLT this must be a node, but in XQuery it may also be an atomic value.
- Since:
- 8.7
-
getContextForGlobalVariables
Get the item used as the context for evaluating global variables. In XQuery this is the same as the initial context item; in XSLT it is the root of the tree containing the initial context node.- Returns:
- the context item for evaluating global variables, or null if there is none
- Since:
- 8.7
-
setURIResolver
Set an object that will be used to resolve URIs used in document(), etc.- Specified by:
setURIResolver
in classTransformer
- Parameters:
resolver
- An object that implements the URIResolver interface, or null.
-
getURIResolver
Get the URI resolver.This method changed in Saxon 8.5, to conform to the JAXP specification. If there is no user-specified URIResolver, it now returns null; previously it returned the system default URIResolver.
- Specified by:
getURIResolver
in classTransformer
- Returns:
- the user-supplied URI resolver if there is one, or null otherwise.
-
getStandardURIResolver
Get the fallback URI resolver. This is the URIResolver that Saxon uses when the user-supplied URI resolver returns null.This method is intended for internal use only.
- Returns:
- the the system-defined URIResolver
-
setOutputURIResolver
Set the URI resolver for secondary output documents.XSLT 2.0 introduces the
xsl:result-documentinvalid input: '<'/code instruction, allowing a transformation to have multiple result documents. JAXP does not yet support this capability. This method allows an OutputURIResolver to be specified that takes responsibility for deciding the destination (and, if it wishes, the serialization properties) of secondary output files.
This method may eventually be superseded by a standard JAXP method.
- Parameters:
resolver
- An object that implements the OutputURIResolver interface, or null.- Since:
- 8.4
-
getOutputURIResolver
Get the output URI resolver.- Returns:
- the user-supplied URI resolver if there is one, or the system-defined one otherwise.
- Since:
- 8.4
- See Also:
-
getKeyManager
Get the KeyManager.This method is intended for internal use only.
- Returns:
- the KeyManager, which holds details of all key declarations
-
getNamePool
Get the name pool in use. The name pool is responsible for mapping QNames used in source documents and compiled stylesheets and queries into numeric codes. All source documents used by a given transformation or query must use the same name pool as the compiled stylesheet or query.- Returns:
- the name pool in use
- Since:
- 8.4
-
setTreeModel
public void setTreeModel(int model) Set the tree data model to use. This affects all source documents subsequently constructed using a Builder obtained from this Controller. This includes a document built from a StreamSource or SAXSource supplied as a parameter to thetransform(javax.xml.transform.Source, javax.xml.transform.Result)
method.- Parameters:
model
- the required tree model:Builder.LINKED_TREE
orBuilder.TINY_TREE
- Since:
- 8.4
- See Also:
-
makeBuilder
Make a builder for the selected tree model.- Returns:
- an instance of the Builder for the chosen tree model
- Since:
- 8.4
-
makeStripper
Make a Stripper configured to implement the whitespace stripping rules. In the case of XSLT the whitespace stripping rules are normally defined byxsl:strip-space
andxsl:preserve-spaceinvalid input: '<'/code elements in the stylesheet. Alternatively, stripping of all whitespace text nodes may be defined at the level of the Configuration, using the method
Configuration.setStripsAllWhiteSpace(boolean)
.- Parameters:
b
- the Receiver to which the events filtered by this stripper are to be sent (often a Builder). May be null if the stripper is not being used for filtering into a Builder or other Receiver.- Returns:
- the required Stripper. A Stripper may be used in two ways. It acts as a filter applied to an event stream, that can be used to remove the events representing whitespace text nodes before they reach a Builder. Alternatively, it can be used to define a view of an existing tree in which the whitespace text nodes are dynamically skipped while navigating the XPath axes.
- Since:
- 8.4 - Generalized in 8.5 to accept any Receiver as an argument
-
registerDocument
Add a document to the document pool.This method is intended for internal use only.
- Parameters:
doc
- the root node of the document to be addedsystemId
- the document-URI property of this document
-
setRuleManager
Set the RuleManager, used to manage template rules for each mode.This method is intended for internal use only.
- Parameters:
r
- the Rule Manager
-
getRuleManager
Get the Rule Manager.This method is intended for internal use only.
- Returns:
- the Rule Manager, used to hold details of template rules for all modes
-
getTraceListener
Get the TraceListener. By default, there is no TraceListener, and this method returns null. A TraceListener may be added using the methodaddTraceListener(net.sf.saxon.trace.TraceListener)
. If more than one TraceListener has been added, this method will return a composite TraceListener. Because this form this takes is implementation-dependent, this method is not part of the stable Saxon public API.- Returns:
- the TraceListener used for XSLT or XQuery instruction tracing
-
isTracing
public final boolean isTracing()Test whether instruction execution is being traced. This will be true if (a) at least one TraceListener has been registered using theaddTraceListener(net.sf.saxon.trace.TraceListener)
method, and (b) tracing has not been temporarily paused using thepauseTracing(boolean)
method.- Returns:
- true if tracing is active, false otherwise
- Since:
- 8.4
-
pauseTracing
public final void pauseTracing(boolean pause) Pause or resume tracing. While tracing is paused, trace events are not sent to any of the registered TraceListeners.- Parameters:
pause
- true if tracing is to pause; false if it is to resume- Since:
- 8.4
-
addTraceListener
Adds the specified trace listener to receive trace events from this instance. Note that although TraceListeners can be added or removed dynamically, this has no effect unless the stylesheet or query has been compiled with tracing enabled. This is achieved by callingConfiguration.setTraceListener(net.sf.saxon.trace.TraceListener)
or by setting the attributeFeatureKeys.TRACE_LISTENER
on the TransformerFactory. Conversely, if this property has been set in the Configuration or TransformerFactory, the TraceListener will automatically be added to every Controller that uses that Configuration.- Parameters:
trace
- the trace listener.- Since:
- 8.4
-
removeTraceListener
Removes the specified trace listener so that the listener will no longer receive trace events.- Parameters:
trace
- the trace listener.- Since:
- 8.4
-
setPreparedStylesheet
Associate this Controller with a compiled stylesheet.This method is intended for internal use only.
- Parameters:
sheet
- the compiled stylesheet
-
setExecutable
Associate this Controller with an Executable. This method is used by the XQuery processor. The Executable object is overkill in this case - the only thing it currently holds are copies of the collation table.This method is intended for internal use only
- Parameters:
exec
- the Executable
-
initializeController
Initialize the controller ready for a new transformation. This method should not normally be called by users (it is done automatically when transform() is invoked). However, it is available as a low-level API especially for use with XQuery.- Throws:
XPathException
-
defineGlobalParameters
Define the global parameters of the transformation or query.This method is intended for internal use only
- Parameters:
bindery
- The Bindery, which holds values of global variables and parameters- Throws:
XPathException
-
getUserData
Get user data associated with a key. To retrieve user data, two objects are required: an arbitrary object that may be regarded as the container of the data (originally, and typically still, a node in a tree), and a name. The name serves to distingush data objects associated with the same node by different client applications.This method is intended primarily for internal use, though it may also be used by advanced applications.
- Parameters:
key
- an object acting as a key for this user data value. This must be equal (in the sense of the equals() method) to the key supplied when the data value was registered usingsetUserData(java.lang.Object, java.lang.String, java.lang.Object)
.name
- the name of the required property- Returns:
- the value of the required property
-
setUserData
Set user data associated with a key. To store user data, two objects are required: an arbitrary object that may be regarded as the container of the data (originally, and typically still, a node in a tree), and a name. The name serves to distingush data objects associated with the same node by different client applications.This method is intended primarily for internal use, though it may also be used by advanced applications.
- Parameters:
key
- an object acting as a key for this user data value. This must be equal (in the sense of the equals() method) to the key supplied when the data value was registered usingsetUserData(java.lang.Object, java.lang.String, java.lang.Object)
. If data for the given object and name already exists, it is overwritten.name
- the name of the required propertydata
- the value of the required property
-
transform
Perform a transformation from a Source document to a Result document.- Specified by:
transform
in classTransformer
- Parameters:
source
- The input for the source tree. May be null if and only if an initial template has been supplied.result
- The destination for the result tree.- Throws:
XPathException
- if the transformation fails. As a special case, the method throws a TerminationException (a subclass of XPathException) if the transformation was terminated using xsl:message terminate="yes".TransformerException
-
prepareInputTree
Prepare an input tree for processing. This is used when either the initial input, or a Source returned by the document() function, is a NodeInfo or a DOMSource. The preparation consists of wrapping a DOM document inside a wrapper that implements the NodeInfo interface, and/or adding a space-stripping wrapper if the stylesheet strips whitespace nodes.This method is intended for internal use.
- Parameters:
source
- the input tree. Must be either a DOMSource or a NodeInfo- Returns:
- the NodeInfo representing the input node, suitably wrapped.
-
unravel
Get a NodeInfo corresponding to a DOM Node, either by wrapping or unwrapping the DOM Node.This method is intended for internal use.
-
transformDocument
Transform a source XML document supplied as a tree.
This method is intended for internal use. External applications should use the
transform(javax.xml.transform.Source, javax.xml.transform.Result)
method, which is part of the JAXP interface. Note thatNodeInfo
implements the JAXPSource
interface, so it may be supplied directly to the transform() method.- Parameters:
startNode
- A Node that identifies the source document to be transformed and the node where the transformation should start. May be null if the transformation is to start using an initial template.result
- The output destination- Throws:
XPathException
- if any dynamic error occursTransformerException
-
preEvaluateGlobals
Pre-evaluate global variables (when debugging/tracing).This method is intended for internal use.
- Throws:
XPathException
-
prepareNextStylesheet
public Result prepareNextStylesheet(String href, String baseURI, Result result) throws TransformerException Prepare another stylesheet to handle the output of this one.This method is intended for internal use, to support the
saxon:next-in-chain
extension.- Parameters:
href
- URI of the next stylesheet to be appliedbaseURI
- base URI for resolving href if it's a relative URIresult
- the output destination of the current stylesheet- Returns:
- a replacement destination for the current stylesheet
- Throws:
XPathException
- if any dynamic error occursTransformerException
-
setParameter
Set a parameter for the transformation.The following table shows some of the classes that are supported by this method. (Others may also be supported, but continued support is not guaranteed.) Each entry in the table shows first the Java class of the supplied object, and then the type of the resulting XPath value.
Java Class XPath 2.0 type String xs:string Boolean xs:boolean Integer xs:integer Long xs:integer Double xs:double Float xs:float BigDecimal xs:decimal BigInteger xs:integer Date xs:dateTime Array or List of any of the above sequence of the above null empty sequence A node may be supplied as a
NodeInfo
object, a sequence of nodes as an array or List ofNodeInfo
objects.In addition, any object that implements the Saxon
Value
interface may be supplied, and will be used without conversion.A node belong to an external object model (such as DOM, JDOM, or XOM) may be supplied provided (a) that the external object model is registered with the Configuration, and (b) that the node is part of a document tree that has been registered in the document pool.
- Specified by:
setParameter
in classTransformer
- Parameters:
expandedName
- The name of the parameter in {uri}local formatvalue
- The value object. This must follow the rules above. Other formats in addition to those listed above may be accepted.- Since:
- 8.4
-
clearParameters
public void clearParameters()Reset the parameters to a null list.- Specified by:
clearParameters
in classTransformer
-
getParameter
Get a parameter to the transformation. This returns the value of a parameter that has been previously set using thesetParameter(java.lang.String, java.lang.Object)
method. The value is returned exactly as supplied, that is, before any conversion to an XPath value.- Specified by:
getParameter
in classTransformer
- Parameters:
expandedName
- the name of the required parameter, in "{uri}local-name" format- Returns:
- the value of the parameter, if it exists, or null otherwise
-
setCurrentDateTime
Set the current date and time for this query or transformation. This method is provided primarily for testing purposes, to allow tests to be run with a fixed date and time. The supplied date/time must include a timezone, which is used as the implicit timezone. Calls are ignored if a current date/time has already been established by calling getCurrentDateTime().Note that comparisons of date/time values currently use the implicit timezone taken from the system clock, not from the value supplied here.
- Throws:
XPathException
-
getCurrentDateTime
Get the current date and time for this query or transformation. All calls during one transformation return the same answer.This method is intended for internal use.
- Returns:
- Get the current date and time. This will deliver the same value for repeated calls within the same transformation
-
newXPathContext
Make an XPathContext object for expression evaluation.This method is intended for internal use.
- Returns:
- the new XPathContext
-
setRememberedNumber
Set the last remembered node, for node numbering purposes.This method is strictly for internal use only.
- Parameters:
node
- the node in questionnumber
- the number of this node
-
getRememberedNumber
Get the number of a node if it is the last remembered one.This method is strictly for internal use only.
- Parameters:
node
- the node for which remembered information is required- Returns:
- the number of this node if known, else -1.
-
getInstructionInfo
Get diagnostic information about this context.This method is intended for internal use.
- Specified by:
getInstructionInfo
in interfaceInstructionInfoProvider
-
setClassLoader
Set a ClassLoader to be used when loading external classes. Examples of classes that are loaded include SAX parsers, localization modules for formatting numbers and dates, extension functions, external object models. In an environment such as Eclipse that uses its own ClassLoader, this ClassLoader should be nominated to ensure that any class loaded by Saxon is identical to a class of the same name loaded by the external environment.This method is for application use, but is experimental and subject to change.
- Parameters:
loader
- the ClassLoader to be used.
-
getClassLoader
Get the ClassLoader supplied using the methodsetClassLoader(java.lang.ClassLoader)
. If none has been supplied, return null.This method is for application use, but is experimental and subject to change.
- Returns:
- the ClassLoader in use.
-
getInitialContextItem()
andgetContextForGlobalVariables()