Class Controller
- All Implemented Interfaces:
ContextOriginator
- Direct Known Subclasses:
XsltController
The Controller is serially reusable: 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.
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.
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.
Prior to Saxon 9.6 the Controller implemented (extended) the JAXP Transformer
interface, and advanced applications were able to down-cast the Transformer to a Controller.
This is no longer the case. Instead, the JAXP factory delivers an instance of TransformerImpl
,
from which the Controller is accessible if required. Because the Controller is no longer required
to implement the JAXP interface, it has been possible to make it less monolithic, so some of the
things it did are now done elsewhere: for example, it no longer handles global parameters
- Since:
- 8.4. From 9.6 this class should no longer be considered a public API. In 9.9, the class
was split into two: XSLT-specific functionality has been moved into the subclass
XsltController
.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final String
protected Executable
protected Item
protected boolean
protected Receiver
protected String
protected TraceListener
protected int
-
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.Allocate a SequenceOutputter for a new output destination.allocateSequenceOutputter
(int size) Allocate a SequenceCollector for a new output destination.protected void
void
Clear the document pool.void
Reset the global context item to null.protected void
Reset variables that need to be reset for each transformation if the controller is serially reusedvoid
Get the base output URI.getBindery
(PackageData packageData) Get the bindery for the global variables in a particular package.Get the collection finder associated with this configuration.Get the Configuration associated with this Controller.getConvertedParameter
(StructuredQName name, SequenceType requiredType, XPathContext context) Get the value of a parameter, converted and/or type-checkedGet the current date and time for this query or transformation.Get the name of the default collection.Get the document pool.Get the Executable object.getFocusTrackerFactory
(boolean multithreaded) Get the factory function that is used to create new instances of FocusTrackingIterator.Get the item used as the context for evaluating global variables.int
Get the implicit timezone offset for this query or transformationGet the table of local indexes supporting xsl:key (or implicit keys created by the optimizer).getModel()
Get the tree model that will be used.getParameter
(StructuredQName name) Get the value of a supplied parameter (XSLT) or external variable (XQuery)Get the path map used for document projection, if any.Get the principal result destination.int
getRememberedNumber
(NodeInfo node) Get the number of a node if it is the last remembered one.Get the URI resolver.Get the Rule Manager.int
Ask whether source documents loaded using the doc(), document(), and collection() functions, or supplied as a StreamSource or SAXSource to the transform() or addParameter() method should be subjected to schema validationReturn the default whitespace-stripping rules that apply to this transformation or query.Get the cache of stylesheets (cached during calls on fn:transform()) for this query or transformation.Get the destination for output from the fn:trace() function.Get the TraceListener.Get the URI resolver for the unparsed-text() function.getUserData
(Object key, String name) Get user data associated with a key.protected void
void
Initialize the controller ready for a new transformation.boolean
Ask whether the transformation will perform whitespace stripping for supplied source trees as defined by the xsl:strip-space and xsl:preserve-space declarations in the stylesheet.protected boolean
Ask whether the executable is a stylesheet whose top-level package contains an xsl:strip-space declaration requesting stripping of whitespace from the principal source document to the transformationboolean
Ask whether the executable is a stylesheet whose top-level package contains requests stripping of type annotationsfinal boolean
Test whether instruction execution is being traced.Make a builder for the selected tree model.makeFocusTracker
(SequenceIterator iter, boolean multithreaded) Use the factory function to create a FocusIterator.Make a PipelineConfiguration based on the properties of this Controller.makeSourceTree
(Source source, int validationMode) Make a source tree from a source supplied as a StreamSource or SAXSourcemakeStripper
(Receiver next) Make a Stripper configured to implement the whitespace stripping rules.Make an XPathContext object for expression evaluation.void
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.void
registerDocument
(TreeInfo doc, DocumentKey uri) Add a document to the document pool, and check that it is suitable for use in this query or transformation.void
Register the dependency of one variable ("one") upon another ("two"), throwing an exception if this would establish a cycle of dependencies.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
setApplyFunctionConversionRulesToExternalVariables
(boolean applyConversionRules) void
setBaseOutputURI
(String uri) Set the base output URI.void
Set the collection finder associated with this configuration.void
setCurrentDateTime
(DateTimeValue dateTime) Set the current date and time for this query or transformation.void
Set the name of the default collection.void
setErrorReporter
(ErrorReporter reporter) Set a callback that will be used when reporting a dynamic error or warningvoid
setFocusTrackerFactory
(Function<SequenceIterator, FocusTrackingIterator> focusTrackerFactory) Set a factory function that will be used to create new instances of FocusTrackingIterator.void
setGlobalContextItem
(Item contextItem) Set the item used as the context for evaluating global variables.void
setGlobalContextItem
(Item contextItem, boolean alreadyStripped) Set the item used as the context for evaluating global variables.void
Set the focus tracker factory function to a function that creates a memoizing focus tracker, which has the effect that all items read by the focus iterator are accessible to a debugger at any stage while iterating over the sequencevoid
Set the tree model to use.void
setMultithreadedFocusTrackerFactory
(Function<SequenceIterator, FocusTrackingIterator> focusTrackerFactory) Set a factory function that will be used to create new instances of FocusTrackingIterator for multithreaded operation.void
setRememberedNumber
(NodeInfo node, int number) Set the last remembered node, for node numbering purposes.void
setResourceResolver
(ResourceResolver resolver) Set an object that will be used to resolve URIs used in document(), etc.void
setSchemaValidationMode
(int validationMode) Say whether source documents loaded using the doc(), document(), and collection() functions, or supplied as a StreamSource or SAXSource to the transform() or addParameter() method, should be subjected to schema validation.void
setStripSourceTrees
(boolean strip) Say whether the transformation should perform whitespace stripping as defined by the xsl:strip-space and xsl:preserve-space declarations in the stylesheet in the case where a source tree is supplied to the transformation as a tree (typically a DOMSource, or a Saxon NodeInfo).void
setTraceFunctionDestination
(Logger stream) Set the destination for output from the fn:trace() function.void
setTraceListener
(TraceListener listener) Set a TraceListener, replacing any existing TraceListenervoid
Set an UnparsedTextURIResolver to be used to resolve URIs passed to the XSLT unparsed-text() function.void
setUseDocumentProjection
(PathMap pathMap) Indicate whether document projection should be used, and supply the PathMap used to control it.void
setUserData
(Object key, String name, Object data) Set user data associated with a key.void
Report a run-time warning
-
Field Details
-
executable
-
globalContextItem
-
traceListener
-
principalResult
-
principalResultURI
-
validationMode
protected int validationMode -
inUse
protected boolean inUse -
ANONYMOUS_PRINCIPAL_OUTPUT_URI
- See Also:
-
-
Constructor Details
-
Controller
Create a Controller and initialise variables. Note: XSLT applications should create the Controller by using the JAXP newTransformer() method, or in S9API by using XsltExecutable.load()- Parameters:
config
- The Configuration used by this Controller
-
Controller
Create a Controller and initialise variables.- 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
.- Since:
- 1.5
-
clearPerTransformationData
protected void clearPerTransformationData()Reset variables that need to be reset for each transformation if the controller is serially reused -
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
-
getParameter
Get the value of a supplied parameter (XSLT) or external variable (XQuery)- Parameters:
name
- the QName of the parameter- Returns:
- the supplied value of the parameter, if such a parameter exists, and if a value was supplied. Returns null if the parameter is not declared or if no value was supplied, even if there is a default defined in the stylesheet or query.
-
getConvertedParameter
public GroundedValue getConvertedParameter(StructuredQName name, SequenceType requiredType, XPathContext context) throws XPathException Get the value of a parameter, converted and/or type-checked- Parameters:
name
- the name of the stylesheet parameter (XSLT) or external variable (XQuery)requiredType
- the declared type of the parametercontext
- the dynamic evaluation context- Returns:
- the parameter value if defined, or null otherwise. If the option
setApplyFunctionConversionRulesToExternalVariables(boolean)
} is set, the supplied value is converted to the required type. Otherwise, the supplied value is checked against the required type. - Throws:
XPathException
- if a problem is found with the supplied parameter value
-
setBaseOutputURI
Set the base output URI.This defaults to the system ID of the Result object for the principal output of the transformation if this is known; if it is not known, it defaults to the current directory.
The base output URI is used for resolving relative URIs in the
href
attribute of thexsl:result-document
instruction.- Parameters:
uri
- the base output URI- Since:
- 8.4
-
getBaseOutputURI
Get the base output URI.This returns the value set using the
setBaseOutputURI(java.lang.String)
method. If no value has been set explicitly, then the method returns null if called before the transformation, or the computed default base output URI if called after the transformation.The base output URI is used for resolving relative URIs in the
href
attribute of thexsl:result-document
instruction.- Returns:
- the base output URI
- Since:
- 8.4
-
getPrincipalResult
Get the principal result destination.This method is intended for internal use only. It is typically called by Saxon during the course of a transformation, to discover the result that was supplied in the transform() call.
- Returns:
- the Result object supplied as the principal result destination.
-
allocateSequenceOutputter
Allocate a SequenceOutputter for a new output destination.- Returns:
- the allocated SequenceOutputter
-
allocateSequenceOutputter
Allocate a SequenceCollector for a new output destination.- Parameters:
size
- the estimated size of the output sequence- Returns:
- SequenceOutputter the allocated SequenceOutputter
-
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 if they construct pull or push pipelines.
- Returns:
- a newly constructed PipelineConfiguration holding a reference to this Controller as well as other configuration information.
-
setErrorReporter
Set a callback that will be used when reporting a dynamic error or warning- Parameters:
reporter
- the error reporter to be notified
-
getErrorReporter
-
reportFatalError
Report a fatal error- Parameters:
err
- the error to be reported
-
warning
Report a run-time warning- Parameters:
message
- the warning messageerrorCode
- the error code. If unprefixed, this is assumed to be in the ERR namespace. For a different namespace, useQ{uri}local
format. May be null.locator
- the location in the source code. May be null.
-
handleXPathException
- Throws:
XPathException
-
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. -
getBindery
Get the bindery for the global variables in a particular package.This method is intended for internal use only.
- Parameters:
packageData
- the package for which the variables are required- Returns:
- the Bindery (in which values of all variables for the requested package are held)
-
setGlobalContextItem
Set the item used as the context for evaluating global variables. This value is used as the global context item by XQuery, XSLT and XPath.- Parameters:
contextItem
- the context item for evaluating global variables, or null if there is none- Throws:
XPathException
- if the supplied context item is a node, and if it (a) does not belong to the right Configuration, or (b) is schema-validated, when the stylesheet or query is not compiled with schema-awareness enabled- Since:
- 9.7. Changed in 9.9 to raise an exception if the context item is inappropriate.
-
setGlobalContextItem
Set the item used as the context for evaluating global variables. This value is used as the global context item by XQuery, XSLT, and XPath.- Parameters:
contextItem
- the context item for evaluating global variables, or null if there is nonealreadyStripped
- true if any stripping of type annotations or whitespace text node specified in the stylesheet has already been carried out- Throws:
XPathException
- if the supplied context item is a node, and if it (a) does not belong to the right Configuration, or (b) is schema-validated, when the stylesheet or query is not compiled with schema-awareness enabled- Since:
- 9.7. Changed in 9.9 to raise an exception if the context item is inappropriate.
-
clearGlobalContextItem
public void clearGlobalContextItem()Reset the global context item to null. This clears any previous setting of the global context item. -
getGlobalContextItem
Get the item used as the context for evaluating global variables. In XQuery this is the same as the initial context item; in XSLT 1.0 and 2.0 it is the root of the tree containing the initial context node; in XSLT 3.0 it can be set independently of the initial match selection.- Returns:
- the context item for evaluating global variables, or null if there is none
- Since:
- 9.7
-
setResourceResolver
Set an object that will be used to resolve URIs used in document(), etc.- Parameters:
resolver
- An object that implements the ResourceResolver interface, or null.
-
getResourceResolver
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.
- Returns:
- the user-supplied URI resolver if there is one, or null otherwise.
-
setUnparsedTextURIResolver
Set an UnparsedTextURIResolver to be used to resolve URIs passed to the XSLT unparsed-text() function.- Parameters:
resolver
- the unparsed text URI resolver to be used. This replaces any unparsed text URI resolver previously registered.- Since:
- 8.9
-
getUnparsedTextURIResolver
Get the URI resolver for the unparsed-text() function. This will return the UnparsedTextURIResolver previously set using thesetUnparsedTextURIResolver(net.sf.saxon.lib.UnparsedTextURIResolver)
method.- Returns:
- the registered UnparsedTextURIResolver
- Since:
- 8.9
-
getCollectionFinder
Get the collection finder associated with this configuration. This is used to dereference collection URIs used in the fn:collection and fn:uri-collection functions- Returns:
- the CollectionFinder to be used
- Since:
- 9.7
-
setCollectionFinder
Set the collection finder associated with this configuration. This is used to dereference collection URIs used in the fn:collection and fn:uri-collection functions- Parameters:
cf
- the CollectionFinder to be used- Since:
- 9.7
-
setDefaultCollection
Set the name of the default collection. Defaults to the default collection name registered with the Configuration.- Parameters:
uri
- the collection URI of the default collection. May be null, to cause fallback to the collection name registered with the Configuration. The name will be passed to the collection URI resolver to identify the documents in the collection, unless the name ishttp://saxon.sf.net/collection/empty
which always refers to the empty collection.- Since:
- 9.4
-
getDefaultCollection
Get the name of the default collection. Defaults to the default collection name registered with the Configuration.- Returns:
- the collection URI of the default collection. If no value has been set explicitly, the collection URI registered with the Configuration is returned
- Since:
- 9.4
-
getSchemaValidationMode
public int getSchemaValidationMode()Ask whether source documents loaded using the doc(), document(), and collection() functions, or supplied as a StreamSource or SAXSource to the transform() or addParameter() method should be subjected to schema validation- Returns:
- the schema validation mode previously set using setSchemaValidationMode(), or the default mode (derived from the global Configuration) otherwise.
-
setSchemaValidationMode
public void setSchemaValidationMode(int validationMode) Say whether source documents loaded using the doc(), document(), and collection() functions, or supplied as a StreamSource or SAXSource to the transform() or addParameter() method, should be subjected to schema validation. The default value is taken from the corresponding property of the Configuration.- Parameters:
validationMode
- the validation (or construction) mode to be used for source documents. One ofValidation.STRIP
,Validation.PRESERVE
,Validation.STRICT
,Validation.LAX
- Since:
- 9.2
-
setModel
Set the tree model to use. Default is the tiny tree- Parameters:
model
- typically one of the constantsTreeModel.TINY_TREE
,TreeModel.TINY_TREE_CONDENSED
, orTreeModel.LINKED_TREE
. It is also possible to use a user-defined tree model.- Since:
- 9.2
-
getModel
Get the tree model that will be used.- Returns:
- typically one of the constants
TreeModel.TINY_TREE
,TreeModel.TINY_TREE_CONDENSED
, orTreeModel.LINKED_TREE
. It is also possible to use a user-defined tree model. - Since:
- 9.2
-
makeBuilder
Make a builder for the selected tree model.- Returns:
- an instance of the Builder for the chosen tree model
- Since:
- 8.4
-
setStripSourceTrees
public void setStripSourceTrees(boolean strip) Say whether the transformation should perform whitespace stripping as defined by the xsl:strip-space and xsl:preserve-space declarations in the stylesheet in the case where a source tree is supplied to the transformation as a tree (typically a DOMSource, or a Saxon NodeInfo). The default is true. It is legitimate to suppress whitespace stripping if the client knows that all unnecessary whitespace has already been removed from the tree before it is processed. Note that this option applies to all source documents for which whitespace-stripping is normally applied, that is, both the principal source documents, and documents read using the doc(), document(), and collection() functions. It does not apply to source documents that are supplied in the form of a SAXSource or StreamSource, for which whitespace is stripped during the process of tree construction.Generally, stripping whitespace speeds up the transformation if it is done while building the source tree, but slows it down if it is applied to a tree that has already been built. So if the same source tree is used as input to a number of transformations, it is better to strip the whitespace once at the time of tree construction, rather than doing it on-the-fly during each transformation.
- Parameters:
strip
- true if whitespace is to be stripped from supplied source trees as defined by xsl:strip-space; false to suppress whitespace stripping- Since:
- 9.3
-
isStripSourceTree
public boolean isStripSourceTree()Ask whether the transformation will perform whitespace stripping for supplied source trees as defined by the xsl:strip-space and xsl:preserve-space declarations in the stylesheet.- Returns:
- true unless whitespace stripping has been suppressed using
setStripSourceTrees(boolean)
. - Since:
- 9.3
-
isStylesheetContainingStripSpace
protected boolean isStylesheetContainingStripSpace()Ask whether the executable is a stylesheet whose top-level package contains an xsl:strip-space declaration requesting stripping of whitespace from the principal source document to the transformation- Returns:
- true if whitespace stripping has been requested
-
isStylesheetStrippingTypeAnnotations
public boolean isStylesheetStrippingTypeAnnotations()Ask whether the executable is a stylesheet whose top-level package contains requests stripping of type annotations- Returns:
- true if stripping of type annotations has been requested
-
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-space
elements in the stylesheet. Alternatively, stripping of all whitespace text nodes may be defined at the level of the Configuration, using the codeConfiguration.getParseOptions().setSpaceStrippingRules(AllElementsSpaceStrippingRule.getInstance()
.- Parameters:
next
- 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
-
getSpaceStrippingRule
Return the default whitespace-stripping rules that apply to this transformation or query.- Returns:
- If the configuration-level whitespace-stripping rule is to strip whitespace for all elements, then AllElementsSpaceStrippingRule.getInstance(). Otherwise,
-
registerDocument
Add a document to the document pool, and check that it is suitable for use in this query or transformation. This check rejects the document if document has been validated (and thus carries type annotations) but the query or transformation is not schema-aware.This method is intended for internal use only.
- Parameters:
doc
- the root node of the document to be added. Must not be null.uri
- the document-URI property of this document. If non-null, the document is registered in the document pool with this as its document URI.- Throws:
XPathException
- if an error occurs
-
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; or null in the case of a non-XSLT controller
-
setTraceListener
Set a TraceListener, replacing any existing TraceListenerThis method has no effect unless the stylesheet or query was compiled with tracing enabled.
- Parameters:
listener
- the TraceListener to be set. May be null, in which case trace events will not be reported- Since:
- 9.2
-
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.lib.TraceListener)
. If more than one TraceListener has been added, this method will return a composite TraceListener. Because the 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, or null if absent.
-
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.lib.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.lib.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. If null is supplied, the call has no effect.- Since:
- 8.4
-
openTraceEpisode
public void openTraceEpisode() -
closeTraceEpisode
public void closeTraceEpisode() -
removeTraceListener
Removes the specified trace listener so that the listener will no longer receive trace events.- Parameters:
trace
- the trace listener.- Since:
- 8.4
-
setTraceFunctionDestination
Set the destination for output from the fn:trace() function. By default, the destination is System.err. If a TraceListener is in use, this is ignored, and the trace() output is sent to the TraceListener.- Parameters:
stream
- the PrintStream to which trace output will be sent. If set to null, trace output is suppressed entirely. It is the caller's responsibility to close the stream after use.- Since:
- 9.1. Changed in 9.6 to use a Logger
-
getTraceFunctionDestination
Get the destination for output from the fn:trace() function.- Returns:
- the PrintStream to which trace output will be sent. If no explicitly destination has been set, returns System.err. If the destination has been set to null to suppress trace output, returns null.
- Since:
- 9.1. Changed in 9.6 to use a Logger
-
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.- Parameters:
params
- the values of stylesheet parameters. Changed in 9.9.1.1 so this no longer includes static parameters (which are already available in thePreparedStylesheet
).- Throws:
XPathException
- if an error occurs, for example if a required parameter is not supplied.
-
setApplyFunctionConversionRulesToExternalVariables
public void setApplyFunctionConversionRulesToExternalVariables(boolean applyConversionRules) -
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 can be any object, for example a node or a string. 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. If null is supplied, any existing entry for the key is removed.
-
getLocalIndexes
Get the table of local indexes supporting xsl:key (or implicit keys created by the optimizer). Indexes are held at Controller level (rather than being shared across transformations) if the key definition is dependent on local information, for example stylesheet parameters.- Returns:
- the index of indexes. The master index is created if it does not already exist. The master index is a two-level index: the first level is indexed by the integer fingerprint of the key name; the second level is indexed by the document number (a long) for the specific document or temporary tree.
-
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.
-
checkReadiness
- Throws:
XPathException
-
makeSourceTree
Make a source tree from a source supplied as a StreamSource or SAXSource- Parameters:
source
- the sourcevalidationMode
- indicates whether the source should be schema-validated- Returns:
- the root of the constructed tree
- Throws:
XPathException
- if tree construction fails
-
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, and/or adding a type-stripping wrapper if the stylesheet strips input type annotations.This method is intended for internal use.
- Parameters:
source
- the input tree. Must be either a DOMSource or a NodeSource- Returns:
- the NodeInfo representing the input node, suitably wrapped. Exceptionally, if the source is a whitespace text node that is itself stripped, return null.
-
preEvaluateGlobals
Pre-evaluate global variables (when debugging/tracing).This method is intended for internal use.
- Parameters:
context
- the dynamic context for evaluating the global variables- Throws:
XPathException
- if pre-evaluation is attempted and fails with a dynamic error
-
registerGlobalVariableDependency
public void registerGlobalVariableDependency(GlobalVariable one, GlobalVariable two) throws XPathException Register the dependency of one variable ("one") upon another ("two"), throwing an exception if this would establish a cycle of dependencies.- Parameters:
one
- the first (dependent) variabletwo
- the second (dependee) variable- Throws:
XPathException
- if adding this dependency creates a cycle of dependencies among global variables.
-
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.Note that comparisons of date/time values currently use the implicit timezone taken from the system clock, not from the value supplied here.
- Parameters:
dateTime
- the date/time value to be used as the current date and time- Throws:
IllegalStateException
- if a current date/time has already been established by calling getCurrentDateTime(), or by a previous call on setCurrentDateTime()XPathException
- if the supplied dateTime contains no timezone
-
getCurrentDateTime
Get the current date and time for this query or transformation. All calls during one transformation return the same answer.- Returns:
- Get the current date and time. This will deliver the same value for repeated calls within the same transformation. The returned dateTime value will have a timezone, which will be the default/local timezone determined by the platform on which the application is running.
-
getImplicitTimezone
public int getImplicitTimezone()Get the implicit timezone offset for this query or transformation- Returns:
- the implicit timezone as an offset in minutes. This will be the default/local timezone determined by the platform on which the application is running. The value will be unchanged 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
-
setUseDocumentProjection
Indicate whether document projection should be used, and supply the PathMap used to control it. Note: this is available only under Saxon-EE.- Parameters:
pathMap
- a path map to be used for projecting source documents
-
getPathMapForDocumentProjection
Get the path map used for document projection, if any.- Returns:
- the path map to be used for document projection, if one has been supplied; otherwise null
-
getStylesheetCache
Get the cache of stylesheets (cached during calls on fn:transform()) for this query or transformation.- Returns:
- the stylesheet cache
-
getFocusTrackerFactory
public Function<SequenceIterator,FocusTrackingIterator> getFocusTrackerFactory(boolean multithreaded) Get the factory function that is used to create new instances of FocusTrackingIterator. The standard function for instantiating a FocusTrackingIterator can be overridden to deliver one with extra diagnostic capability for use in debuggers- Parameters:
multithreaded
- true if the focus tracker must be suitable for executing a multi-threaded xsl:for-each iteration- Returns:
- a factory function that is used to create FocusTrackingIterator instances
-
makeFocusTracker
Use the factory function to create a FocusIterator. If the supplied iterator is already a FocusIterator then it is returned unchanged- Parameters:
iter
- the supplied iterator to be wrappedmultithreaded
- true if multithreaded access is requiried- Returns:
- a FocusIterator that returns the same items as the supplied iterator, while tracking the current item and current position, and enabling look-eahead to evaluate last().
-
setFocusTrackerFactory
public void setFocusTrackerFactory(Function<SequenceIterator, FocusTrackingIterator> focusTrackerFactory) Set a factory function that will be used to create new instances of FocusTrackingIterator. The standard function for instantiating a FocusTrackingIterator can be overridden to deliver one with extra diagnostic capability for use in debuggers.- Parameters:
focusTrackerFactory
- a factory function that is used to create FocusTrackingIterator instances
-
setMultithreadedFocusTrackerFactory
public void setMultithreadedFocusTrackerFactory(Function<SequenceIterator, FocusTrackingIterator> focusTrackerFactory) Set a factory function that will be used to create new instances of FocusTrackingIterator for multithreaded operation. The standard function for instantiating a FocusTrackingIterator can be overridden to deliver one with extra diagnostic capability for use in debuggers.- Parameters:
focusTrackerFactory
- a factory function that is used to create FocusTrackingIterator instances
-
setMemoizingFocusTrackerFactory
public void setMemoizingFocusTrackerFactory()Set the focus tracker factory function to a function that creates a memoizing focus tracker, which has the effect that all items read by the focus iterator are accessible to a debugger at any stage while iterating over the sequence
-