in core/src/main/java/org/apache/cxf/staxutils/StaxUtils.java [1410:1509]
public static void readDocElements(Document doc, Node parent, XMLStreamReader reader, StreamToDOMContext context)
throws XMLStreamException {
int event = reader.getEventType();
while (reader.hasNext()) {
switch (event) {
case XMLStreamConstants.START_ELEMENT: {
context.incrementCount();
Element e;
if (!StringUtils.isEmpty(reader.getPrefix())) {
e = doc.createElementNS(reader.getNamespaceURI(),
reader.getPrefix() + ":" + reader.getLocalName());
} else {
e = doc.createElementNS(reader.getNamespaceURI(), reader.getLocalName());
}
e = (Element)parent.appendChild(e);
if (context.isRecordLoc()) {
context.setRecordLoc(addLocation(doc, e, reader.getLocation(), context.isRecordLoc()));
}
for (int ns = 0; ns < reader.getNamespaceCount(); ns++) {
String uri = reader.getNamespaceURI(ns);
String prefix = reader.getNamespacePrefix(ns);
declare(e, uri, prefix);
}
for (int att = 0; att < reader.getAttributeCount(); att++) {
String name = reader.getAttributeLocalName(att);
String prefix = reader.getAttributePrefix(att);
if (prefix != null && prefix.length() > 0) {
name = prefix + ":" + name;
}
Attr attr = doc.createAttributeNS(reader.getAttributeNamespace(att), name);
attr.setValue(reader.getAttributeValue(att));
e.setAttributeNode(attr);
}
if (context.isRepairing() && !isDeclared(e, reader.getNamespaceURI(), reader.getPrefix())) {
declare(e, reader.getNamespaceURI(), reader.getPrefix());
}
context.pushToStack(parent);
if (context.isThreshold() && MAX_ELEMENT_DEPTH_VAL != -1
&& context.getStackSize() >= MAX_ELEMENT_DEPTH_VAL) {
throw new DepthExceededStaxException("reach the innerElementLevelThreshold:"
+ MAX_ELEMENT_DEPTH_VAL);
}
if (context.isThreshold() && MAX_CHILD_ELEMENTS_VAL != -1
&& context.getCount() >= MAX_CHILD_ELEMENTS_VAL) {
throw new DepthExceededStaxException("reach the innerElementCountThreshold:"
+ MAX_CHILD_ELEMENTS_VAL);
}
parent = e;
break;
}
case XMLStreamConstants.END_ELEMENT:
if (context.isStackEmpty()) {
return;
}
parent = context.popFromStack();
if (parent instanceof Document || parent instanceof DocumentFragment) {
return;
}
break;
case XMLStreamConstants.NAMESPACE:
break;
case XMLStreamConstants.ATTRIBUTE:
break;
case XMLStreamConstants.CHARACTERS:
if (parent != null) {
context.setRecordLoc(addLocation(doc,
parent.appendChild(doc.createTextNode(reader.getText())),
reader.getLocation(), context.isRecordLoc()));
}
break;
case XMLStreamConstants.COMMENT:
if (parent != null) {
parent.appendChild(doc.createComment(reader.getText()));
}
break;
case XMLStreamConstants.CDATA:
context.setRecordLoc(addLocation(doc,
parent.appendChild(doc.createCDATASection(reader.getText())),
reader.getLocation(), context.isRecordLoc()));
break;
case XMLStreamConstants.PROCESSING_INSTRUCTION:
parent.appendChild(doc.createProcessingInstruction(reader.getPITarget(), reader.getPIData()));
break;
case XMLStreamConstants.ENTITY_REFERENCE:
parent.appendChild(doc.createProcessingInstruction(reader.getPITarget(), reader.getPIData()));
break;
default:
break;
}
if (reader.hasNext()) {
event = reader.next();
}
}
}