in core/src/main/java/org/apache/cxf/staxutils/transform/InTransformReader.java [95:200]
public int next() throws XMLStreamException {
final boolean doDebug = LOG.isLoggable(Level.FINE);
if (!pushedBackEvents.isEmpty()) {
// consume events from the pushed back stack
currentEvent = pushedBackEvents.remove(0);
if (doDebug) {
LOG.fine("pushed event available: " + currentEvent);
}
return currentEvent.getEvent();
}
if (doDebug) {
LOG.fine("no pushed event");
}
int event = super.next();
if (event == XMLStreamConstants.START_ELEMENT) {
attributesIndexed = false;
namespaceContext.down();
final QName theName = super.getName();
final ElementProperty appendProp = inAppendMap.remove(theName);
final boolean replaceContent = appendProp != null && theName.equals(appendProp.getName());
if (doDebug) {
LOG.fine("read StartElement " + theName + " at " + getDepth());
}
final boolean dropped = inDropSet.contains(theName);
QName expected = inElementsMap.get(theName);
if (expected == null) {
expected = theName;
} else {
String prefix = theName.getPrefix();
if (prefix.isEmpty() && theName.getNamespaceURI().isEmpty()
&& !expected.getNamespaceURI().isEmpty()) {
prefix = namespaceContext.getPrefix(expected.getNamespaceURI());
if (prefix == null) {
prefix = namespaceContext.findUniquePrefix(expected.getNamespaceURI());
}
} else if (!prefix.isEmpty() && expected.getNamespaceURI().isEmpty()) {
prefix = "";
}
expected = new QName(expected.getNamespaceURI(), expected.getLocalPart(), prefix);
}
if (null != appendProp && !replaceContent) {
// handle one of the four append modes
handleAppendMode(expected, appendProp);
} else if (null != appendProp && replaceContent) {
replaceText = appendProp.getText();
if (doDebug) {
LOG.fine("replacing content with " + replaceText);
}
currentEvent = TransformUtils.createStartElementEvent(expected);
pushedAheadEvents.add(0, null);
} else if (dropped) {
if (doDebug) {
LOG.fine("shallow-dropping start " + expected);
}
// unwrap the current element (shallow drop)
event = next();
} else if (TransformUtils.isEmptyQName(expected)) {
// skip the current element (deep drop)
if (doDebug) {
LOG.fine("deep-dropping " + theName);
}
handleDeepDrop();
event = next();
} else {
handleDefaultMode(theName, expected);
}
} else if (event == XMLStreamConstants.END_ELEMENT) {
final QName theName = super.getName();
if (doDebug) {
LOG.fine("read EndElement " + theName + " at " + getDepth());
}
namespaceContext.up();
final boolean dropped = inDropSet.contains(theName);
if (!dropped && !pushedAheadEvents.isEmpty()) {
List<ParsingEvent> pe = pushedAheadEvents.remove(0);
if (null != pe) {
if (doDebug) {
LOG.fine("pushed event found");
}
pushedBackEvents.addAll(0, pe);
currentEvent = pushedBackEvents.remove(0);
event = currentEvent.getEvent();
} else {
if (doDebug) {
LOG.fine("no pushed event found");
}
}
} else {
if (doDebug) {
LOG.fine("shallow-dropping end " + theName);
}
event = next();
}
} else {
if (doDebug) {
LOG.fine("read other event " + event);
}
currentEvent = null;
}
return event;
}