public class Serializer extends AbstractDestination
Note that this is XML serialization in the sense of the W3C XSLT and XQuery specifications.
This has nothing to do with the serialization of Java objects, or the Serializable
interface.
The serialization may be influenced by a number of serialization parameters. A parameter has a name,
which is an instance of Serializer.Property
, and a value, which is expressed as a string.
The effect of most of the properties is as described in the W3C specification
XSLT 3.0 and XQuery 3.1 Serialization.
Saxon supports all the serialization parameters defined in that specification, together with some
additional parameters, whose property names are prefixed "SAXON_".
Serialization parameters defined via this interface take precedence over any serialization parameters
defined within the source of the query or stylesheet. The getReceiver(net.sf.saxon.event.PipelineConfiguration, net.sf.saxon.serialize.SerializationProperties)
method is supplied with
parameters derived from the query or stylesheet, which are merged with the parameters set on this
Serializer
.
Changed in 9.9 so the Serializer
now only holds one set of output properties. Additional
(default) serialization properties (taken from the source of the query or stylesheet) can be supplied
when getReceiver(PipelineConfiguration, SerializationProperties)
is called, but these are not stored within the Serializer
itself.
Modifier and Type | Class and Description |
---|---|
static class |
Serializer.Property
Enumeration class defining the permitted serialization properties
|
helper
Modifier | Constructor and Description |
---|---|
protected |
Serializer(Processor processor)
Create a Serializer belonging to a specific processor
|
Modifier and Type | Method and Description |
---|---|
void |
close()
Close any resources associated with this destination.
|
java.util.Properties |
getCombinedOutputProperties(java.util.Properties defaultOutputProperties)
Create a Properties object holding the defined serialization properties.
|
org.xml.sax.ContentHandler |
getContentHandler()
Get a ContentHandler that can be used to direct the output of a SAX parser (or other
source of SAX events) to this serializer.
|
protected java.util.Properties |
getLocallyDefinedProperties()
Create a Properties object holding the serialization properties explicitly declared
within this Serializer object, and not including any defaults taken from the stylesheet or query.
|
java.lang.Object |
getOutputDestination()
Get the current output destination.
|
java.lang.String |
getOutputProperty(QName property)
Get the value of a serialization property.
|
java.lang.String |
getOutputProperty(Serializer.Property property)
Get the value of a serialization property
|
Processor |
getProcessor()
Get the Processor associated with this Serializer.
|
static Serializer.Property |
getProperty(QName name)
Get the Property with a given QName
|
Receiver |
getReceiver(PipelineConfiguration pipe,
SerializationProperties params)
Return a receiver to which Saxon will send events.
|
protected javax.xml.transform.Result |
getResult()
Get the JAXP StreamResult object representing the output destination
of this serializer
|
SerializationProperties |
getSerializationProperties()
Create a
SerializationProperties object holding the serialization properties explicitly declared
within this Serializer object (including any character map index), and not including any
defaults taken from the stylesheet or query. |
StreamWriterToReceiver |
getXMLStreamWriter()
Get an XMLStreamWriter that can be used for writing application-generated XML
to be output via this serializer.
|
boolean |
isMustCloseAfterUse() |
void |
serializeNode(XdmNode node)
Serialize an XdmNode to the selected output destination using this serializer
|
java.lang.String |
serializeNodeToString(XdmNode node)
Serialize an XdmNode to a string using this serializer
|
void |
serializeXdmValue(XdmValue value)
Serialize an arbitrary XdmValue to the selected output destination using this serializer.
|
void |
setCharacterMap(CharacterMapIndex characterMap)
Set a character map to be used; more specifically, supply a set of named character maps
|
void |
setCloseOnCompletion(boolean value)
Say if the output stream should be closed on completion
By default the close method closes the output stream only when the serializer created the output stream itself
that is when the destination has been suppplied as a file rather than a stream.
|
void |
setOutputFile(java.io.File file)
Set the destination of the serialized output, as a File.
|
void |
setOutputProperties(java.util.Properties suppliedProperties)
Set output properties, from a
Properties object. |
void |
setOutputProperties(SerializationProperties suppliedProperties)
Set output properties, from an
SerializationProperties object. |
void |
setOutputProperty(QName property,
java.lang.String value)
Set the value of a serialization property.
|
void |
setOutputProperty(Serializer.Property property,
java.lang.String value)
Set the value of a serialization property.
|
void |
setOutputStream(java.io.OutputStream stream)
Set the destination of the serialized output, as an OutputStream.
|
void |
setOutputWriter(java.io.Writer writer)
Set the destination of the serialized output, as a Writer.
|
void |
setProcessor(Processor processor)
Set the Processor associated with this Serializer.
|
closeAndNotify, getDestinationBaseURI, onClose, setDestinationBaseURI
protected Serializer(Processor processor)
processor
- the processor associated with the Serializer. Must not be null.public void setProcessor(Processor processor)
Processor.newSerializer()
methods.processor
- the associated Processor (must not be null)public Processor getProcessor()
public void setOutputProperties(java.util.Properties suppliedProperties)
Properties
object. The keys in the supplied
Properties
object are QNames in Clark format, that is "{uri}local"; any QNames
within the values must also be in this format.
The values supplied are typically those specified in the stylesheet or query. In the case of XSLT,
they are typically the properties associated with unnamed xsl:output declarations.suppliedProperties
- the output properties to be used. These overwrite any properties
that have been individually specified using
setOutputProperty(Property, String)
setOutputProperty}public void setOutputProperties(SerializationProperties suppliedProperties)
SerializationProperties
object. The keys in the contained
Properties
object are QNames in Clark format, that is "{uri}local"; any QNames
within the values must also be in this format.
The values supplied are typically those specified in the stylesheet or query. In the case of XSLT, they are typically the properties associated with unnamed xsl:output declarations.
suppliedProperties
- the output properties to be used. These overwrite any properties
that have been individually specified using
setOutputProperty(Property, String)
setOutputProperty}public void setCloseOnCompletion(boolean value)
value
- - if true the output file will be closed when the close method is called
if false the close method has no effect.public void setCharacterMap(CharacterMapIndex characterMap)
characterMap
- a set of named character maps. A character map in this set will only
be used if the name of the character map is added to the value
of the Serializer.Property.USE_CHARACTER_MAPS
serialization
property. The character maps in this index are added to the existing
set of character maps known to the serializer, unless they have the
same names as existing character maps, in which case the new one
overwrites the old.public void setOutputProperty(Serializer.Property property, java.lang.String value)
Example:
serializer.setOutputProperty(Serializer.Property.METHOD, "xml");
Any serialization properties supplied via this interface take precedence over serialization
properties defined in the source stylesheet or query, including properties set dynamically
using xsl:result-document. However, they only affect the principal output of a transformation;
the serialization of secondary result documents is controlled using an OutputURIResolver
.
property
- The name of the property to be setvalue
- The value of the property, as a string. The format is generally as defined
in the xsl:output
declaration in XSLT: this means that boolean properties, for
example, are represented using the strings "yes" and "no". Properties whose values are QNames,
such as cdata-section-elements
are expressed using the Clark representation of
a QName, that is "{uri}local". Multi-valued properties (again, cdata-section-elements
is an example) are expressed as a space-separated list.java.lang.IllegalArgumentException
- if the value of the property is invalid. The property is
validated individually; invalid combinations of properties will be detected only when the properties
are actually used to serialize an XML event stream.public java.lang.String getOutputProperty(Serializer.Property property)
property
- the name of the required property. This method only considers properties
explicitly set on this Serialized object, it does not return values
obtained from the stylesheet or query.public void setOutputProperty(QName property, java.lang.String value)
Example:
serializer.setOutputProperty(new QName("method"), "xml");
Any serialization properties supplied via this interface take precedence over serialization properties defined in the source stylesheet or query.
Unlike the method setOutputProperty(Property, String)
, this method allows properties
to be set whose names are not in the standard set of property names defined in the W3C specifications,
nor in a recognized Saxon extension. This enables properties to be set for use by a custom serialization
method.
property
- The name of the property to be setvalue
- The value of the property, as a string. The format is generally as defined
in the xsl:output
declaration in XSLT: this means that boolean properties, for
example, are represented using the strings "yes" and "no". Properties whose values are QNames,
such as cdata-section-elements
are expressed using the Clark representation of
a QName, that is "{uri}local". Multi-valued properties (again, cdata-section-elements
is an example) are expressed as a space-separated list.java.lang.IllegalArgumentException
- if the value of the property is invalid. The property is
validated individually; invalid combinations of properties will be detected only when the properties
are actually used to serialize an XML event stream. No validation occurs unless the property
name is either in no namespace, or in the Saxon namespacepublic java.lang.String getOutputProperty(QName property)
Unlike the method getOutputProperty(Property)
, this method allows properties
to be read whose names are not in the standard set of property names defined in the W3C specifications,
nor in a recognized Saxon extension. This enables properties to be set for use by a custom serialization
method.
property
- the name of the required propertypublic void setOutputWriter(java.io.Writer writer)
Note that when this option is used, the serializer does not perform character encoding. This also means that it never replaces special characters with XML numeric character references. The final encoding is the responsibility of the supplied Writer.
Closing the writer after use is the responsibility of the caller.
Calling this method has the side-effect of setting the OutputStream and OutputFile to null.
writer
- the Writer to which the serialized XML output will be written.public void setOutputStream(java.io.OutputStream stream)
Closing the output stream after use is the responsibility of the caller.
Calling this method has the side-effect of setting the OutputWriter and OutputFile to null.
stream
- the OutputStream to which the serialized XML output will be written.public void setOutputFile(java.io.File file)
Calling this method has the side-effect of setting the current OutputWriter and OutputStream to null.
This method sets the destination base URI to the URI corresponding to the name of the supplied file.
file
- the File to which the serialized XML output will be written.public void serializeNode(XdmNode node) throws SaxonApiException
node
- The node to be serializedjava.lang.IllegalStateException
- if no outputStream, Writer, or File has been supplied as the
destination for the serialized outputSaxonApiException
- if a serialization error or I/O error occurspublic void serializeXdmValue(XdmValue value) throws SaxonApiException
value
- The value to be serializedjava.lang.IllegalStateException
- if no outputStream, Writer, or File has been supplied as the
destination for the serialized output, or if no Processor is associated with the serializerSaxonApiException
- if a serialization error or I/O error occurspublic java.lang.String serializeNodeToString(XdmNode node) throws SaxonApiException
node
- The node to be serializedSaxonApiException
- if a serialization error occurspublic StreamWriterToReceiver getXMLStreamWriter() throws SaxonApiException
SaxonApiException
- if any other failure occurspublic org.xml.sax.ContentHandler getContentHandler() throws SaxonApiException
SaxonApiException
- if any other failure occurspublic java.lang.Object getOutputDestination()
setOutputStream(java.io.OutputStream)
, setOutputWriter(java.io.Writer)
, or setOutputFile(java.io.File)
; or
null, if no output destination has been set up.public Receiver getReceiver(PipelineConfiguration pipe, SerializationProperties params) throws SaxonApiException
pipe
- The Saxon configuration. This is an internal implementation object
held within the Processor
params
- Serialization parameters originating from the query or stylesheet
(for example, xsl:output declarations or xsl:result-document attributes).
These parameters are combined with those held by this Serializer
itself,
with properties set of the Serializer
taking precedence.SaxonApiException
- if the Receiver cannot be createdpublic java.util.Properties getCombinedOutputProperties(java.util.Properties defaultOutputProperties)
Transformer.getOutputProperties()
protected java.util.Properties getLocallyDefinedProperties()
public SerializationProperties getSerializationProperties()
SerializationProperties
object holding the serialization properties explicitly declared
within this Serializer object (including any character map index), and not including any
defaults taken from the stylesheet or query.SerializationProperties
object holding the declared
serialization properties. Specifically, it holds the properties defined explicitly on this
Serializer
object, and excludes any properties defined in named or unnamed
xsl:output
declarations in the stylesheet, or the equivalent in XQuery.protected javax.xml.transform.Result getResult()
public void close() throws SaxonApiException
SaxonApiException
- if any failure occurspublic static Serializer.Property getProperty(QName name)
name
- the QName of the required property, which must be either a standard property defined
in the XSLT 3.0 / XQuery 3.0 serialization specification, or an extension property defined by
Saxon in the Saxon namespacejava.lang.IllegalArgumentException
- if the name is not a recognized serialization property name.public boolean isMustCloseAfterUse()
Copyright (c) 2004-2020 Saxonica Limited. All rights reserved.