public class StAXOMBuilder extends StAXBuilder
This class supports the XMLStreamReader extension defined by
DataHandlerReader as well as the legacy extension mechanism
defined in the documentation of XMLStreamReaderUtils.
Typically the client code will have some error handling that will intercept runtime exceptions and take appropriate action. Very often this error handling code might want to access the object model again, for example to log the request that caused the failure. This causes no problem except if the runtime exception was caused by a parsing error, in which case Axiom would again try to pull events from the parser.
This would lead to a situation where Axiom accesses a parser that has reported a parsing
error before. While one would expect that after a first error reported by the parser, all
subsequent invocations of the parser will fail, this is not the case for all parsers
(at least not in all situations). Instead, the parser might be left in an inconsistent
state after the error. E.g. AXIOM-34 describes a case where Woodstox
encounters an error in XMLStreamReader.getText() but continues to return
(incorrect) events afterwards. The explanation for this behaviour might be that
the situation described here is quite uncommon when StAX is used directly (i.e. not through
Axiom).
To avoid this, the builder remembers exceptions thrown by the parser and rethrows
them during a call to next().
| Modifier and Type | Field and Description |
|---|---|
private boolean |
doTrace |
private static org.apache.commons.logging.Log |
log |
private int |
lookAheadToken |
private boolean |
namespaceURIInterning |
private static int |
nsCount
Deprecated.
|
_isClosed, _releaseParserOnClose, cache, charEncoding, customBuilderForPayload, customBuilders, dataHandlerReader, document, done, elementLevel, maxDepthForCustomBuilders, omfactory, parser, parserAccessed, parserException, target| Constructor and Description |
|---|
StAXOMBuilder()
Deprecated.
|
StAXOMBuilder(java.io.InputStream inStream) |
StAXOMBuilder(OMFactory ombuilderFactory,
javax.xml.stream.XMLStreamReader parser)
Constructor StAXOMBuilder.
|
StAXOMBuilder(OMFactory factory,
javax.xml.stream.XMLStreamReader parser,
OMElement element)
Constructor linked to existing element.
|
StAXOMBuilder(OMFactory factory,
javax.xml.stream.XMLStreamReader parser,
OMElement element,
java.lang.String characterEncoding)
Constructor linked to existing element.
|
StAXOMBuilder(java.lang.String filePath) |
StAXOMBuilder(javax.xml.stream.XMLStreamReader parser)
Constructor StAXOMBuilder.
|
| Modifier and Type | Method and Description |
|---|---|
protected OMElement |
constructNode(OMContainer parent,
java.lang.String elementName)
Instantiate the appropriate
OMElement implementation for the current element. |
protected OMNode |
createComment()
Method createOMText.
|
protected OMDocument |
createDocument() |
protected OMNode |
createDTD()
Method createDTD.
|
protected OMNode |
createEntityReference() |
protected OMNode |
createNextOMElement()
Creates a new OMElement using either a CustomBuilder or
the default Builder mechanism.
|
protected OMNode |
createOMElement()
Method createOMElement.
|
protected OMNode |
createPI()
Method createPI.
|
protected java.lang.String |
createPrefix()
Deprecated.
A builder doesn't need to generate prefixes.
|
protected OMNode |
createWithCustomBuilder(CustomBuilder customBuilder,
OMFactory factory) |
private void |
endElement() |
OMElement |
getDocumentElement()
Get the document element, i.e.
|
OMElement |
getDocumentElement(boolean discardDocument)
Get the document element, optionally discarding the document.
|
private java.lang.String |
getDTDText()
The getText() method for a DOCTYPE returns the
subset of the DOCTYPE (not the direct infoset).
|
boolean |
isLookahead()
Check if the node for the current token has already been created or if the parser is ahead
of the builder.
|
boolean |
isNamespaceURIInterning() |
protected void |
logParserState()
Dump the current event of the parser.
|
boolean |
lookahead()
This method looks ahead to the next start element.
|
int |
next()
Method next.
|
(package private) int |
parserNext()
Pushes the virtual parser ahead one token.
|
private void |
populateOMElement(OMElement node)
Populate element with data from parser START_ELEMENT event.
|
protected void |
processNamespaceData(OMElement node)
Method processNamespaceData.
|
void |
setDoDebug(boolean doDebug)
Deprecated.
|
void |
setNamespaceURIInterning(boolean b)
Set namespace uri interning
|
close, createDocumentIfNecessary, createOMText, debugDiscarded, discard, discard, getAttributeCount, getAttributeName, getAttributeNamespace, getAttributePrefix, getBuilderType, getCharacterEncoding, getCharsetEncoding, getCustomBuilder, getDocument, getName, getNamespace, getNamespaceCount, getNamespacePrefix, getNamespaceUri, getParser, getPrefix, getReaderProperty, getRegisteredContentHandler, getText, init, isCache, isClosed, isCompleted, processAttributes, registerCustomBuilder, registerCustomBuilderForPayload, registerExternalContentHandler, releaseParserOnClose, setCache, setOMBuilderFactoryprivate static final org.apache.commons.logging.Log log
private boolean doTrace
private static int nsCount
private boolean namespaceURIInterning
private int lookAheadToken
public StAXOMBuilder(OMFactory ombuilderFactory, javax.xml.stream.XMLStreamReader parser)
ombuilderFactory - parser - public StAXOMBuilder(OMFactory factory, javax.xml.stream.XMLStreamReader parser, OMElement element, java.lang.String characterEncoding)
factory - parser - element - characterEncoding - of existing elementpublic StAXOMBuilder(OMFactory factory, javax.xml.stream.XMLStreamReader parser, OMElement element)
factory - parser - element - public StAXOMBuilder(java.lang.String filePath)
throws javax.xml.stream.XMLStreamException,
java.io.FileNotFoundException
filePath - - Path to the XML filejavax.xml.stream.XMLStreamExceptionjava.io.FileNotFoundExceptionpublic StAXOMBuilder(javax.xml.stream.XMLStreamReader parser)
parser - public StAXOMBuilder(java.io.InputStream inStream)
throws javax.xml.stream.XMLStreamException
inStream - - instream which contains the XMLjavax.xml.stream.XMLStreamExceptionpublic StAXOMBuilder()
protected OMDocument createDocument()
createDocument in class StAXBuilderpublic int next()
throws OMException
next in interface OMXMLParserWrappernext in class StAXBuilderOMExceptionprotected OMNode createNextOMElement()
protected OMNode createWithCustomBuilder(CustomBuilder customBuilder, OMFactory factory)
protected void logParserState()
private void populateOMElement(OMElement node)
node - element to be populatedprotected final OMNode createOMElement() throws OMException
createOMElement in class StAXBuilderOMExceptionprotected OMElement constructNode(OMContainer parent, java.lang.String elementName)
OMElement implementation for the current element. This
method may be overridden by subclasses to support model specific OMElement types. The
implementation of this method is expected to initialize the OMElement with the
specified local name and to add it to the specified parent. However, the implementation
should not set the namespace of the element or process the attributes of the element. This is
taken care of by the caller of this method.parent - the parent for the elementelementName - the local name for the elementOMElement; must not be nullprotected OMNode createComment() throws OMException
OMExceptionprotected OMNode createDTD() throws OMException
OMExceptionprivate java.lang.String getDTDText()
throws OMException
OMExceptionprotected OMNode createPI() throws OMException
OMExceptionprotected OMNode createEntityReference()
private void endElement()
public OMElement getDocumentElement()
OMXMLParserWrapperOMDocument.getOMDocumentElement() on the document returned by
OMXMLParserWrapper.getDocument().
Note that this method will never return null (except in the very special case
where the document has been requested before and the document element has been removed
explicitly): if the document being parsed has no document element, then this will result in a
parser error, i.e. an OMException will be thrown.
public OMElement getDocumentElement(boolean discardDocument)
OMXMLParserWrapperOMXMLParserWrapper.getDocumentElement(). However, if the discardDocument
parameter is set to true, then the document element is removed from the document
and the document itself is discarded. In contrast to using OMNode.detach() this
will not build the element. The implementation also ensures that the element is not built
when it is added to another OM tree. This makes it possible to add the content of a document
to an existing OM tree while preserving the deferred parsing feature. It is even possible to
create an OM tree where different subtrees are associated with different builder instances.discardDocument - specifies whether the document should be discardedprotected void processNamespaceData(OMElement node)
processNamespaceData in class StAXBuildernode - public void setDoDebug(boolean doDebug)
doDebug - protected java.lang.String createPrefix()
public void setNamespaceURIInterning(boolean b)
b - public boolean isNamespaceURIInterning()
int parserNext()
throws javax.xml.stream.XMLStreamException
parserNext in class StAXBuilderjavax.xml.stream.XMLStreamExceptionpublic boolean lookahead()
public boolean isLookahead()
true indicates that the parser is one token ahead
of the builder, i.e. that the node for the current token has not been created yet.
This state can only be reached by a call to lookahead(), and the
current token is always a START_ELEMENT.
The information related to that element can be obtained by calls to
StAXBuilder.getName(), StAXBuilder.getNamespace(), StAXBuilder.getPrefix(),
StAXBuilder.getAttributeCount(), StAXBuilder.getAttributeName(int),
StAXBuilder.getAttributeNamespace(int), StAXBuilder.getAttributePrefix(int),
StAXBuilder.getNamespaceCount(), StAXBuilder.getNamespacePrefix(int) and
StAXBuilder.getNamespaceUri(int).
A return value of false indicates that the node corresponding to the
current token hold by the parser has already been created.