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:Main.java

/**
 * Compares two {@link XMLEvent} instances. This method delegates actual
 * matching to the appropriate overloaded method.
 * /*from   w  w w. j a v a2 s.  c o m*/
 * @param a
 *            The first event.
 * @param b
 *            The second event.
 * @return <code>true</code> if the events match, <code>false</code>
 *         otherwise.
 */
public static boolean eventsMatch(XMLEvent a, XMLEvent b) {

    if (a == b) {

        return true;

    } else if (a == null || b == null) {

        return false;

    } else if (a.getEventType() == b.getEventType()) {

        switch (a.getEventType()) {

        case XMLEvent.START_ELEMENT:
            return eventsMatch(a.asStartElement(), b.asStartElement());

        case XMLEvent.END_ELEMENT:
            return eventsMatch(a.asEndElement(), b.asEndElement());

        case XMLEvent.CDATA:
        case XMLEvent.SPACE:
        case XMLEvent.CHARACTERS:
            return eventsMatch(a.asCharacters(), b.asCharacters());

        case XMLEvent.COMMENT:
            return eventsMatch((Comment) a, (Comment) b);

        case XMLEvent.ENTITY_REFERENCE:
            return eventsMatch((EntityReference) a, (EntityReference) b);

        case XMLEvent.ATTRIBUTE:
            return eventsMatch((Attribute) a, (Attribute) b);

        case XMLEvent.NAMESPACE:
            return eventsMatch((Namespace) a, (Namespace) b);

        case XMLEvent.START_DOCUMENT:
            return eventsMatch((StartDocument) a, (StartDocument) b);

        case XMLEvent.END_DOCUMENT:
            return eventsMatch((EndDocument) a, (EndDocument) b);

        case XMLEvent.PROCESSING_INSTRUCTION:
            return eventsMatch((ProcessingInstruction) a, (ProcessingInstruction) b);

        case XMLEvent.DTD:
            return eventsMatch((DTD) a, (DTD) b);

        case XMLEvent.ENTITY_DECLARATION:
            return eventsMatch((EntityDeclaration) a, (EntityDeclaration) b);

        case XMLEvent.NOTATION_DECLARATION:
            return eventsMatch((NotationDeclaration) a, (NotationDeclaration) b);

        }

    }

    return false;

}

From source file:Main.java

/**
 * /* www  .  ja  v a 2  s. c o m*/
 * @param is
 * @param os
 * @param elementNames
 * @throws XMLStreamException
 * @throws FactoryConfigurationError
 * @throws UnsupportedEncodingException
 */
public static void stripElements(final InputStream is, final OutputStream os,
        final Collection<String> elementNames)
        throws XMLStreamException, UnsupportedEncodingException, FactoryConfigurationError {
    final XMLEventReader xmlEventReader = XMLInputFactory.newInstance()
            .createXMLEventReader(new InputStreamReader(is, Charset.defaultCharset().name()));
    final XMLEventWriter xmlEventWriter = XMLOutputFactory.newInstance().createXMLEventWriter(os);

    String elementName = null;

    while (xmlEventReader.peek() != null) {
        final XMLEvent event = (XMLEvent) xmlEventReader.next();

        switch (event.getEventType()) {
        case XMLStreamConstants.START_DOCUMENT:
        case XMLStreamConstants.END_DOCUMENT: {
            // Ignore.
            break;
        }
        case XMLStreamConstants.START_ELEMENT: {
            final StartElement startElement = event.asStartElement();
            final QName name = startElement.getName();

            if (elementNames.contains(name.getLocalPart())) {
                elementName = name.getLocalPart();
            }

            if (elementName == null) {
                xmlEventWriter.add(event);
            }

            break;
        }
        case XMLStreamConstants.END_ELEMENT: {
            final EndElement endElement = event.asEndElement();
            final QName name = endElement.getName();

            if (elementName == null) {
                xmlEventWriter.add(event);
            } else if (elementName.equals(name.getLocalPart())) {
                elementName = null;
            }

            break;
        }
        default: {
            if (elementName == null) {
                xmlEventWriter.add(event);
            }
        }
        }
    }

    xmlEventWriter.flush();
}

From source file:Main.java

/**
 * //from  ww w  . ja  v  a2s .  com
 * @param elementName
 * @param attributeValue
 * @param is
 * @return Collection
 * @throws XMLStreamException
 * @throws FactoryConfigurationError
 * @throws UnsupportedEncodingException
 */
public static Collection<String> getElementValues(final String elementName, final String attributeValue,
        final InputStream is)
        throws XMLStreamException, UnsupportedEncodingException, FactoryConfigurationError {
    final Collection<String> elementValues = new ArrayList<>();
    final XMLEventReader xmlEventReader = XMLInputFactory.newInstance()
            .createXMLEventReader(new InputStreamReader(is, Charset.defaultCharset().name()));
    final StringBuffer characters = new StringBuffer();
    boolean read = false;

    while (xmlEventReader.peek() != null) {
        final XMLEvent event = (XMLEvent) xmlEventReader.next();

        switch (event.getEventType()) {
        case XMLStreamConstants.START_DOCUMENT:
        case XMLStreamConstants.END_DOCUMENT: {
            // Ignore.
            break;
        }
        case XMLStreamConstants.START_ELEMENT: {
            read = elementName.equals(event.asStartElement().getName().getLocalPart());

            if (read && attributeValue != null) {
                read = false;

                for (Iterator<Attribute> iterator = event.asStartElement().getAttributes(); iterator
                        .hasNext();) {
                    Attribute attribute = iterator.next();

                    if (attribute.getValue().equals(attributeValue)) {
                        read = true;
                        break;
                    }
                }
            }

            break;
        }
        case XMLStreamConstants.CHARACTERS: {
            if (read) {
                characters.append(event.asCharacters().getData());
            }
            break;
        }
        case XMLStreamConstants.END_ELEMENT: {
            if (read) {
                elementValues.add(characters.toString());
                characters.setLength(0);
            }

            read = false;
            break;
        }
        default: {
            // Ignore
            break;
        }
        }
    }

    return elementValues;
}

From source file:com.predic8.membrane.core.interceptor.rest.XML2HTTP.java

/**
 * Checks, if the response contains an XML doc with NS {@link Constants#HTTP_NS}.
 * If it does, the HTTP data (uri, method, status, headers, body) is extracted from the doc
 * and set as the response.//from   w  w  w  .ja  v  a  2 s .  c  om
 *
 * Reverse of {@link com.predic8.membrane.core.http.xml.Request#write(XMLStreamWriter)} and
 * {@link com.predic8.membrane.core.http.xml.Response#write(XMLStreamWriter)}.
 */
public static void unwrapMessageIfNecessary(Message message) {
    if (MimeType.TEXT_XML_UTF8.equals(message.getHeader().getContentType())) {
        try {
            if (message.getBody().getLength() == 0)
                return;

            XMLEventReader parser;
            synchronized (xmlInputFactory) {
                parser = xmlInputFactory.createXMLEventReader(message.getBodyAsStreamDecoded(),
                        message.getCharset());
            }

            /* States:
             * 0 = before root element,
             * 1 = root element has HTTP_NS namespace
             */
            int state = 0;

            boolean keepSourceHeaders = false, foundHeaders = false, foundBody = false;

            while (parser.hasNext()) {
                XMLEvent event = parser.nextEvent();
                switch (state) {
                case 0:
                    if (event.isStartElement()) {
                        QName name = event.asStartElement().getName();
                        if (Constants.HTTP_NS.equals(name.getNamespaceURI())) {
                            state = 1;
                            if ("request".equals(name.getLocalPart())) {
                                Request req = (Request) message;
                                req.setMethod(requireAttribute(event.asStartElement(), "method"));
                                String httpVersion = getAttribute(event.asStartElement(), "http-version");
                                if (httpVersion == null)
                                    httpVersion = "1.1";
                                req.setVersion(httpVersion);
                            }
                        } else {
                            return;
                        }
                    }
                    break;
                case 1:
                    if (event.isStartElement()) {
                        String localName = event.asStartElement().getName().getLocalPart();
                        if ("status".equals(localName)) {
                            Response res = (Response) message;
                            res.setStatusCode(
                                    Integer.parseInt(requireAttribute(event.asStartElement(), "code")));
                            res.setStatusMessage(slurpCharacterData(parser, event.asStartElement()));
                        }
                        if ("uri".equals(localName)) {
                            Request req = (Request) message;
                            req.setUri(requireAttribute(event.asStartElement(), "value"));
                            // uri/... (port,host,path,query) structure is ignored, as value already contains everything
                            slurpXMLData(parser, event.asStartElement());
                        }
                        if ("headers".equals(localName)) {
                            foundHeaders = true;
                            keepSourceHeaders = "true"
                                    .equals(getAttribute(event.asStartElement(), "keepSourceHeaders"));
                        }
                        if ("header".equals(localName)) {
                            String key = requireAttribute(event.asStartElement(), "name");
                            boolean remove = getAttribute(event.asStartElement(), "remove") != null;
                            if (remove && !keepSourceHeaders)
                                throw new XML2HTTPException(
                                        "<headers keepSourceHeaders=\"false\"><header name=\"...\" remove=\"true\"> does not make sense.");
                            message.getHeader().removeFields(key);
                            if (!remove)
                                message.getHeader().add(key,
                                        slurpCharacterData(parser, event.asStartElement()));
                        }
                        if ("body".equals(localName)) {
                            foundBody = true;
                            String type = requireAttribute(event.asStartElement(), "type");
                            if ("plain".equals(type)) {
                                message.setBodyContent(slurpCharacterData(parser, event.asStartElement())
                                        .getBytes(Constants.UTF_8_CHARSET));
                            } else if ("xml".equals(type)) {
                                message.setBodyContent(slurpXMLData(parser, event.asStartElement())
                                        .getBytes(Constants.UTF_8_CHARSET));
                            } else {
                                throw new XML2HTTPException("XML-HTTP doc body type '" + type
                                        + "' is not supported (only 'plain' or 'xml').");
                            }
                        }
                    }
                    break;
                }
            }

            if (!foundHeaders && !keepSourceHeaders)
                message.getHeader().clear();
            if (!foundBody)
                message.setBodyContent(new byte[0]);
        } catch (XMLStreamException e) {
            log.error("", e);
        } catch (XML2HTTPException e) {
            log.error("", e);
        } catch (IOException e) {
            log.error("", e);
        }
    }
}

From source file:Main.java

/**
 * //from   w w  w. j  av a2 s .com
 * @param elementName
 * @param is
 * @param onlyValues
 * @return Collection
 * @throws XMLStreamException
 * @throws UnsupportedEncodingException
 */
public static Collection<String> getElements(final String elementName, final InputStream is,
        final boolean onlyValues) throws XMLStreamException, UnsupportedEncodingException {
    final Collection<String> elements = new ArrayList<>();
    final ByteArrayOutputStream os = new ByteArrayOutputStream();
    final XMLEventReader reader = XMLInputFactory.newInstance()
            .createXMLEventReader(new InputStreamReader(is, Charset.defaultCharset().name()));
    final XMLEventWriter writer = XMLOutputFactory.newInstance()
            .createXMLEventWriter(new OutputStreamWriter(os, Charset.defaultCharset().name()));
    boolean read = false;
    String characters = null;

    while (reader.peek() != null) {
        final XMLEvent event = (XMLEvent) reader.next();

        switch (event.getEventType()) {
        case XMLStreamConstants.START_DOCUMENT:
        case XMLStreamConstants.END_DOCUMENT: {
            // Ignore.
            break;
        }
        case XMLStreamConstants.START_ELEMENT: {
            read = read || elementName.equals(event.asStartElement().getName().getLocalPart());

            if (read && !onlyValues) {
                writer.add(event);
            }

            break;
        }
        case XMLStreamConstants.ATTRIBUTE: {
            if (read && !onlyValues) {
                writer.add(event);
            }
            break;
        }
        case XMLStreamConstants.CHARACTERS: {
            if (read && !onlyValues) {
                writer.add(event);
            }
            characters = event.asCharacters().getData();
            break;
        }
        case XMLStreamConstants.END_ELEMENT: {
            if (read && !onlyValues) {
                writer.add(event);
            }
            if (elementName.equals(event.asEndElement().getName().getLocalPart())) {
                writer.flush();

                if (characters != null) {
                    elements.add(characters);
                }

                os.reset();
                read = false;
            }
            break;
        }
        default: {
            // Ignore
            break;
        }
        }
    }

    return elements;
}

From source file:edu.jhu.hlt.concrete.ingesters.bolt.BoltForumPostIngester.java

private static Section handleHeadline(final XMLEventReader rdr, final String content)
        throws XMLStreamException, ConcreteException {
    // The first type is always a document start event. Skip it.
    rdr.nextEvent();//ww w  . j  a v a2s  . com

    // The second type is a document ID block. Skip it.
    rdr.nextEvent();

    // The third type is a whitespace block. Skip it.
    rdr.nextEvent();

    // The next type is a headline start tag.
    XMLEvent hl = rdr.nextEvent();
    StartElement hlse = hl.asStartElement();
    QName hlqn = hlse.getName();
    final String hlPart = hlqn.getLocalPart();
    LOGGER.debug("QN: {}", hlPart);
    int hlPartOff = hlse.getLocation().getCharacterOffset();
    LOGGER.debug("HL part offset: {}", hlPartOff);

    // Text of the headline. This would be useful for purely getting
    // the content, but for offsets, it's not that useful.
    Characters cc = rdr.nextEvent().asCharacters();
    int charOff = cc.getLocation().getCharacterOffset();
    int clen = cc.getData().length();

    // The next part is the headline end element. Skip.
    rdr.nextEvent();

    // Whitespace. Skip.
    rdr.nextEvent();

    // Reader is now pointing at the first post.
    // Construct section, text span, etc.
    final int charOffPlusLen = charOff + clen;

    // Strip whitespace off
    TextSpan ts;
    if (STRIP_WHITESPACE_OFF_HEADLINE) {
        final String hlText = content.substring(charOff, charOffPlusLen);
        SimpleImmutableEntry<Integer, Integer> pads = trimSpacing(hlText);
        ts = new TextSpan(charOff + pads.getKey(), charOffPlusLen - pads.getValue());
    } else {
        ts = new TextSpan(charOff, charOffPlusLen);
    }
    assert ts.getStart() <= ts.getEnding() : "ts=" + ts;

    Section s = new Section();
    s.setKind("headline");
    s.setTextSpan(ts);
    List<Integer> intList = new ArrayList<>();
    intList.add(0);
    s.setNumberList(intList);
    return s;
}

From source file:ch.njol.skript.Updater.java

/**
 * Gets the changelogs and release dates of the newest versions
 * /*from  w ww  . ja  v  a  2 s .  c om*/
 * @param sender
 */
final static void getChangelogs(final CommandSender sender) {
    InputStream in = null;
    InputStreamReader r = null;
    try {
        final URLConnection conn = new URL(RSSURL).openConnection();
        conn.setRequestProperty("User-Agent", "Skript/v" + Skript.getVersion() + " (by Njol)"); // Bukkit returns a 403 (forbidden) if no user agent is set
        in = conn.getInputStream();
        r = new InputStreamReader(in, conn.getContentEncoding() == null ? "UTF-8" : conn.getContentEncoding());
        final XMLEventReader reader = XMLInputFactory.newInstance().createXMLEventReader(r);

        infos.clear();
        VersionInfo current = null;

        outer: while (reader.hasNext()) {
            XMLEvent e = reader.nextEvent();
            if (e.isStartElement()) {
                final String element = e.asStartElement().getName().getLocalPart();
                if (element.equalsIgnoreCase("title")) {
                    final String name = reader.nextEvent().asCharacters().getData().trim();
                    for (final VersionInfo i : infos) {
                        if (name.equals(i.name)) {
                            current = i;
                            continue outer;
                        }
                    }
                    current = null;
                } else if (element.equalsIgnoreCase("description")) {
                    if (current == null)
                        continue;
                    final StringBuilder cl = new StringBuilder();
                    while ((e = reader.nextEvent()).isCharacters())
                        cl.append(e.asCharacters().getData());
                    current.changelog = "- " + StringEscapeUtils.unescapeHtml("" + cl).replace("<br>", "")
                            .replace("<p>", "").replace("</p>", "").replaceAll("\n(?!\n)", "\n- ");
                } else if (element.equalsIgnoreCase("pubDate")) {
                    if (current == null)
                        continue;
                    synchronized (RFC2822) { // to make FindBugs shut up
                        current.date = new Date(
                                RFC2822.parse(reader.nextEvent().asCharacters().getData()).getTime());
                    }
                }
            }
        }
    } catch (final IOException e) {
        stateLock.writeLock().lock();
        try {
            state = UpdateState.CHECK_ERROR;
            error.set(ExceptionUtils.toString(e));
            Skript.error(sender, m_check_error.toString());
        } finally {
            stateLock.writeLock().unlock();
        }
    } catch (final Exception e) {
        Skript.error(sender, m_internal_error.toString());
        Skript.exception(e, "Unexpected error while checking for a new version of Skript");
        stateLock.writeLock().lock();
        try {
            state = UpdateState.CHECK_ERROR;
            error.set(e.getClass().getSimpleName() + ": " + e.getLocalizedMessage());
        } finally {
            stateLock.writeLock().unlock();
        }
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (final IOException e) {
            }
        }
        if (r != null) {
            try {
                r.close();
            } catch (final IOException e) {
            }
        }
    }
}

From source file:Main.java

public boolean accept(XMLEvent event) {
    if (event.isStartElement()) {
        StartElement startElement = event.asStartElement();
        String name = startElement.getName().getLocalPart();
        if (name.equals("InterestingElement")) {
            return true;
        }/*w  ww .j  a v  a 2 s. c om*/
    }
    return false;
}

From source file:Main.java

public static String getXMLContent(XMLEventReader reader, StartElement element, boolean decodeCharacters)
        throws XMLStreamException {
    String rootElementName = getLocalName(element);

    StringWriter buffer = new StringWriter(1024);

    StartElement pendingElement = null;
    String pendingElementName = null;

    while (reader.hasNext()) {
        XMLEvent event = reader.nextEvent();

        if (pendingElement != null) {
            boolean skip = false;

            if (event.isEndElement() && pendingElementName.equals(getLocalName(event.asEndElement()))) {
                writeAsEncodedUnicode(pendingElement, buffer, true); // empty tag
                skip = true; // skip this end tag
            } else {
                writeAsEncodedUnicode(pendingElement, buffer, false);
            }/*w  w w.  ja  v a  2 s. c  o m*/

            pendingElement = null;
            pendingElementName = null;

            if (skip)
                continue;
        }

        if (event.isEndElement()) {
            EndElement endElement = event.asEndElement();
            String name = getLocalName(endElement);

            if (rootElementName.equals(name))
                return buffer.toString();

            writeAsEncodedUnicode(endElement, buffer);
        } else if (event.isStartElement()) {
            pendingElement = event.asStartElement();
            pendingElementName = getLocalName(pendingElement);
        } else if (event.isCharacters() && decodeCharacters) {
            buffer.append(event.asCharacters().getData());
        } else {
            event.writeAsEncodedUnicode(buffer);
        }
    }

    throw new XMLStreamException(format("Missing closing tag for '" + rootElementName + "' element", element));
}

From source file:com.predic8.membrane.core.ws.relocator.Relocator.java

private QName getElementName(XMLEvent event) {
    return event.asStartElement().getName();
}