public int next()

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;
    }