public class StreamWriterToReceiver
extends java.lang.Object
implements javax.xml.stream.XMLStreamWriter
This class does not itself perform "namespace repairing" as defined in the interface Javadoc
(also referred to as "prefix defaulting" in the StaX JSR specification). In normal use, however,
the events emitted by this class are piped into a NamespaceReducer
which performs a function
very similar to namespace repairing; specifically, it ensures that when elements and attribute are
generated with a given namespace URI and local name, then namespace declarations are generated
automatically without any explicit need to call the writeNamespace(String, String)
method.
The class will check all names, URIs, and character content for conformance against XML well-formedness
rules unless the checkValues
option is set to false.
The implementation of this class is influenced not only by the Javadoc documentation of the
XMLStreamWriter
interface (which is woefully inadequate), but also by the helpful
but unofficial interpretation of the spec to be found at
http://veithen.github.io/2009/11/01/understanding-stax.html
Provided that the sequence of events sent to this class is legitimate, the events
sent to the supplied Receiver
should constitute a regular sequence
as defined in the documentation of class RegularSequenceChecker
.
Constructor and Description |
---|
StreamWriterToReceiver(Receiver receiver)
Constructor.
|
Modifier and Type | Method and Description |
---|---|
void |
close() |
void |
flush() |
void |
flushStartTag() |
javax.xml.namespace.NamespaceContext |
getNamespaceContext()
Return the current namespace context.
|
java.lang.String |
getPrefix(java.lang.String uri) |
java.lang.Object |
getProperty(java.lang.String name) |
Receiver |
getReceiver()
Get the Receiver to which this StreamWriterToReceiver is writing events
|
boolean |
isCheckValues()
Ask whether names and values are to be checked for conformance with XML rules
|
boolean |
isInventPrefixes()
Deprecated.
since 9.7.0.2
|
void |
setCheckValues(boolean check)
Say whether names and values are to be checked for conformance with XML rules
|
void |
setDefaultNamespace(java.lang.String uri) |
void |
setInventPrefixes(boolean invent)
Deprecated.
since 9.7.0.2. In normal use this class feeds its output into a
NamespaceReducer
which performs the equivalent of "namespace repairing" or "prefix invention": that is, it ensures
that when elements or attributes are written in a specific namespace, there is no need for an
explicit writeNamespace(String, String) call to create the namespace declaration. |
void |
setNamespaceContext(javax.xml.namespace.NamespaceContext context) |
void |
setPrefix(java.lang.String prefix,
java.lang.String uri) |
void |
writeAttribute(java.lang.String localName,
java.lang.String value) |
void |
writeAttribute(java.lang.String namespaceURI,
java.lang.String localName,
java.lang.String value) |
void |
writeAttribute(java.lang.String prefix,
java.lang.String namespaceURI,
java.lang.String localName,
java.lang.String value) |
void |
writeCData(java.lang.String data) |
void |
writeCharacters(char[] text,
int start,
int len) |
void |
writeCharacters(java.lang.String text) |
void |
writeComment(java.lang.String data) |
void |
writeDefaultNamespace(java.lang.String namespaceURI)
Emits a default namespace declaration
|
void |
writeDTD(java.lang.String dtd) |
void |
writeEmptyElement(java.lang.String localName) |
void |
writeEmptyElement(java.lang.String namespaceURI,
java.lang.String localName) |
void |
writeEmptyElement(java.lang.String prefix,
java.lang.String localName,
java.lang.String namespaceURI) |
void |
writeEndDocument() |
void |
writeEndElement() |
void |
writeEntityRef(java.lang.String name) |
void |
writeNamespace(java.lang.String prefix,
java.lang.String namespaceURI)
Emits a namespace declaration event.
|
void |
writeProcessingInstruction(java.lang.String target) |
void |
writeProcessingInstruction(java.lang.String target,
java.lang.String data) |
void |
writeStartDocument() |
void |
writeStartDocument(java.lang.String version) |
void |
writeStartDocument(java.lang.String encoding,
java.lang.String version) |
void |
writeStartElement(java.lang.String localName)
Generate a start element event for an element in no namespace.
|
void |
writeStartElement(java.lang.String namespaceURI,
java.lang.String localName)
Generate a start element event.
|
void |
writeStartElement(java.lang.String prefix,
java.lang.String localName,
java.lang.String namespaceURI)
Generate a start element event.
|
public StreamWriterToReceiver(Receiver receiver)
receiver
- the Receiver that is to receive the events generated
by this StreamWriter.public Receiver getReceiver()
public void setInventPrefixes(boolean invent)
NamespaceReducer
which performs the equivalent of "namespace repairing" or "prefix invention": that is, it ensures
that when elements or attributes are written in a specific namespace, there is no need for an
explicit writeNamespace(String, String)
call to create the namespace declaration.invent
- true if prefixes are to be invented.public boolean isInventPrefixes()
NamespaceReducer
; this is an approximation
of the result in earlier releases.public void setCheckValues(boolean check)
check
- true if names and values are to be checked. Default is false;public boolean isCheckValues()
public void flushStartTag() throws javax.xml.stream.XMLStreamException
javax.xml.stream.XMLStreamException
public void writeStartElement(java.lang.String localName) throws javax.xml.stream.XMLStreamException
setDefaultNamespace(String)
has been called;
this is Saxon's interpretation of the intended effect of the StAX specification.writeStartElement
in interface javax.xml.stream.XMLStreamWriter
localName
- local name of the tag, may not be nulljavax.xml.stream.XMLStreamException
- if names are being checked and the name is invalid, or if an error occurs downstreamjava.lang.NullPointerException
- if the supplied local name is nullpublic void writeStartElement(java.lang.String namespaceURI, java.lang.String localName) throws javax.xml.stream.XMLStreamException
setPrefix(String, String)
and/or setDefaultNamespace(String)
if these include the specified namespace URI; otherwise the namespace will become the default namespace
and there will therefore be no prefix.writeStartElement
in interface javax.xml.stream.XMLStreamWriter
namespaceURI
- the namespace URI of the element name. Must not be null. A zero-length
string means the element is in no namespace.localName
- local part of the element name. Must not be nulljavax.xml.stream.XMLStreamException
- if names are being checked and are found to be invalid, or if an
error occurs downstream in the pipeline.java.lang.NullPointerException
- if either argument is nullpublic void writeStartElement(java.lang.String prefix, java.lang.String localName, java.lang.String namespaceURI) throws javax.xml.stream.XMLStreamException
writeStartElement
in interface javax.xml.stream.XMLStreamWriter
prefix
- the prefix of the element, must not be null. If the prefix is supplied as a zero-length
string, the element will nave no prefix (that is, the namespace URI will become the default
namespace).localName
- local name of the element, must not be nullnamespaceURI
- the uri to bind the prefix to, must not be null. If the value is a zero-length string,
the element will be in no namespace; in this case any prefix is ignored.java.lang.NullPointerException
- if any of the arguments is null.javax.xml.stream.XMLStreamException
- if names are being checked and are found to be invalid, or if an
error occurs downstream in the pipeline.public void writeEmptyElement(java.lang.String namespaceURI, java.lang.String localName) throws javax.xml.stream.XMLStreamException
writeEmptyElement
in interface javax.xml.stream.XMLStreamWriter
javax.xml.stream.XMLStreamException
public void writeEmptyElement(java.lang.String prefix, java.lang.String localName, java.lang.String namespaceURI) throws javax.xml.stream.XMLStreamException
writeEmptyElement
in interface javax.xml.stream.XMLStreamWriter
javax.xml.stream.XMLStreamException
public void writeEmptyElement(java.lang.String localName) throws javax.xml.stream.XMLStreamException
writeEmptyElement
in interface javax.xml.stream.XMLStreamWriter
javax.xml.stream.XMLStreamException
public void writeEndElement() throws javax.xml.stream.XMLStreamException
writeEndElement
in interface javax.xml.stream.XMLStreamWriter
javax.xml.stream.XMLStreamException
public void writeEndDocument() throws javax.xml.stream.XMLStreamException
writeEndDocument
in interface javax.xml.stream.XMLStreamWriter
javax.xml.stream.XMLStreamException
public void close() throws javax.xml.stream.XMLStreamException
close
in interface javax.xml.stream.XMLStreamWriter
javax.xml.stream.XMLStreamException
public void flush()
flush
in interface javax.xml.stream.XMLStreamWriter
public void writeAttribute(java.lang.String localName, java.lang.String value)
writeAttribute
in interface javax.xml.stream.XMLStreamWriter
public void writeAttribute(java.lang.String prefix, java.lang.String namespaceURI, java.lang.String localName, java.lang.String value)
writeAttribute
in interface javax.xml.stream.XMLStreamWriter
public void writeAttribute(java.lang.String namespaceURI, java.lang.String localName, java.lang.String value)
writeAttribute
in interface javax.xml.stream.XMLStreamWriter
public void writeNamespace(java.lang.String prefix, java.lang.String namespaceURI) throws javax.xml.stream.XMLStreamException
If the prefix argument to this method is the empty string, "xmlns", or null this method will delegate to writeDefaultNamespace.
This method does not change the name of any element or attribute; its only use is to write additional or redundant namespace declarations. With this implementation of XMLStreamWriter, this method is needed only to generate namespace declarations for prefixes that do not appear in element or attribute names. If an attempt is made to generate a namespace declaration that conflicts with the prefix-uri bindings in scope for element and attribute names, an exception occurs.
writeNamespace
in interface javax.xml.stream.XMLStreamWriter
prefix
- the prefix to bind this namespace tonamespaceURI
- the uri to bind the prefix tojava.lang.IllegalStateException
- if the current state does not allow Namespace writingjavax.xml.stream.XMLStreamException
- if things go wrongpublic void writeDefaultNamespace(java.lang.String namespaceURI)
This method does not change the name of any element or attribute; its only use is to write additional or redundant namespace declarations. With this implementation of XMLStreamWriter, this method is needed only to generate namespace declarations for prefixes that do not appear in element or attribute names. If an attempt is made to generate a namespace declaration that conflicts with the prefix-uri bindings in scope for element and attribute names, an exception occurs.
writeDefaultNamespace
in interface javax.xml.stream.XMLStreamWriter
namespaceURI
- the uri to bind the default namespace tojava.lang.IllegalStateException
- if the current state does not allow Namespace writingpublic void writeComment(java.lang.String data) throws javax.xml.stream.XMLStreamException
writeComment
in interface javax.xml.stream.XMLStreamWriter
javax.xml.stream.XMLStreamException
public void writeProcessingInstruction(java.lang.String target) throws javax.xml.stream.XMLStreamException
writeProcessingInstruction
in interface javax.xml.stream.XMLStreamWriter
javax.xml.stream.XMLStreamException
public void writeProcessingInstruction(java.lang.String target, java.lang.String data) throws javax.xml.stream.XMLStreamException
writeProcessingInstruction
in interface javax.xml.stream.XMLStreamWriter
javax.xml.stream.XMLStreamException
public void writeCData(java.lang.String data) throws javax.xml.stream.XMLStreamException
writeCData
in interface javax.xml.stream.XMLStreamWriter
javax.xml.stream.XMLStreamException
public void writeDTD(java.lang.String dtd) throws javax.xml.stream.XMLStreamException
writeDTD
in interface javax.xml.stream.XMLStreamWriter
javax.xml.stream.XMLStreamException
public void writeEntityRef(java.lang.String name)
writeEntityRef
in interface javax.xml.stream.XMLStreamWriter
public void writeStartDocument() throws javax.xml.stream.XMLStreamException
writeStartDocument
in interface javax.xml.stream.XMLStreamWriter
javax.xml.stream.XMLStreamException
public void writeStartDocument(java.lang.String version) throws javax.xml.stream.XMLStreamException
writeStartDocument
in interface javax.xml.stream.XMLStreamWriter
javax.xml.stream.XMLStreamException
public void writeStartDocument(java.lang.String encoding, java.lang.String version) throws javax.xml.stream.XMLStreamException
writeStartDocument
in interface javax.xml.stream.XMLStreamWriter
javax.xml.stream.XMLStreamException
public void writeCharacters(java.lang.String text) throws javax.xml.stream.XMLStreamException
writeCharacters
in interface javax.xml.stream.XMLStreamWriter
javax.xml.stream.XMLStreamException
public void writeCharacters(char[] text, int start, int len) throws javax.xml.stream.XMLStreamException
writeCharacters
in interface javax.xml.stream.XMLStreamWriter
javax.xml.stream.XMLStreamException
public java.lang.String getPrefix(java.lang.String uri)
getPrefix
in interface javax.xml.stream.XMLStreamWriter
public void setPrefix(java.lang.String prefix, java.lang.String uri)
setPrefix
in interface javax.xml.stream.XMLStreamWriter
public void setDefaultNamespace(java.lang.String uri)
setDefaultNamespace
in interface javax.xml.stream.XMLStreamWriter
public void setNamespaceContext(javax.xml.namespace.NamespaceContext context)
setNamespaceContext
in interface javax.xml.stream.XMLStreamWriter
public javax.xml.namespace.NamespaceContext getNamespaceContext()
The specification of this method is hopelessly vague. This method returns a namespace context
that contains the namespaces declared using setPrefix(String, String)
calls that are
in-scope at the time, overlaid on the root namespace context that was defined using
setNamespaceContext(NamespaceContext)
. The namespaces bound using setPrefix(String, String)
are copied, and are therefore unaffected by subsequent changes, but the root namespace context
is not copied, because the NamespaceContext interface provides no way of doing so.
getNamespaceContext
in interface javax.xml.stream.XMLStreamWriter
public java.lang.Object getProperty(java.lang.String name) throws java.lang.IllegalArgumentException
getProperty
in interface javax.xml.stream.XMLStreamWriter
java.lang.IllegalArgumentException
Copyright (c) 2004-2020 Saxonica Limited. All rights reserved.