Example usage for javax.xml.stream.events XMLEvent asStartElement

List of usage examples for javax.xml.stream.events XMLEvent asStartElement

Introduction

In this page you can find the example usage for javax.xml.stream.events XMLEvent asStartElement.

Prototype

public StartElement asStartElement();

Source Link

Document

Returns this event as a start element event, may result in a class cast exception if this event is not a start element.

Usage

From source file:ca.uhn.fhir.parser.XmlParser.java

private <T> T doXmlLoop(XMLEventReader streamReader, ParserState<T> parserState) {
    ourLog.trace("Entering XML parsing loop with state: {}", parserState);

    try {/*from ww w .jav a2  s .c  o m*/
        List<String> heldComments = new ArrayList<String>(1);

        while (streamReader.hasNext()) {
            XMLEvent nextEvent = streamReader.nextEvent();
            try {

                switch (nextEvent.getEventType()) {
                case XMLStreamConstants.START_ELEMENT: {
                    StartElement elem = nextEvent.asStartElement();

                    String namespaceURI = elem.getName().getNamespaceURI();

                    if ("extension".equals(elem.getName().getLocalPart())) {
                        Attribute urlAttr = elem.getAttributeByName(new QName("url"));
                        String url;
                        if (urlAttr == null || isBlank(urlAttr.getValue())) {
                            getErrorHandler().missingRequiredElement(new ParseLocation("extension"), "url");
                            url = null;
                        } else {
                            url = urlAttr.getValue();
                        }
                        parserState.enteringNewElementExtension(elem, url, false);
                    } else if ("modifierExtension".equals(elem.getName().getLocalPart())) {
                        Attribute urlAttr = elem.getAttributeByName(new QName("url"));
                        String url;
                        if (urlAttr == null || isBlank(urlAttr.getValue())) {
                            getErrorHandler().missingRequiredElement(new ParseLocation("modifierExtension"),
                                    "url");
                            url = null;
                        } else {
                            url = urlAttr.getValue();
                        }
                        parserState.enteringNewElementExtension(elem, url, true);
                    } else {
                        String elementName = elem.getName().getLocalPart();
                        parserState.enteringNewElement(namespaceURI, elementName);
                    }

                    if (!heldComments.isEmpty()) {
                        for (String next : heldComments) {
                            parserState.commentPre(next);
                        }
                        heldComments.clear();
                    }

                    @SuppressWarnings("unchecked")
                    Iterator<Attribute> attributes = elem.getAttributes();
                    for (Iterator<Attribute> iter = attributes; iter.hasNext();) {
                        Attribute next = iter.next();
                        parserState.attributeValue(next.getName().getLocalPart(), next.getValue());
                    }

                    break;
                }
                case XMLStreamConstants.END_DOCUMENT:
                case XMLStreamConstants.END_ELEMENT: {
                    if (!heldComments.isEmpty()) {
                        for (String next : heldComments) {
                            parserState.commentPost(next);
                        }
                        heldComments.clear();
                    }
                    parserState.endingElement();
                    //                  if (parserState.isComplete()) {
                    //                     return parserState.getObject();
                    //                  }
                    break;
                }
                case XMLStreamConstants.CHARACTERS: {
                    parserState.string(nextEvent.asCharacters().getData());
                    break;
                }
                case XMLStreamConstants.COMMENT: {
                    Comment comment = (Comment) nextEvent;
                    String commentText = comment.getText();
                    heldComments.add(commentText);
                    break;
                }
                }

                parserState.xmlEvent(nextEvent);

            } catch (DataFormatException e) {
                throw new DataFormatException("DataFormatException at [" + nextEvent.getLocation().toString()
                        + "]: " + e.getMessage(), e);
            }
        }
        return parserState.getObject();
    } catch (XMLStreamException e) {
        throw new DataFormatException(e);
    }
}

From source file:edu.unc.lib.dl.util.TripleStoreQueryServiceMulgaraImpl.java

/**
 * @param query//from   w ww. j a va  2 s  .c o  m
 *            an ITQL command
 * @return the message returned by Mulgara
 * @throws RemoteException
 *             for communication failure
 */
public String storeCommand(String query) {
    String result = null;
    String response = this.sendTQL(query);
    if (response != null) {
        XMLInputFactory factory = XMLInputFactory.newInstance();
        factory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);
        try (StringReader sr = new StringReader(response)) {
            XMLEventReader r = factory.createXMLEventReader(sr);
            boolean inMessage = false;
            StringBuffer message = new StringBuffer();
            while (r.hasNext()) {
                XMLEvent e = r.nextEvent();
                if (e.isStartElement()) {
                    StartElement s = e.asStartElement();
                    if ("message".equals(s.getName().getLocalPart())) {
                        inMessage = true;
                    }
                } else if (e.isEndElement()) {
                    EndElement end = e.asEndElement();
                    if ("message".equals(end.getName().getLocalPart())) {
                        inMessage = false;
                    }
                } else if (inMessage && e.isCharacters()) {
                    message.append(e.asCharacters().getData());
                }
            }
            r.close();
            result = message.toString();
        } catch (XMLStreamException e) {
            e.printStackTrace();
        }
    }
    return result;
}

From source file:com.prowidesoftware.swift.model.mx.XmlEventWriter.java

public void add(final XMLEvent event) throws XMLStreamException {
    if (event != null) {
        log.finest("XmlEventType: " + event.getEventType());
        try {/*from   ww  w . jav  a 2  s  .c  o m*/
            final int type = event.getEventType();
            switch (type) {
            case XMLEvent.START_DOCUMENT:
                if (this.includeXMLDeclaration) {
                    log.finer(">> START_DOCUMENT");
                    log.finer("START_DOCUMENT XMLEvent " + ToStringBuilder.reflectionToString(event));
                    final String str = "<?xml version=\"1.0\" encoding=\""
                            + ((StartDocument) event).getCharacterEncodingScheme() + "\"?>";
                    out.write(str);
                    logStep(str);
                } else {
                    log.finer("skipping xml declaration");
                }
                break;

            case XMLEvent.START_ELEMENT:
                this.startElementCount++;
                closeStartTagIfNeeded();
                log.finer(">> START_ELEMENT");
                indent.append(' ');
                final StartElement se = event.asStartElement();
                @SuppressWarnings("rawtypes")
                final Iterator it = se.getNamespaces();
                while (it.hasNext()) {
                    log.fine("ns: " + it.next());
                }
                /*---------------------------------------------------------------------------------------
                 * 2015.03 miguel
                 * Cuidado con esta condicion! esto generaba el bug de que no abria el Document anidado dentro del xs:any
                 * Esto es porque este document delayed solo se completa cuando recibe un namespace, pensado como elemento inicial
                 * esto DEEEEBEEEEEEEEEEe corregirse cuando se cambie la serializacion, si se cambia
                 * porque si el document queda dentro de un elemento payload, entonces en count es != 1 y debe revisarse como se identifica el primer 
                 * document y un document anidado.
                 *  
                 */
                if (StringUtils.equals(se.getName().getLocalPart(), this.rootElement)
                        && this.startElementCount == 1) { // 2015.03 miguel: ESTE era el bug de esprow, que aparecian tags anidados de document cerrando que no abria, era porque entraban por aca sin esta condicion de depth count
                    delayedStart = se;
                    log.finer("local part is Document, initializing delayed start, startElementCount="
                            + this.startElementCount);
                } else {
                    final String s = "\n" + indent + "<" + prefix() + se.getName().getLocalPart() /* + ">" */;
                    out.write(s);

                    logStep(s);

                    /* 2014.11 miguel
                     * para soportar atributos en lugar de cerrar aca seteamos un flag para indicar 
                     * que hace falta cerrar el startTag
                     */
                    startTagIncomplete = true;
                    if (se.isNamespace()) {
                        log.fine("is ns in start XMLEvent " + ToStringBuilder.reflectionToString(event));
                    }
                }
                break;

            case XMLEvent.NAMESPACE:
                log.finer(">> NAMESPACE");
                final Namespace ne = (Namespace) event;
                if (delayedStart != null) {
                    final String s = "\n" + indent + "<" + prefix() + delayedStart.getName().getLocalPart()
                            + " " + "xmlns" + (this.prefix != null ? ":" + this.prefix : "") + "=\""
                            + ne.getValue() + "\" xmlns:xsi=\"" + ne.getName() + "\"" + ">";
                    out.write(s);
                    logStep(s);
                    delayedStart = null;
                } else {
                    log.fine("NAMESPACE XMLEvent " + ToStringBuilder.reflectionToString(event));
                }
                break;

            case XMLEvent.CHARACTERS:
                log.finer(">> CHARACTERS");
                closeStartTagIfNeeded();
                final Characters ce = event.asCharacters();
                final char[] arr = ce.getData().toCharArray();
                out.write(escape(arr));
                logStep(ce.getData());
                break;

            case XMLEvent.END_ELEMENT:
                log.finer(">> END_ELEMENT");
                closeStartTagIfNeeded();
                indent.deleteCharAt(0);
                final EndElement ee = event.asEndElement();
                final String str2 = "</" + prefix() + ee.getName().getLocalPart() + ">\n" + indent;
                out.write(str2);
                logStep(str2);
                break;

            case XMLEvent.END_DOCUMENT:
                log.finer(">> END_DOCUMENT");
                closeStartTagIfNeeded();
                /*  2014.10 miguel
                 *  No need to do anything while writing to a string 
                 */
                log.finer("END_DOCUMENT XMLEvent " + ToStringBuilder.reflectionToString(event));
                break;

            case XMLEvent.ATTRIBUTE:
                log.finer(">> ATTRIBUTE");
                final Attribute a = (Attribute) event;
                final String str3 = " " + a.getName() + "=\"" + a.getValue() + "\" ";
                out.write(str3);
                log.fine(ToStringBuilder.reflectionToString(a));
                logStep(str3);
                break;

            default:
                log.info("getEventType " + event.getEventType());
                log.info("PW Unhandled XMLEvent " + ToStringBuilder.reflectionToString(event));
                break;
            }
        } catch (IOException e) {
            log.log(Level.SEVERE, "PW I/O error: " + e);
            log.log(Level.FINER, "PW I/O error: ", e);
            throw new XMLStreamException(e);
        }
    }
}

From source file:eu.delving.sip.xml.SourceConverter.java

public void parse(InputStream inputStream, OutputStream outputStream, Map<String, String> namespaces)
        throws StorageException {
    progressListener.prepareFor(totalRecords);
    //        anonymousRecords = Integer.parseInt(System.getProperty(ANONYMOUS_RECORDS_PROPERTY, "0"));
    Path path = Path.create();
    try {/*from  w  w  w. j a  v  a 2 s  .c o  m*/
        XMLEventReader in = inputFactory.createXMLEventReader(new StreamSource(inputStream, "UTF-8"));
        XMLEventWriter out = outputFactory.createXMLEventWriter(new OutputStreamWriter(outputStream, "UTF-8"));
        processEvents: while (!finished) {
            XMLEvent event = in.nextEvent();
            switch (event.getEventType()) {
            case XMLEvent.START_DOCUMENT:
                out.add(eventFactory.createStartDocument());
                out.add(eventFactory.createCharacters("\n"));
                List<Namespace> nslist = new ArrayList<Namespace>();
                for (Map.Entry<String, String> entry : namespaces.entrySet()) {
                    if (entry.getKey().isEmpty() || entry.getValue().trim().isEmpty())
                        continue;
                    if (XSI_SCHEMA.equals(entry.getValue()))
                        continue;
                    nslist.add(eventFactory.createNamespace(entry.getKey(), entry.getValue()));
                }
                out.add(eventFactory.createStartElement("", "", ENVELOPE_TAG, null, nslist.iterator()));
                out.add(eventFactory.createCharacters("\n"));
                break;
            case XMLEvent.START_ELEMENT:
                boolean followsStart = start != null;
                start = event.asStartElement();
                if (linesAvailable()) {
                    eventBuffer.add(eventFactory.createCharacters("\n"));
                    eventBuffer.add(eventFactory.createStartElement("", "", TEXT_TAG, null, null));
                    Iterator<String> walk = lines.iterator();
                    while (walk.hasNext()) {
                        eventBuffer.add(eventFactory.createCharacters(walk.next()));
                        if (walk.hasNext()) {
                            eventBuffer.add(eventFactory.createEndElement("", "", TEXT_TAG));
                            eventBuffer.add(eventFactory.createCharacters("\n"));
                            eventBuffer.add(eventFactory.createStartElement("", "", TEXT_TAG, null, null));
                        }
                    }
                    eventBuffer.add(eventFactory.createEndElement("", "", TEXT_TAG));
                    lines.clear();
                }
                path = path.child(Tag.element(start.getName()));
                handleStartElement(path, followsStart);
                progressListener.setProgress(recordCount);
                break;
            case XMLEvent.END_ELEMENT:
                EndElement end = event.asEndElement();
                if (recordEvents) {
                    if (path.equals(recordRootPath)) {
                        if (unique != null) {
                            outputRecord(out);
                            recordCount++;
                        } else {
                            clearEvents();
                        }
                    } else {
                        if (!uniqueElementPath.peek().isAttribute() && path.equals(uniqueElementPath)) {
                            unique = StringUtils.join(lines, "");
                        }
                        boolean addEndTag = true;
                        if (linesAvailable()) {
                            Iterator<String> walk = lines.iterator();
                            while (walk.hasNext()) {
                                eventBuffer.add(eventFactory.createCharacters(walk.next()));
                                if (walk.hasNext()) {
                                    eventBuffer.add(end);
                                    eventBuffer.add(eventFactory.createCharacters("\n"));
                                    handleStartElement(path, false);
                                }
                            }
                        } else {
                            if (eventBuffer.get(eventBuffer.size() - 1).isStartElement()) {
                                eventBuffer.remove(eventBuffer.size() - 1); // remove the start event
                                addEndTag = false;
                            }
                        }
                        lines.clear();
                        if (addEndTag) {
                            eventBuffer.add(end);
                            eventBuffer.add(eventFactory.createCharacters("\n"));
                        }
                    }
                }
                start = null;
                path = path.parent();
                break;
            case XMLEvent.END_DOCUMENT:
                out.add(eventFactory.createEndElement("", "", ENVELOPE_TAG));
                out.add(eventFactory.createCharacters("\n"));
                out.add(eventFactory.createEndDocument());
                out.flush();
                break processEvents;
            case XMLEvent.CHARACTERS:
            case XMLEvent.CDATA:
                if (recordEvents)
                    extractLines(event.asCharacters().getData());
                break;
            }
        }
    } catch (CancelException e) {
        throw new StorageException("Cancelled", e);
    } catch (StorageException e) {
        throw e;
    } catch (Exception e) {
        throw new StorageException("Storage problem", e);
    } finally {
        if (uniqueRepeatCount > 0) {
            progressListener.getFeedback().alert(String.format("Uniqueness violations : " + uniqueRepeatCount));
        }
        IOUtils.closeQuietly(inputStream);
        IOUtils.closeQuietly(outputStream);
    }
}

From source file:de.dfki.km.leech.parser.wikipedia.WikipediaDumpParser.java

@Override
public void parse(InputStream stream, ContentHandler handler, Metadata metadata, ParseContext context)
        throws IOException, SAXException, TikaException {

    try {//from   w ww .  j a  v a2s  .  co m

        // wir iterieren schn ber die page-Eintrge. Darin gibt es dann title, timestamp, <contributor> => <username> und text. den text mssen
        // wir noch bereinigen. dazu nehmen wir eine Vorverarbeitung mit bliki - dazu mssen wir aber selbst nochmal den String vorbereiten und
        // nachbereinigen. Leider.

        WikipediaDumpParserConfig wikipediaDumpParserConfig = context.get(WikipediaDumpParserConfig.class);

        if (wikipediaDumpParserConfig == null) {
            Logger.getLogger(WikipediaDumpParser.class.getName())
                    .info("No wikipedia parser config found. Will take the default one.");
            wikipediaDumpParserConfig = new WikipediaDumpParserConfig();
        }

        TikaInputStream tikaStream = TikaInputStream.get(stream);

        File fWikipediaDumpFile4Stream = tikaStream.getFile();

        MultiValueHashMap<String, String> hsPageTitle2Redirects = new MultiValueHashMap<String, String>();
        if (wikipediaDumpParserConfig.determinePageRedirects)
            hsPageTitle2Redirects = getPageTitle2Redirects(new FileInputStream(fWikipediaDumpFile4Stream));

        HashSet<String> hsRedirectPageTitles = new HashSet<String>(hsPageTitle2Redirects.values());

        String strCleanedText = "";
        String strBaseURL = null;

        XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
        XMLEventReader xmlEventReader = xmlInputFactory
                .createXMLEventReader(new FileInputStream(fWikipediaDumpFile4Stream), "Utf-8");
        while (xmlEventReader.hasNext()) {

            XMLEvent xmlEvent = xmlEventReader.nextEvent();

            if (xmlEvent.isEndElement() && xmlEvent.asEndElement().getName().getLocalPart().equals("page")) {
                if (metadata.size() == 0)
                    continue;

                // den mimetype wollen wir auch noch in den Metadaten haben
                metadata.add(Metadata.CONTENT_TYPE, "application/wikipedia+xml");

                XHTMLContentHandler xhtml = new XHTMLContentHandler(handler, metadata);
                xhtml.startDocument();

                xhtml.startElement("p");
                xhtml.characters(strCleanedText.toCharArray(), 0, strCleanedText.length());
                xhtml.endElement("p");

                xhtml.endDocument();

            }

            if (!xmlEvent.isStartElement())
                continue;

            // ##### die siteinfo

            if (strBaseURL == null && xmlEvent.asStartElement().getName().getLocalPart().equals("base")) {
                // http://de.wikipedia.org/wiki/Wikipedia:Hauptseite =>http://de.wikipedia.org/wiki/
                strBaseURL = readNextCharEventsText(xmlEventReader);
                strBaseURL = strBaseURL.substring(0, strBaseURL.lastIndexOf("/") + 1);
            }

            // ##### die page

            if (xmlEvent.asStartElement().getName().getLocalPart().equals("page")) {
                for (String strKey : metadata.names())
                    metadata.remove(strKey);
            }

            // ##### der Title

            if (xmlEvent.asStartElement().getName().getLocalPart().equals("title")) {
                // wir merken uns immer den aktuellen Titel
                String strCurrentTitle = readNextCharEventsText(xmlEventReader);

                if (strCurrentTitle.equalsIgnoreCase("DuckDuckGo")) {
                    int fasd = 8;
                }

                if (strCurrentTitle.toLowerCase().contains("duck")
                        && strCurrentTitle.toLowerCase().contains("go")) {
                    int is = 666;
                }

                // wenn der Titel eine redirect-Page ist, dann tragen wir die ganze Page aus der EventQueue aus, springen an das endPage, und
                // haben somit diese Seite ignoriert. Ferner ignorieren wir auch spezielle wikipedia-Seiten
                String strSmallTitle = strCurrentTitle.trim().toLowerCase();
                if (hsRedirectPageTitles.contains(strCurrentTitle)
                        || hsRedirectPageTitles.contains(strSmallTitle)
                        || hsRedirectPageTitles.contains(strCurrentTitle.trim())
                        || strSmallTitle.startsWith("category:") || strSmallTitle.startsWith("kategorie:")
                        || strSmallTitle.startsWith("vorlage:") || strSmallTitle.startsWith("template:")
                        || strSmallTitle.startsWith("hilfe:") || strSmallTitle.startsWith("help:")
                        || strSmallTitle.startsWith("wikipedia:") || strSmallTitle.startsWith("portal:")
                        || strSmallTitle.startsWith("mediawiki:")) {

                    while (true) {
                        XMLEvent nextXmlEvent = xmlEventReader.nextEvent();
                        if (nextXmlEvent.isEndElement()
                                && nextXmlEvent.asEndElement().getName().getLocalPart().equals("page"))
                            break;
                    }
                } else {
                    metadata.add(Metadata.TITLE, strCurrentTitle);
                    metadata.add(Metadata.SOURCE, strBaseURL + strCurrentTitle);

                    for (String strRedirect : hsPageTitle2Redirects.get(strCurrentTitle)) {
                        // wir ignorieren Titel, die sich lediglich durch gro/kleinschreibung unterscheiden
                        if (!StringUtils.containsIgnoreCase(strRedirect, metadata.getValues(Metadata.TITLE)))
                            metadata.add(Metadata.TITLE, strRedirect);
                    }
                }

                continue;
            }

            // ##### der text
            if (xmlEvent.asStartElement().getName().getLocalPart().equals("text")) {
                String strText = readNextCharEventsText(xmlEventReader);

                if (wikipediaDumpParserConfig.parseLinksAndCategories)
                    parseLinksAndCategories(strText, strBaseURL, metadata, handler);
                if (wikipediaDumpParserConfig.parseInfoBoxes)
                    parseInfoBox(strText, metadata, handler);
                if (wikipediaDumpParserConfig.parseGeoCoordinates)
                    parseGeoCoordinates(strText, metadata);

                // aufgrund einiger Defizite in dem verwendeten cleaner mssen wir hier leider noch zu-und nacharbeiten
                strText = strText.replaceAll("==\n", "==\n\n");
                strText = strText.replaceAll("\n==", "\n\n==");

                strCleanedText = m_wikiModel.render(new PlainTextConverter(), strText);

                strCleanedText = strCleanedText.replaceAll("\\{\\{", " ");
                strCleanedText = strCleanedText.replaceAll("\\}\\}", " ");

                strCleanedText = StringEscapeUtils.unescapeHtml4(strCleanedText);

                continue;
            }

            // ##### der timestamp
            if (xmlEvent.asStartElement().getName().getLocalPart().equals("timestamp")) {
                String strTimestamp = readNextCharEventsText(xmlEventReader);

                metadata.add(Metadata.MODIFIED, strTimestamp);

                continue;
            }

            // ##### der username
            if (xmlEvent.asStartElement().getName().getLocalPart().equals("username")) {
                String strUsername = readNextCharEventsText(xmlEventReader);

                metadata.add(Metadata.CREATOR, strUsername);

                continue;
            }

        }

    } catch (Exception e) {
        Logger.getLogger(WikipediaDumpParser.class.getName()).log(Level.SEVERE, "Error", e);
    }

}

From source file:ca.uhn.fhir.parser.XmlParser.java

private void encodeXhtml(XhtmlDt theDt, XMLStreamWriter theEventWriter) throws XMLStreamException {
    if (theDt == null || theDt.getValue() == null) {
        return;//  ww  w  .  jav a  2s  .co  m
    }

    boolean firstElement = true;
    for (XMLEvent event : theDt.getValue()) {
        switch (event.getEventType()) {
        case XMLStreamConstants.ATTRIBUTE:
            Attribute attr = (Attribute) event;
            if (isBlank(attr.getName().getPrefix())) {
                if (isBlank(attr.getName().getNamespaceURI())) {
                    theEventWriter.writeAttribute(attr.getName().getLocalPart(), attr.getValue());
                } else {
                    theEventWriter.writeAttribute(attr.getName().getNamespaceURI(),
                            attr.getName().getLocalPart(), attr.getValue());
                }
            } else {
                theEventWriter.writeAttribute(attr.getName().getPrefix(), attr.getName().getNamespaceURI(),
                        attr.getName().getLocalPart(), attr.getValue());
            }

            break;
        case XMLStreamConstants.CDATA:
            theEventWriter.writeCData(((Characters) event).getData());
            break;
        case XMLStreamConstants.CHARACTERS:
        case XMLStreamConstants.SPACE:
            String data = ((Characters) event).getData();
            theEventWriter.writeCharacters(data);
            break;
        case XMLStreamConstants.COMMENT:
            theEventWriter.writeComment(((Comment) event).getText());
            break;
        case XMLStreamConstants.END_ELEMENT:
            theEventWriter.writeEndElement();
            break;
        case XMLStreamConstants.ENTITY_REFERENCE:
            EntityReference er = (EntityReference) event;
            theEventWriter.writeEntityRef(er.getName());
            break;
        case XMLStreamConstants.NAMESPACE:
            Namespace ns = (Namespace) event;
            theEventWriter.writeNamespace(ns.getPrefix(), ns.getNamespaceURI());
            break;
        case XMLStreamConstants.START_ELEMENT:
            StartElement se = event.asStartElement();
            if (firstElement) {
                if (StringUtils.isBlank(se.getName().getPrefix())) {
                    String namespaceURI = se.getName().getNamespaceURI();
                    if (StringUtils.isBlank(namespaceURI)) {
                        namespaceURI = "http://www.w3.org/1999/xhtml";
                    }
                    theEventWriter.writeStartElement(se.getName().getLocalPart());
                    theEventWriter.writeDefaultNamespace(namespaceURI);
                } else {
                    String prefix = se.getName().getPrefix();
                    String namespaceURI = se.getName().getNamespaceURI();
                    theEventWriter.writeStartElement(prefix, se.getName().getLocalPart(), namespaceURI);
                    theEventWriter.writeNamespace(prefix, namespaceURI);
                }
                firstElement = false;
            } else {
                if (isBlank(se.getName().getPrefix())) {
                    if (isBlank(se.getName().getNamespaceURI())) {
                        theEventWriter.writeStartElement(se.getName().getLocalPart());
                    } else {
                        if (StringUtils.isBlank(se.getName().getPrefix())) {
                            theEventWriter.writeStartElement(se.getName().getLocalPart());
                            // theEventWriter.writeDefaultNamespace(se.getName().getNamespaceURI());
                        } else {
                            theEventWriter.writeStartElement(se.getName().getNamespaceURI(),
                                    se.getName().getLocalPart());
                        }
                    }
                } else {
                    theEventWriter.writeStartElement(se.getName().getPrefix(), se.getName().getLocalPart(),
                            se.getName().getNamespaceURI());
                }
                for (Iterator<?> attrIter = se.getAttributes(); attrIter.hasNext();) {
                    Attribute next = (Attribute) attrIter.next();
                    theEventWriter.writeAttribute(next.getName().getLocalPart(), next.getValue());
                }
            }
            break;
        case XMLStreamConstants.DTD:
        case XMLStreamConstants.END_DOCUMENT:
        case XMLStreamConstants.ENTITY_DECLARATION:
        case XMLStreamConstants.NOTATION_DECLARATION:
        case XMLStreamConstants.PROCESSING_INSTRUCTION:
        case XMLStreamConstants.START_DOCUMENT:
            break;
        }

    }
}

From source file:nl.nn.adapterframework.validation.XSD.java

public void init() throws ConfigurationException {
    if (noNamespaceSchemaLocation != null) {
        url = ClassUtils.getResourceURL(classLoader, noNamespaceSchemaLocation);
        if (url == null) {
            throw new ConfigurationException("Cannot find [" + noNamespaceSchemaLocation + "]");
        }//from   w  ww  . j  a va 2  s .  co  m
        resourceTarget = noNamespaceSchemaLocation;
        toString = noNamespaceSchemaLocation;
    } else {
        if (resource != null) {
            url = ClassUtils.getResourceURL(classLoader, resource);
            if (url == null) {
                throw new ConfigurationException("Cannot find [" + resource + "]");
            }
            resourceTarget = resource;
            toString = resource;
            if (resourceInternalReference != null) {
                resourceTarget = resourceTarget + "-" + resourceInternalReference + ".xsd";
                toString = toString + "!" + resourceInternalReference;
            }
        } else if (sourceXsds == null) {
            throw new ConfigurationException(
                    "None of noNamespaceSchemaLocation, resource or mergedResources is specified");
        } else {
            resourceTarget = "[";
            toString = "[";
            boolean first = true;
            for (XSD xsd : sourceXsds) {
                if (first) {
                    first = false;
                } else {
                    resourceTarget = resourceTarget + ", ";
                    toString = toString + ", ";
                }
                resourceTarget = resourceTarget + xsd.getResourceTarget().replaceAll("/", "_");
                toString = toString + xsd.toString();
            }
            resourceTarget = resourceTarget + "].xsd";
            toString = toString + "]";
        }
        if (parentLocation == null) {
            this.parentLocation = "";
        }
    }
    try {
        InputStream in = getInputStream();
        XMLEventReader er = XmlUtils.INPUT_FACTORY.createXMLEventReader(in, XmlUtils.STREAM_FACTORY_ENCODING);
        int elementDepth = 0;
        while (er.hasNext()) {
            XMLEvent e = er.nextEvent();
            switch (e.getEventType()) {
            case XMLStreamConstants.START_ELEMENT:
                elementDepth++;
                StartElement el = e.asStartElement();
                if (el.getName().equals(SchemaUtils.SCHEMA)) {
                    Attribute a = el.getAttributeByName(SchemaUtils.TNS);
                    if (a != null) {
                        xsdTargetNamespace = a.getValue();
                    }
                    Iterator<Namespace> nsIterator = el.getNamespaces();
                    while (nsIterator.hasNext() && StringUtils.isEmpty(xsdDefaultNamespace)) {
                        Namespace ns = nsIterator.next();
                        if (StringUtils.isEmpty(ns.getPrefix())) {
                            xsdDefaultNamespace = ns.getNamespaceURI();
                        }
                    }
                } else if (el.getName().equals(SchemaUtils.IMPORT)) {
                    Attribute a = el.getAttributeByName(SchemaUtils.NAMESPACE);
                    if (a != null) {
                        boolean skip = false;
                        ArrayList ans = null;
                        if (StringUtils.isNotEmpty(getImportedNamespacesToIgnore())) {
                            ans = new ArrayList(Arrays.asList(getImportedNamespacesToIgnore().split(",")));
                        }
                        if (StringUtils.isNotEmpty(a.getValue()) && ans != null) {
                            if (ans.contains(a.getValue())) {
                                skip = true;
                            }
                        }
                        if (!skip) {
                            importedNamespaces.add(a.getValue());
                        }
                    }
                } else if (el.getName().equals(SchemaUtils.ELEMENT)) {
                    if (elementDepth == 2) {
                        rootTags.add(el.getAttributeByName(SchemaUtils.NAME).getValue());
                    }
                }
                break;
            case XMLStreamConstants.END_ELEMENT:
                elementDepth--;
                break;
            }
        }
        this.targetNamespace = xsdTargetNamespace;
        if (namespace == null) {
            // In case WsdlXmlValidator doesn't have schemaLocation
            namespace = xsdTargetNamespace;
        }
    } catch (IOException e) {
        String message = "IOException reading XSD";
        LOG.error(message, e);
        throw new ConfigurationException(message, e);
    } catch (XMLStreamException e) {
        String message = "XMLStreamException reading XSD";
        LOG.error(message, e);
        throw new ConfigurationException(message, e);
    }
}

From source file:nl.nn.adapterframework.validation.XSD.java

public Set<XSD> getXsdsRecursive(Set<XSD> xsds, boolean ignoreRedefine) throws ConfigurationException {
    try {//from  w ww  .j  a  v  a 2 s .c o  m
        InputStream in = getInputStream();
        if (in == null)
            return null;
        XMLEventReader er = XmlUtils.INPUT_FACTORY.createXMLEventReader(in, XmlUtils.STREAM_FACTORY_ENCODING);
        while (er.hasNext()) {
            XMLEvent e = er.nextEvent();
            switch (e.getEventType()) {
            case XMLStreamConstants.START_ELEMENT:
                StartElement el = e.asStartElement();
                if (el.getName().equals(SchemaUtils.IMPORT) || el.getName().equals(SchemaUtils.INCLUDE)
                        || (el.getName().equals(SchemaUtils.REDEFINE) && !ignoreRedefine)) {
                    Attribute schemaLocationAttribute = el.getAttributeByName(SchemaUtils.SCHEMALOCATION);
                    Attribute namespaceAttribute = el.getAttributeByName(SchemaUtils.NAMESPACE);
                    String namespace = this.namespace;
                    boolean addNamespaceToSchema = this.addNamespaceToSchema;
                    if (el.getName().equals(SchemaUtils.IMPORT)) {
                        if (namespaceAttribute == null && StringUtils.isEmpty(xsdDefaultNamespace)
                                && StringUtils.isNotEmpty(xsdTargetNamespace)) {
                            //TODO: concerning import without namespace when in head xsd default namespace doesn't exist and targetNamespace does)
                            namespace = null;
                        } else {
                            if (namespaceAttribute != null) {
                                namespace = namespaceAttribute.getValue();
                            } else {
                                namespace = targetNamespace;
                            }
                        }
                    }
                    if (schemaLocationAttribute != null) {
                        boolean skip = false;
                        if (el.getName().equals(SchemaUtils.IMPORT) && namespaceAttribute == null) {
                            if (StringUtils.isNotEmpty(xsdDefaultNamespace)
                                    && StringUtils.isNotEmpty(xsdTargetNamespace)) {
                                //ignore import without namespace when in head xsd default namespace and targetNamespace exists)
                                skip = true;
                            }
                        }
                        if (!skip) {
                            String sl = schemaLocationAttribute.getValue();
                            ArrayList aslti = null;
                            if (StringUtils.isNotEmpty(getImportedSchemaLocationsToIgnore())) {
                                aslti = new ArrayList(
                                        Arrays.asList(getImportedSchemaLocationsToIgnore().split(",")));
                            }
                            if (StringUtils.isNotEmpty(sl) && aslti != null) {
                                if (isUseBaseImportedSchemaLocationsToIgnore()) {
                                    sl = FilenameUtils.getName(sl);
                                }
                                if (aslti.contains(sl)) {
                                    skip = true;
                                }
                            }
                        }
                        if (!skip) {
                            ArrayList ans = null;
                            if (StringUtils.isNotEmpty(getImportedNamespacesToIgnore())) {
                                ans = new ArrayList(Arrays.asList(getImportedNamespacesToIgnore().split(",")));
                            }
                            if (StringUtils.isNotEmpty(namespace) && ans != null) {
                                if (ans.contains(namespace)) {
                                    skip = true;
                                }
                            }
                        }
                        if (!skip) {
                            XSD x = new XSD();
                            x.setClassLoader(classLoader);
                            x.setNamespace(namespace);
                            x.setResource(getResourceBase() + schemaLocationAttribute.getValue());
                            x.setAddNamespaceToSchema(addNamespaceToSchema);
                            x.setImportedSchemaLocationsToIgnore(getImportedSchemaLocationsToIgnore());
                            x.setUseBaseImportedSchemaLocationsToIgnore(
                                    isUseBaseImportedSchemaLocationsToIgnore());
                            x.setImportedNamespacesToIgnore(getImportedNamespacesToIgnore());
                            x.setParentLocation(getResourceBase());
                            x.setRootXsd(false);
                            x.init();
                            if (xsds.add(x)) {
                                x.getXsdsRecursive(xsds, ignoreRedefine);
                            }
                        }
                    }
                }
                break;
            }
        }
    } catch (IOException e) {
        String message = "IOException reading XSD";
        LOG.error(message, e);
        throw new ConfigurationException(message, e);
    } catch (XMLStreamException e) {
        String message = "XMLStreamException reading XSD";
        LOG.error(message, e);
        throw new ConfigurationException(message, e);
    }
    return xsds;
}

From source file:org.apache.hadoop.gateway.filter.rewrite.impl.xml.XmlFilterReader.java

private void processEvent(XMLEvent event)
        throws ParserConfigurationException, XPathExpressionException, IOException, XMLStreamException {
    int type = event.getEventType();
    switch (type) {
    case XMLEvent.START_DOCUMENT:
        processStartDocument((StartDocument) event);
        break;//from w ww . j a va2  s. co m
    case XMLEvent.END_DOCUMENT:
        processEndDocument();
        break;
    case XMLEvent.START_ELEMENT:
        if (parser.peek().getEventType() == XMLEvent.END_ELEMENT)
            isEmptyElement = true;
        processStartElement(event.asStartElement());
        break;
    case XMLEvent.END_ELEMENT:
        processEndElement(event.asEndElement());
        isEmptyElement = false;
        break;
    case XMLEvent.CHARACTERS:
    case XMLEvent.CDATA:
    case XMLEvent.SPACE:
        processCharacters(event.asCharacters());
        break;
    case XMLEvent.COMMENT:
        processComment((Comment) event);
        break;
    case XMLEvent.DTD:
    case XMLEvent.NAMESPACE:
    case XMLEvent.ATTRIBUTE:
    case XMLEvent.ENTITY_REFERENCE:
    case XMLEvent.ENTITY_DECLARATION:
    case XMLEvent.NOTATION_DECLARATION:
    case XMLEvent.PROCESSING_INSTRUCTION:
    default:
        // Fail if we run into any of these for now.
        throw new IllegalStateException(Integer.toString(type));
    }
}

From source file:org.apache.hadoop.hdfs.tools.offlineImageViewer.OfflineImageReconstructor.java

/**
 * Read the next tag start or end event.
 *
 * @param expected     The name of the next tag we expect.
 *                     We will validate that the tag has this name,
 *                     unless this string is enclosed in braces.
 * @param allowEnd     If true, we will also end events.
 *                     If false, end events cause an exception.
 *
 * @return             The next tag start or end event.
 *//*from w w w. j av a 2s .  co  m*/
private XMLEvent expectTag(String expected, boolean allowEnd) throws IOException {
    XMLEvent ev = null;
    while (true) {
        try {
            ev = events.nextEvent();
        } catch (XMLStreamException e) {
            throw new IOException("Expecting " + expected + ", but got XMLStreamException", e);
        }
        switch (ev.getEventType()) {
        case XMLEvent.ATTRIBUTE:
            throw new IOException("Got unexpected attribute: " + ev);
        case XMLEvent.CHARACTERS:
            if (!ev.asCharacters().isWhiteSpace()) {
                throw new IOException("Got unxpected characters while " + "looking for " + expected + ": "
                        + ev.asCharacters().getData());
            }
            break;
        case XMLEvent.END_ELEMENT:
            if (!allowEnd) {
                throw new IOException("Got unexpected end event " + "while looking for " + expected);
            }
            return ev;
        case XMLEvent.START_ELEMENT:
            if (!expected.startsWith("[")) {
                if (!ev.asStartElement().getName().getLocalPart().equals(expected)) {
                    throw new IOException("Failed to find <" + expected + ">; " + "got "
                            + ev.asStartElement().getName().getLocalPart() + " instead.");
                }
            }
            return ev;
        default:
            // Ignore other event types like comment, etc.
            if (LOG.isTraceEnabled()) {
                LOG.trace("Skipping XMLEvent of type " + ev.getEventType() + "(" + ev + ")");
            }
            break;
        }
    }
}