public abstract class AbstractMarshaller extends java.lang.Object implements Marshaller, Unmarshaller
Marshaller
and Unmarshaller
interface.
This implementation inspects the given Source
or Result
, and defers
further handling to overridable template methods.Modifier and Type | Field and Description |
---|---|
private javax.xml.parsers.DocumentBuilderFactory |
documentBuilderFactory |
private java.lang.Object |
documentBuilderFactoryMonitor |
protected Log |
logger
Logger available to subclasses.
|
private boolean |
processExternalEntities |
Constructor and Description |
---|
AbstractMarshaller() |
Modifier and Type | Method and Description |
---|---|
protected javax.xml.parsers.DocumentBuilder |
createDocumentBuilder(javax.xml.parsers.DocumentBuilderFactory factory)
Create a
DocumentBuilder that this marshaller will use for creating
DOM documents when passed an empty DOMSource . |
protected javax.xml.parsers.DocumentBuilderFactory |
createDocumentBuilderFactory()
Create a
DocumentBuilder that this marshaller will use for creating
DOM documents when passed an empty DOMSource . |
protected org.xml.sax.XMLReader |
createXmlReader()
Create an
XMLReader that this marshaller will when passed an empty SAXSource . |
protected abstract java.lang.String |
getDefaultEncoding() |
boolean |
isProcessExternalEntities() |
void |
marshal(java.lang.Object graph,
javax.xml.transform.Result result)
Marshals the object graph with the given root into the provided
javax.xml.transform.Result . |
protected abstract void |
marshalDomNode(java.lang.Object graph,
org.w3c.dom.Node node)
Abstract template method for marshalling the given object graph to a DOM
Node . |
protected void |
marshalDomResult(java.lang.Object graph,
javax.xml.transform.dom.DOMResult domResult)
Template method for handling
DOMResult s. |
protected abstract void |
marshalOutputStream(java.lang.Object graph,
java.io.OutputStream outputStream)
Abstract template method for marshalling the given object graph to a
OutputStream . |
protected abstract void |
marshalSaxHandlers(java.lang.Object graph,
org.xml.sax.ContentHandler contentHandler,
org.xml.sax.ext.LexicalHandler lexicalHandler)
Abstract template method for marshalling the given object graph to a SAX
ContentHandler . |
protected void |
marshalSaxResult(java.lang.Object graph,
javax.xml.transform.sax.SAXResult saxResult)
Template method for handling
SAXResult s. |
protected void |
marshalStaxResult(java.lang.Object graph,
javax.xml.transform.Result staxResult)
Template method for handling
StaxResult s. |
protected void |
marshalStreamResult(java.lang.Object graph,
javax.xml.transform.stream.StreamResult streamResult)
Template method for handling
StreamResult s. |
protected abstract void |
marshalWriter(java.lang.Object graph,
java.io.Writer writer)
Abstract template method for marshalling the given object graph to a
Writer . |
protected abstract void |
marshalXmlEventWriter(java.lang.Object graph,
javax.xml.stream.XMLEventWriter eventWriter)
Abstract template method for marshalling the given object to a StAX
XMLEventWriter . |
protected abstract void |
marshalXmlStreamWriter(java.lang.Object graph,
javax.xml.stream.XMLStreamWriter streamWriter)
Abstract template method for marshalling the given object to a StAX
XMLStreamWriter . |
void |
setProcessExternalEntities(boolean processExternalEntities)
Indicates whether external XML entities are processed when unmarshalling.
|
java.lang.Object |
unmarshal(javax.xml.transform.Source source)
Unmarshals the given provided
javax.xml.transform.Source into an object graph. |
protected abstract java.lang.Object |
unmarshalDomNode(org.w3c.dom.Node node)
Abstract template method for unmarshalling from a given DOM
Node . |
protected java.lang.Object |
unmarshalDomSource(javax.xml.transform.dom.DOMSource domSource)
Template method for handling
DOMSource s. |
protected abstract java.lang.Object |
unmarshalInputStream(java.io.InputStream inputStream)
Abstract template method for unmarshalling from a given
InputStream . |
protected abstract java.lang.Object |
unmarshalReader(java.io.Reader reader)
Abstract template method for unmarshalling from a given
Reader . |
protected abstract java.lang.Object |
unmarshalSaxReader(org.xml.sax.XMLReader xmlReader,
org.xml.sax.InputSource inputSource)
Abstract template method for unmarshalling using a given SAX
XMLReader
and InputSource . |
protected java.lang.Object |
unmarshalSaxSource(javax.xml.transform.sax.SAXSource saxSource)
Template method for handling
SAXSource s. |
protected java.lang.Object |
unmarshalStaxSource(javax.xml.transform.Source staxSource)
Template method for handling
StaxSource s. |
protected java.lang.Object |
unmarshalStreamSource(javax.xml.transform.stream.StreamSource streamSource)
Template method for handling
StreamSource s. |
protected java.lang.Object |
unmarshalStreamSourceNoExternalEntitities(javax.xml.transform.stream.StreamSource streamSource)
Template method for handling
StreamSource s with protection against
the XML External Entity (XXE) processing vulnerability taking into account
the value of the setProcessExternalEntities(boolean) property. |
protected abstract java.lang.Object |
unmarshalXmlEventReader(javax.xml.stream.XMLEventReader eventReader)
Abstract template method for unmarshalling from a given Stax
XMLEventReader . |
protected abstract java.lang.Object |
unmarshalXmlStreamReader(javax.xml.stream.XMLStreamReader streamReader)
Abstract template method for unmarshalling from a given Stax
XMLStreamReader . |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
supports
supports
protected final Log logger
private javax.xml.parsers.DocumentBuilderFactory documentBuilderFactory
private final java.lang.Object documentBuilderFactoryMonitor
private boolean processExternalEntities
public void setProcessExternalEntities(boolean processExternalEntities)
Default is false
, meaning that external entities are not resolved.
Note that processing of external entities will only be enabled/disabled when the
Source
passed to unmarshal(Source)
is a SAXSource
or
StreamSource
. It has no effect for DOMSource
or StAXSource
instances.
public boolean isProcessExternalEntities()
protected abstract java.lang.String getDefaultEncoding()
null
.public final void marshal(java.lang.Object graph, javax.xml.transform.Result result) throws java.io.IOException, XmlMappingException
javax.xml.transform.Result
.
This implementation inspects the given result, and calls marshalDomResult
,
marshalSaxResult
, or marshalStreamResult
.
marshal
in interface Marshaller
graph
- the root of the object graph to marshalresult
- the result to marshal tojava.io.IOException
- if an I/O exception occursXmlMappingException
- if the given object cannot be marshalled to the resultjava.lang.IllegalArgumentException
- if result
if neither a DOMResult
,
a SAXResult
, nor a StreamResult
marshalDomResult(Object, javax.xml.transform.dom.DOMResult)
,
marshalSaxResult(Object, javax.xml.transform.sax.SAXResult)
,
marshalStreamResult(Object, javax.xml.transform.stream.StreamResult)
public final java.lang.Object unmarshal(javax.xml.transform.Source source) throws java.io.IOException, XmlMappingException
javax.xml.transform.Source
into an object graph.
This implementation inspects the given result, and calls unmarshalDomSource
,
unmarshalSaxSource
, or unmarshalStreamSource
.
unmarshal
in interface Unmarshaller
source
- the source to marshal fromjava.io.IOException
- if an I/O Exception occursXmlMappingException
- if the given source cannot be mapped to an objectjava.lang.IllegalArgumentException
- if source
is neither a DOMSource
,
a SAXSource
, nor a StreamSource
unmarshalDomSource(javax.xml.transform.dom.DOMSource)
,
unmarshalSaxSource(javax.xml.transform.sax.SAXSource)
,
unmarshalStreamSource(javax.xml.transform.stream.StreamSource)
protected javax.xml.parsers.DocumentBuilder createDocumentBuilder(javax.xml.parsers.DocumentBuilderFactory factory) throws javax.xml.parsers.ParserConfigurationException
DocumentBuilder
that this marshaller will use for creating
DOM documents when passed an empty DOMSource
.
Can be overridden in subclasses, adding further initialization of the builder.
factory
- the DocumentBuilderFactory
that the DocumentBuilder should be created withDocumentBuilder
javax.xml.parsers.ParserConfigurationException
- if thrown by JAXP methodsprotected javax.xml.parsers.DocumentBuilderFactory createDocumentBuilderFactory() throws javax.xml.parsers.ParserConfigurationException
DocumentBuilder
that this marshaller will use for creating
DOM documents when passed an empty DOMSource
.
The resulting DocumentBuilderFactory
is cached, so this method
will only be called once.
javax.xml.parsers.ParserConfigurationException
- if thrown by JAXP methodsprotected org.xml.sax.XMLReader createXmlReader() throws org.xml.sax.SAXException
XMLReader
that this marshaller will when passed an empty SAXSource
.org.xml.sax.SAXException
- if thrown by JAXP methodsprotected void marshalDomResult(java.lang.Object graph, javax.xml.transform.dom.DOMResult domResult) throws XmlMappingException
DOMResult
s.
This implementation delegates to marshalDomNode
.
graph
- the root of the object graph to marshaldomResult
- the DOMResult
XmlMappingException
- if the given object cannot be marshalled to the resultjava.lang.IllegalArgumentException
- if the domResult
is emptymarshalDomNode(Object, org.w3c.dom.Node)
protected void marshalStaxResult(java.lang.Object graph, javax.xml.transform.Result staxResult) throws XmlMappingException
StaxResult
s.
This implementation delegates to marshalXMLSteamWriter
or
marshalXMLEventConsumer
, depending on what is contained in the
StaxResult
.
graph
- the root of the object graph to marshalstaxResult
- a JAXP 1.4 StAXSource
XmlMappingException
- if the given object cannot be marshalled to the resultjava.lang.IllegalArgumentException
- if the domResult
is emptymarshalDomNode(Object, org.w3c.dom.Node)
protected void marshalSaxResult(java.lang.Object graph, javax.xml.transform.sax.SAXResult saxResult) throws XmlMappingException
SAXResult
s.
This implementation delegates to marshalSaxHandlers
.
graph
- the root of the object graph to marshalsaxResult
- the SAXResult
XmlMappingException
- if the given object cannot be marshalled to the resultmarshalSaxHandlers(Object, org.xml.sax.ContentHandler, org.xml.sax.ext.LexicalHandler)
protected void marshalStreamResult(java.lang.Object graph, javax.xml.transform.stream.StreamResult streamResult) throws XmlMappingException, java.io.IOException
StreamResult
s.
This implementation delegates to marshalOutputStream
or marshalWriter
,
depending on what is contained in the StreamResult
graph
- the root of the object graph to marshalstreamResult
- the StreamResult
java.io.IOException
- if an I/O Exception occursXmlMappingException
- if the given object cannot be marshalled to the resultjava.lang.IllegalArgumentException
- if streamResult
does neither
contain an OutputStream
nor a Writer
protected java.lang.Object unmarshalDomSource(javax.xml.transform.dom.DOMSource domSource) throws XmlMappingException
DOMSource
s.
This implementation delegates to unmarshalDomNode
.
If the given source is empty, an empty source Document
will be created as a placeholder.
domSource
- the DOMSource
XmlMappingException
- if the given source cannot be mapped to an objectjava.lang.IllegalArgumentException
- if the domSource
is emptyunmarshalDomNode(org.w3c.dom.Node)
protected java.lang.Object unmarshalStaxSource(javax.xml.transform.Source staxSource) throws XmlMappingException
StaxSource
s.
This implementation delegates to unmarshalXmlStreamReader
or
unmarshalXmlEventReader
.
staxSource
- the StaxSource
XmlMappingException
- if the given source cannot be mapped to an objectprotected java.lang.Object unmarshalSaxSource(javax.xml.transform.sax.SAXSource saxSource) throws XmlMappingException, java.io.IOException
SAXSource
s.
This implementation delegates to unmarshalSaxReader
.
saxSource
- the SAXSource
XmlMappingException
- if the given source cannot be mapped to an objectjava.io.IOException
- if an I/O Exception occursunmarshalSaxReader(org.xml.sax.XMLReader, org.xml.sax.InputSource)
protected java.lang.Object unmarshalStreamSourceNoExternalEntitities(javax.xml.transform.stream.StreamSource streamSource) throws XmlMappingException, java.io.IOException
StreamSource
s with protection against
the XML External Entity (XXE) processing vulnerability taking into account
the value of the setProcessExternalEntities(boolean)
property.
The default implementation wraps the StreamSource as a SAXSource and delegates
to unmarshalSaxSource(javax.xml.transform.sax.SAXSource)
.
streamSource
- the StreamSource
java.io.IOException
- if an I/O exception occursXmlMappingException
- if the given source cannot be mapped to an objectprotected java.lang.Object unmarshalStreamSource(javax.xml.transform.stream.StreamSource streamSource) throws XmlMappingException, java.io.IOException
StreamSource
s.
This implementation defers to unmarshalInputStream
or unmarshalReader
.
As of 3.2.8 and 4.0.2 this method is no longer invoked from
unmarshal(javax.xml.transform.Source)
. The method invoked instead is
unmarshalStreamSourceNoExternalEntitities(javax.xml.transform.stream.StreamSource)
.
streamSource
- the StreamSource
java.io.IOException
- if an I/O exception occursXmlMappingException
- if the given source cannot be mapped to an objectprotected abstract void marshalDomNode(java.lang.Object graph, org.w3c.dom.Node node) throws XmlMappingException
Node
.
In practice, node is be a Document
node, a DocumentFragment
node,
or a Element
node. In other words, a node that accepts children.
graph
- the root of the object graph to marshalnode
- the DOM node that will contain the result treeXmlMappingException
- if the given object cannot be marshalled to the DOM nodeDocument
,
DocumentFragment
,
Element
protected abstract void marshalXmlEventWriter(java.lang.Object graph, javax.xml.stream.XMLEventWriter eventWriter) throws XmlMappingException
XMLEventWriter
.graph
- the root of the object graph to marshaleventWriter
- the XMLEventWriter
to write toXmlMappingException
- if the given object cannot be marshalled to the DOM nodeprotected abstract void marshalXmlStreamWriter(java.lang.Object graph, javax.xml.stream.XMLStreamWriter streamWriter) throws XmlMappingException
XMLStreamWriter
.graph
- the root of the object graph to marshalstreamWriter
- the XMLStreamWriter
to write toXmlMappingException
- if the given object cannot be marshalled to the DOM nodeprotected abstract void marshalSaxHandlers(java.lang.Object graph, org.xml.sax.ContentHandler contentHandler, org.xml.sax.ext.LexicalHandler lexicalHandler) throws XmlMappingException
ContentHandler
.graph
- the root of the object graph to marshalcontentHandler
- the SAX ContentHandler
lexicalHandler
- the SAX2 LexicalHandler
. Can be null
.XmlMappingException
- if the given object cannot be marshalled to the handlersprotected abstract void marshalOutputStream(java.lang.Object graph, java.io.OutputStream outputStream) throws XmlMappingException, java.io.IOException
OutputStream
.graph
- the root of the object graph to marshaloutputStream
- the OutputStream
to write toXmlMappingException
- if the given object cannot be marshalled to the writerjava.io.IOException
- if an I/O exception occursprotected abstract void marshalWriter(java.lang.Object graph, java.io.Writer writer) throws XmlMappingException, java.io.IOException
Writer
.graph
- the root of the object graph to marshalwriter
- the Writer
to write toXmlMappingException
- if the given object cannot be marshalled to the writerjava.io.IOException
- if an I/O exception occursprotected abstract java.lang.Object unmarshalDomNode(org.w3c.dom.Node node) throws XmlMappingException
Node
.node
- the DOM node that contains the objects to be unmarshalledXmlMappingException
- if the given DOM node cannot be mapped to an objectprotected abstract java.lang.Object unmarshalXmlEventReader(javax.xml.stream.XMLEventReader eventReader) throws XmlMappingException
XMLEventReader
.eventReader
- the XMLEventReader
to read fromXmlMappingException
- if the given event reader cannot be converted to an objectprotected abstract java.lang.Object unmarshalXmlStreamReader(javax.xml.stream.XMLStreamReader streamReader) throws XmlMappingException
XMLStreamReader
.streamReader
- the XMLStreamReader
to read fromXmlMappingException
- if the given stream reader cannot be converted to an objectprotected abstract java.lang.Object unmarshalSaxReader(org.xml.sax.XMLReader xmlReader, org.xml.sax.InputSource inputSource) throws XmlMappingException, java.io.IOException
XMLReader
and InputSource
.xmlReader
- the SAX XMLReader
to parse withinputSource
- the input source to parse fromXmlMappingException
- if the given reader and input source cannot be converted to an objectjava.io.IOException
- if an I/O exception occursprotected abstract java.lang.Object unmarshalInputStream(java.io.InputStream inputStream) throws XmlMappingException, java.io.IOException
InputStream
.inputStream
- the InputStreamStream
to read fromXmlMappingException
- if the given stream cannot be converted to an objectjava.io.IOException
- if an I/O exception occursprotected abstract java.lang.Object unmarshalReader(java.io.Reader reader) throws XmlMappingException, java.io.IOException
Reader
.reader
- the Reader
to read fromXmlMappingException
- if the given reader cannot be converted to an objectjava.io.IOException
- if an I/O exception occurs