in mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomElementMixin.java [182:218]
public Reader getTextAsStream(boolean cache) {
// If the element is not an OMSourcedElement and has not more than one child, then the most
// efficient way to get the Reader is to build a StringReader
if (!(this instanceof OMSourcedElement) && (!cache || isComplete())) {
OMNode child = getFirstOMChild();
if (child == null) {
return new StringReader("");
} else if (child.getNextOMSibling() == null) {
return new StringReader(child instanceof OMText ? ((OMText) child).getText() : "");
}
}
// In all other cases, extract the data from the XMLStreamReader
try {
final XMLStreamReader reader = getXMLStreamReader(cache);
if (reader.getEventType() == XMLStreamReader.START_DOCUMENT) {
reader.next();
}
Reader stream = XMLStreamReaderUtils.getElementTextAsStream(reader, true);
if (!cache) {
// If caching is disabled, we need to close the XMLStreamReader to reenable it
stream =
new FilterReader(stream) {
@Override
public void close() throws IOException {
try {
reader.close();
} catch (XMLStreamException ex) {
throw new XMLStreamIOException(ex);
}
}
};
}
return stream;
} catch (XMLStreamException ex) {
throw new OMException(ex);
}
}