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

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

Introduction

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

Prototype

public boolean isStartElement();

Source Link

Document

A utility function to check if this event is a StartElement.

Usage

From source file:org.qi4j.valueserialization.stax.StaxValueDeserializer.java

@Override
protected <K, V> Map<K, V> readMapInMap(XMLEventReader input, Function<XMLEventReader, K> keyDeserializer,
        Function<XMLEventReader, V> valueDeserializer, Map<K, V> map) throws Exception {
    if (!input.hasNext()) {
        return null;
    }/*from   w ww .  j  a va2s. c o m*/
    XMLEvent nextTag = input.nextTag();
    if (nextTag.isStartElement() && "null".equals(nextTag.asStartElement().getName().getLocalPart())) {
        input.nextTag();
        return null;
    }
    if (!nextTag.isStartElement() || !"array".equals(nextTag.asStartElement().getName().getLocalPart())) {
        throw new ValueSerializationException("Expected an <array/> but got: " + nextTag);
    }
    XMLEvent currentTag = input.nextTag(); // <object>
    while (!currentTag.isEndElement() || !"array".equals(currentTag.asEndElement().getName().getLocalPart())) {
        if (!currentTag.isStartElement()
                || !"object".equals(currentTag.asStartElement().getName().getLocalPart())) {
            throw new ValueSerializationException("Expected an <object/> but got: " + nextTag);
        }
        currentTag = input.nextTag(); // <field>
        K key = null;
        V value = null;
        while (!currentTag.isEndElement()
                || !"object".equals(currentTag.asEndElement().getName().getLocalPart())) {
            input.nextTag(); // <name>
            String keyOrValue = input.nextEvent().asCharacters().getData();
            input.nextTag(); // </name>
            input.nextTag(); // <value>
            switch (keyOrValue) {
            case "key":
                key = keyDeserializer.map(input);
                break;
            case "value":
                value = valueDeserializer.map(input);
                break;
            default:
                readObjectTree(input);
                break;
            }
            input.nextTag(); // </value>
            input.nextTag(); // </field>
            currentTag = input.nextTag();
        }
        if (key != null) {
            map.put(key, value);
        }
        currentTag = input.nextTag();
    }
    return map;
}

From source file:org.qi4j.valueserialization.stax.StaxValueDeserializer.java

@Override
protected Node readObjectTree(XMLEventReader input) throws Exception {
    XMLEvent peek = input.peek();
    if (peek.isStartElement() && "null".equals(peek.asStartElement().getName().getLocalPart())) {
        input.nextTag();// <null>
        input.nextTag();// </null>
        return null;
    }/*ww  w  .j  a v a  2s  .  co m*/
    String elementBody = readElementBody(input);
    Transformer transformer = transformerFactory.newTransformer();
    DOMResult domResult = new DOMResult();
    transformer.transform(new StreamSource(new StringReader(elementBody)), domResult);
    return ((Document) domResult.getNode()).getDocumentElement();

}

From source file:org.qi4j.valueserialization.stax.StaxValueDeserializer.java

private static String readElementBody(XMLEventReader input) throws XMLStreamException {
    StringWriter buf = new StringWriter(1024);
    int depth = 0;
    while (input.hasNext()) {
        // peek event
        XMLEvent xmlEvent = input.peek();
        if (xmlEvent.isStartElement()) {
            ++depth;//from   w w w  .  j a va 2 s .c om
        } else if (xmlEvent.isEndElement()) {
            --depth;
            // reached END_ELEMENT tag?
            // break loop, leave event in stream
            if (depth < 0) {
                break;
            }
        }
        // consume event
        xmlEvent = input.nextEvent();
        // print out event
        xmlEvent.writeAsEncodedUnicode(buf);
    }
    return buf.getBuffer().toString();
}

From source file:org.sakaiproject.nakamura.auth.cas.CasAuthenticationHandler.java

private String retrieveCredentials(String responseBody) {
    String username = null;/*from ww  w. j a  v a2s .c  o  m*/
    String pgtIou = null;
    String failureCode = null;
    String failureMessage = null;

    try {
        XMLInputFactory xmlInputFactory = new WstxInputFactory();
        xmlInputFactory.setProperty(XMLInputFactory.IS_COALESCING, true);
        xmlInputFactory.setProperty(XMLInputFactory.IS_VALIDATING, false);
        xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, true);
        XMLEventReader eventReader = xmlInputFactory.createXMLEventReader(new StringReader(responseBody));

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

            // process the event if we're starting an element
            if (event.isStartElement()) {
                StartElement startEl = event.asStartElement();
                QName startElName = startEl.getName();
                String startElLocalName = startElName.getLocalPart();
                LOGGER.debug(responseBody);

                /*
                 * Example of failure XML
                <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
                  <cas:authenticationFailure code='INVALID_REQUEST'>
                    &#039;service&#039; and &#039;ticket&#039; parameters are both required
                  </cas:authenticationFailure>
                </cas:serviceResponse>
                */
                if ("authenticationFailure".equalsIgnoreCase(startElLocalName)) {
                    // get code of the failure
                    Attribute code = startEl.getAttributeByName(QName.valueOf("code"));
                    failureCode = code.getValue();

                    // get the message of the failure
                    event = eventReader.nextEvent();
                    assert event.isCharacters();
                    Characters chars = event.asCharacters();
                    failureMessage = chars.getData();
                    break;
                }

                /*
                 * Example of success XML
                <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
                  <cas:authenticationSuccess>
                    <cas:user>NetID</cas:user>
                  </cas:authenticationSuccess>
                </cas:serviceResponse>
                */
                if ("authenticationSuccess".equalsIgnoreCase(startElLocalName)) {
                    // skip to the user tag start
                    while (eventReader.hasNext()) {
                        event = eventReader.nextTag();
                        if (event.isEndElement()) {
                            if (eventReader.hasNext()) {
                                event = eventReader.nextTag();
                            } else {
                                break;
                            }
                        }
                        assert event.isStartElement();
                        startEl = event.asStartElement();
                        startElName = startEl.getName();
                        startElLocalName = startElName.getLocalPart();
                        if (proxy && "proxyGrantingTicket".equals(startElLocalName)) {
                            event = eventReader.nextEvent();
                            assert event.isCharacters();
                            Characters chars = event.asCharacters();
                            pgtIou = chars.getData();
                            LOGGER.debug("XML parser found pgt: {}", pgtIou);
                        } else if ("user".equals(startElLocalName)) {
                            // move on to the body of the user tag
                            event = eventReader.nextEvent();
                            assert event.isCharacters();
                            Characters chars = event.asCharacters();
                            username = chars.getData();
                            LOGGER.debug("XML parser found user: {}", username);
                        } else {
                            LOGGER.error("Found unexpected element [{}] while inside 'authenticationSuccess'",
                                    startElName);
                            break;
                        }
                        if (username != null && (!proxy || pgtIou != null)) {
                            break;
                        }
                    }
                }
            }
        }
    } catch (XMLStreamException e) {
        LOGGER.error(e.getMessage(), e);
    }

    if (failureCode != null || failureMessage != null) {
        LOGGER.error("Error response from server code={} message={}", failureCode, failureMessage);
    }
    String pgt = pgts.get(pgtIou);
    if (pgt != null) {
        savePgt(username, pgt, pgtIou);
    } else {
        LOGGER.debug("Caching '{}' as the IOU for '{}'", pgtIou, username);
        pgtIOUs.put(pgtIou, username);
    }
    return username;
}

From source file:org.sakaiproject.nakamura.auth.cas.CasAuthenticationHandler.java

private String getProxyTicketFromXml(String responseBody) {
    String ticket = null;/*from w  ww  .  j a  v  a2 s  .  c o  m*/

    try {
        XMLInputFactory xmlInputFactory = new WstxInputFactory();
        xmlInputFactory.setProperty(XMLInputFactory.IS_COALESCING, true);
        xmlInputFactory.setProperty(XMLInputFactory.IS_VALIDATING, false);
        xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, true);
        XMLEventReader eventReader = xmlInputFactory.createXMLEventReader(new StringReader(responseBody));
        LOGGER.debug(responseBody);

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

            // process the event if we're starting an element
            if (event.isStartElement()) {
                StartElement startEl = event.asStartElement();
                QName startElName = startEl.getName();
                String startElLocalName = startElName.getLocalPart();

                // Example XML
                // <cas:serviceResponse>
                // <cas:proxySuccess>
                // <cas:proxyTicket>PT-957-ZuucXqTZ1YcJw81T3dxf</cas:proxyTicket>
                // </cas:proxySuccess>
                // </cas:serviceResponse>

                if ("proxySuccess".equalsIgnoreCase(startElLocalName)) {
                    event = eventReader.nextTag();
                    assert event.isStartElement();
                    startEl = event.asStartElement();
                    startElName = startEl.getName();
                    startElLocalName = startElName.getLocalPart();
                    if ("proxyTicket".equalsIgnoreCase(startElLocalName)) {
                        event = eventReader.nextEvent();
                        assert event.isCharacters();
                        Characters chars = event.asCharacters();
                        ticket = chars.getData();
                    } else {
                        LOGGER.error("Found unexpected element [{}] while inside 'proxySuccess'", startElName);
                        break;
                    }
                }
            }
        }
    } catch (XMLStreamException e) {
        LOGGER.error(e.getMessage(), e);
    }
    return ticket;
}

From source file:org.sakaiproject.nakamura.docproxy.url.UrlRepositoryProcessor.java

/**
 * Parse search results information into documents.
 * <p>/*from  w  w w .ja v a  2 s .c  o m*/
 * The expected format of the returned information is:<br/>
 * <code>
 * <documents>
 *   <document contentLength="%s" contentType="%s" uri="%s">
 *     <properties>
 *       <key1>value1</key1>
 *       <key2>value2</key2>
 *     </properties>
 *   </document>
 * </documents>
 * </code>
 * </p>
 * 
 * @param body
 * @return
 * @throws JSONException
 */
protected List<ExternalDocumentResult> parseSearch(InputStream body) throws XMLStreamException {
    ArrayList<ExternalDocumentResult> results = new ArrayList<ExternalDocumentResult>();

    XMLEventReader eventReader = xmlInputFactory.createXMLEventReader(body);
    while (eventReader.hasNext()) {
        XMLEvent event = eventReader.nextEvent();
        // process the event if we're starting an element
        if (event.isStartElement()) {

            StartElement startEl = event.asStartElement();
            QName startElName = startEl.getName();
            String startElLocalName = startElName.getLocalPart();

            // process the href element
            if ("document".equalsIgnoreCase(startElLocalName)) {
                results.add(parseDocument(startEl, null));
                event = eventReader.nextEvent();
                continue;
            }
        }
    }

    return results;
}

From source file:org.sakaiproject.nakamura.docproxy.url.UrlRepositoryProcessor.java

/**
 * Parse information about a doc from JSON to an {@link ExternalDocumentResult} object.<br/>
 * XML is expected to follow the format of:
 * <p>/*from ww w  .j  a v a 2 s .co  m*/
 * <code>
 * <document contentLength="%s" contentType="%s" uri="%s">
 *   <properties>
 *     <key1>value1</key1>
 *     <key2>value2</key2>
 *   </properties>
 * </document>
 * </code>
 * </p>
 * 
 * @param is
 * @return
 * @throws ParserConfigurationException
 * @throws IOException
 * @throws SAXException
 */
protected ExternalDocumentResult parseDocument(InputStream body) throws XMLStreamException {
    UrlDocumentResult doc = new UrlDocumentResult();
    XMLEventReader eventReader = xmlInputFactory.createXMLEventReader(body);
    while (eventReader.hasNext()) {
        XMLEvent event = eventReader.nextEvent();

        // process the event if we're starting an element
        if (event.isStartElement()) {
            StartElement startEl = event.asStartElement();
            QName startElName = startEl.getName();
            String startElLocalName = startElName.getLocalPart();

            if ("document".equalsIgnoreCase(startElLocalName)) {
                parseDocument(startEl, doc);
                continue;
            }

            if ("properties".equalsIgnoreCase(startElLocalName)) {
                parseProperties(eventReader, doc);
                continue;
            }
        }
    }
    return doc;
}

From source file:org.sakaiproject.nakamura.docproxy.url.UrlRepositoryProcessor.java

/**
 * Parse subelements of a 'properties' element into properties on a
 * {@link UrlDocumentResult}.//ww w. j  ava2  s.c o  m
 * 
 * @param eventReader
 *          Source to process elements from. Is expected that calls to
 *          eventReader.nextEvent() will yield elements to be added to doc as
 *          properties. Nested elements are not considered.
 * @param doc
 *          The document to set attributes into.
 * @throws XMLStreamException
 *           If there is a problem processing the element.
 */
private void parseProperties(XMLEventReader eventReader, UrlDocumentResult doc) throws XMLStreamException {
    while (eventReader.hasNext()) {
        XMLEvent event = eventReader.nextEvent();

        // process the event if we're starting an element
        if (event.isStartElement()) {
            StartElement startEl = event.asStartElement();
            QName startElName = startEl.getName();
            String startElLocalName = startElName.getLocalPart();

            // collect simple elements as properties
            event = eventReader.nextEvent();
            if (event.isCharacters()) {
                Characters chars = event.asCharacters();
                doc.addProperty(startElLocalName, chars.getData());
            }
        }
    }
}

From source file:org.slc.sli.ingestion.parser.impl.EdfiRecordParserImpl.java

private void parseInterchangeEvent(XMLEvent event, String eventName) throws XMLStreamException {

    if (!complexTypeStack.isEmpty()) {

        parseEntityEvent(event, eventName);

    } else if (event.isStartElement()) {

        initCurrentEntity(event, eventName);
    }/* w w  w  .  j a v  a  2  s.  c  om*/
}

From source file:org.slc.sli.ingestion.parser.impl.EdfiRecordParserImpl.java

private void parseEntityEvent(XMLEvent e, String eventName) throws XMLStreamException {

    if (e.isStartElement()) {
        parseStartElement(e.asStartElement(), eventName);

    } else if (e.isCharacters()) {
        parseCharacters(e.asCharacters());

    } else if (e.isEndElement() && eventName.equals(complexTypeStack.peek().getLeft().getName())) {
        parseEndElement(e);//w  w w.  j  a  v  a 2 s . c om
    }
}