Example usage for javax.xml.stream.events StartElement getName

List of usage examples for javax.xml.stream.events StartElement getName

Introduction

In this page you can find the example usage for javax.xml.stream.events StartElement getName.

Prototype

public QName getName();

Source Link

Document

Get the name of this event

Usage

From source file:org.omegat.util.TMXReader2.java

/**
 * External TMX - level 2. Replace all tags into shortcuts.
 *//*w  w w. j  a v a 2 s  .co  m*/
protected void parseSegExtLevel2() throws Exception {
    segContent.setLength(0);
    segInlineTag.setLength(0);
    inlineTagHandler.reset();

    int inlineLevel = 0;
    while (true) {
        XMLEvent e = xml.nextEvent();
        switch (e.getEventType()) {
        case XMLEvent.START_ELEMENT:
            StartElement eStart = e.asStartElement();
            if ("hi".equals(eStart.getName().getLocalPart())) {
                // tag should be skipped
                break;
            }
            inlineLevel++;
            segInlineTag.setLength(0);
            if ("bpt".equals(eStart.getName().getLocalPart())) {
                inlineTagHandler.startBPT(getAttributeValue(eStart, "i"), getAttributeValue(eStart, "x"));
                inlineTagHandler.setTagShortcutLetter(
                        StringUtil.getFirstLetterLowercase(getAttributeValue(eStart, "type")));
            } else if ("ept".equals(eStart.getName().getLocalPart())) {
                inlineTagHandler.startEPT(getAttributeValue(eStart, "i"));
            } else if ("it".equals(eStart.getName().getLocalPart())) {
                inlineTagHandler.startOTHER();
                inlineTagHandler.setOtherTagShortcutLetter(
                        StringUtil.getFirstLetterLowercase(getAttributeValue(eStart, "type")));
                inlineTagHandler.setCurrentPos(getAttributeValue(eStart, "pos"));
            } else if ("ph".equals(eStart.getName().getLocalPart())) {
                inlineTagHandler.startOTHER();
                inlineTagHandler.setOtherTagShortcutLetter(
                        StringUtil.getFirstLetterLowercase(getAttributeValue(eStart, "type")));
            } else {
                inlineTagHandler.startOTHER();
            }
            break;
        case XMLEvent.END_ELEMENT:
            EndElement eEnd = e.asEndElement();
            if ("hi".equals(eEnd.getName().getLocalPart())) {
                // tag should be skipped
                break;
            }
            inlineLevel--;
            if ("seg".equals(eEnd.getName().getLocalPart())) {
                return;
            }
            boolean slashBefore = false;
            boolean slashAfter = false;
            int tagName = StringUtil.getFirstLetterLowercase(segInlineTag.toString());
            Integer tagN;
            if ("bpt".equals(eEnd.getName().getLocalPart())) {
                if (tagName != 0) {
                    inlineTagHandler.setTagShortcutLetter(tagName);
                } else {
                    tagName = inlineTagHandler.getTagShortcutLetter();
                }
                tagN = inlineTagHandler.endBPT();
            } else if ("ept".equals(eEnd.getName().getLocalPart())) {
                slashBefore = true;
                tagName = inlineTagHandler.getTagShortcutLetter();
                tagN = inlineTagHandler.endEPT();
            } else if ("it".equals(eEnd.getName().getLocalPart())) {
                if (tagName != 0) {
                    inlineTagHandler.setOtherTagShortcutLetter(tagName);
                } else {
                    tagName = inlineTagHandler.getOtherTagShortcutLetter();
                }
                tagN = inlineTagHandler.endOTHER();
                if ("end".equals(inlineTagHandler.getCurrentPos())) {
                    slashBefore = true;
                }
            } else if ("ph".equals(eEnd.getName().getLocalPart())) {
                if (tagName != 0) {
                    inlineTagHandler.setOtherTagShortcutLetter(tagName);
                } else {
                    tagName = inlineTagHandler.getOtherTagShortcutLetter();
                }
                tagN = inlineTagHandler.endOTHER();
                if (useSlash) {
                    slashAfter = true;
                }
            } else {
                tagN = inlineTagHandler.endOTHER();
                if (useSlash) {
                    slashAfter = true;
                }
            }
            if (tagName == 0) {
                tagName = 'f';
            }
            if (tagN == null) {
                // check error of TMX reading
                Log.logErrorRB("TMX_ERROR_READING_LEVEL2", e.getLocation().getLineNumber(),
                        e.getLocation().getColumnNumber());
                errorsCount++;
                segContent.setLength(0);
                // wait for end seg
                while (true) {
                    XMLEvent ev = xml.nextEvent();
                    switch (ev.getEventType()) {
                    case XMLEvent.END_ELEMENT:
                        EndElement evEnd = (EndElement) ev;
                        if ("seg".equals(evEnd.getName().getLocalPart())) {
                            return;
                        }
                    }
                }
            }

            segContent.append('<');
            if (slashBefore) {
                segContent.append('/');
            }
            segContent.appendCodePoint(tagName);
            segContent.append(Integer.toString(tagN));
            if (slashAfter) {
                segContent.append('/');
            }
            segContent.append('>');
            break;
        case XMLEvent.CHARACTERS:
            Characters c = (Characters) e;
            if (inlineLevel == 0) {
                segContent.append(c.getData());
            } else {
                segInlineTag.append(c.getData());
            }
            break;
        }
    }
}

From source file:org.omnaest.utils.xml.XMLNestedMapConverter.java

/**
 * Template method for {@link #newNamespaceAwareMapFromXML(CharSequence)} and {@link #newMapFromXML(CharSequence)} which allows
 * to convert the {@link QName} based key values to other representations.
 * /*from   w w w.j  a va 2s  .  c  o m*/
 * @param xmlContent
 * @return new (nested) {@link Map} instance
 */
protected <K> Map<K, Object> newMapFromXML(CharSequence xmlContent,
        final ElementConverter<QName, K> keyElementConverter) {
    //
    final Map<K, Object> retmap = new LinkedHashMap<K, Object>();

    //
    Assert.isNotNull(keyElementConverter, "keyElementConverter must not be null");

    //
    final ExceptionHandler exceptionHandler = this.exceptionHandler;

    //    
    try {
        //
        final XMLInputFactory xmlInputFactory = this.xmlInstanceContextFactory.newXmlInputFactory();
        Assert.isNotNull(xmlInputFactory, "xmlInputFactory must not be null");

        //
        final Reader reader = new CharSequenceReader(xmlContent);
        final XMLEventReader xmlEventReader = xmlInputFactory.createXMLEventReader(reader);

        //
        final class Helper {
            /* ********************************************** Variables ********************************************** */
            private List<TupleTwo<QName, Object>> stackList = new ArrayList<TupleTwo<QName, Object>>();

            /* ********************************************** Methods ********************************************** */

            /**
             * Manifests a single tag node recursively
             * 
             * @return
             * @throws XMLStreamException
             */
            @SuppressWarnings("unchecked")
            public TupleTwo<QName, Object> manifest() throws XMLStreamException {
                //
                TupleTwo<QName, Object> retval = null;

                //          
                while (xmlEventReader.hasNext()) {
                    //
                    final XMLEvent xmlEvent = xmlEventReader.nextEvent();

                    //
                    if (xmlEvent.isStartElement()) {
                        //
                        final StartElement startElement = xmlEvent.asStartElement();
                        final QName name = startElement.getName();

                        //
                        this.addNewStackElement().setValueFirst(name);

                        //
                        final Iterator<Attribute> attributeIterator = startElement.getAttributes();
                        if (attributeIterator.hasNext()) {
                            //
                            final Map<QName, Object> map = new LinkedHashMap<QName, Object>();
                            for (Attribute attribute : IterableUtils.valueOf(attributeIterator)) {
                                map.put(attribute.getName(), attribute.getValue());
                            }

                            //
                            this.updateCurrentStackValue(map);
                        }
                    } else if (xmlEvent.isEndElement()) {
                        //
                        retval = this.removeStackElement();

                        //
                        final Object manifestation = retval.getValueSecond();
                        final QName tagname = retval.getValueFirst();

                        //
                        updateCurrentStackValue(manifestation, tagname);
                    } else if (xmlEvent.isCharacters()) {
                        //
                        final Characters characters = xmlEvent.asCharacters();
                        if (!characters.isWhiteSpace()) {
                            //
                            final TupleTwo<QName, Object> currentStackValue = this.getCurrentStackValue();
                            currentStackValue.setValueSecond(
                                    ObjectUtils.defaultIfNull(currentStackValue.getValueSecond(), "")
                                            + characters.getData());

                        }
                    }

                }

                //
                return retval;
            }

            /**
             * Updates the current stack value
             * 
             * @param manifestation
             * @param tagname
             */
            private void updateCurrentStackValue(Object manifestation, QName tagname) {
                //
                final Map<QName, Object> tagNameToManifestationMap = new LinkedHashMap<QName, Object>();
                tagNameToManifestationMap.put(tagname, manifestation);
                this.updateCurrentStackValue(tagNameToManifestationMap);
            }

            @SuppressWarnings("unchecked")
            private void updateCurrentStackValue(Map<QName, Object> tagNameToManifestationMap) {
                //
                final TupleTwo<QName, Object> currentStackValue = this.getCurrentStackValue();

                //
                if (currentStackValue != null) {
                    //
                    Map<K, Object> map = null;
                    {
                        //
                        final Object valueSecond = currentStackValue.getValueSecond();
                        if (valueSecond instanceof Map) {
                            map = (Map<K, Object>) valueSecond;
                        } else {
                            //
                            map = new LinkedHashMap<K, Object>();
                            if (valueSecond instanceof String) {
                                map.put(keyElementConverter.convert(new QName("")), valueSecond);
                            }
                        }
                    }

                    //
                    for (Entry<QName, Object> tagNameToManifestationEntry : tagNameToManifestationMap
                            .entrySet()) {
                        //
                        final K tagname = keyElementConverter.convert(tagNameToManifestationEntry.getKey());
                        final Object manifestation = tagNameToManifestationEntry.getValue();

                        //
                        if (!map.containsKey(tagname)) {
                            map.put(tagname, manifestation);
                        } else {
                            //
                            final Object object = map.get(tagname);
                            if (object instanceof List) {
                                //
                                final List<Object> list = (List<Object>) object;
                                list.add(manifestation);
                            } else {
                                //
                                final List<Object> list = new ArrayList<Object>();
                                list.add(object);
                                list.add(manifestation);
                                map.put(tagname, list);
                            }
                        }
                    }

                    //
                    currentStackValue.setValueSecond(map);
                }
            }

            private TupleTwo<QName, Object> getCurrentStackValue() {
                return ListUtils.firstElement(this.stackList);
            }

            private TupleTwo<QName, Object> removeStackElement() {
                return ListUtils.removeFirst(this.stackList);
            }

            private TupleTwo<QName, Object> addNewStackElement() {
                //
                final TupleTwo<QName, Object> retval = new TupleTwo<QName, Object>();
                this.stackList.add(0, retval);
                return retval;
            }
        }

        //  
        try {
            final Helper helper = new Helper();
            final TupleTwo<QName, Object> result = helper.manifest();
            retmap.put(keyElementConverter.convert(result.getValueFirst()), result.getValueSecond());
        } catch (Exception e) {
            if (exceptionHandler != null) {
                exceptionHandler.handleException(e);
            }
        }

        //
        xmlEventReader.close();
        reader.close();

    } catch (Exception e) {
        if (exceptionHandler != null) {
            exceptionHandler.handleException(e);
        }
    }

    //
    return retmap;
}

From source file:org.onosproject.xmpp.core.ctl.handlers.XmlStreamDecoderTest.java

@Test
public void testDecodeXmppStanza() throws Exception {
    XmlStreamDecoder decoder = new XmlStreamDecoder();
    ByteBuf buffer = Unpooled.buffer();//from  w w  w . java2 s.c om
    buffer.writeBytes(subscribeMsg.getBytes(Charsets.UTF_8));
    List<Object> list = Lists.newArrayList();
    decoder.decode(new ChannelHandlerContextAdapter(), buffer, list);
    assertThat(list.size(), is(10));
    list.forEach(object -> {
        assertThat(object, is(instanceOf(XMLEvent.class)));
    });
    assertThat(((XMLEvent) list.get(0)).isStartDocument(), is(true));
    XMLEvent secondEvent = (XMLEvent) list.get(1);
    assertThat(secondEvent.isStartElement(), is(true));
    StartElement secondEventAsStartElement = (StartElement) secondEvent;
    assertThat(secondEventAsStartElement.getName().getLocalPart(), is("iq"));
    assertThat(Lists.newArrayList(secondEventAsStartElement.getAttributes()).size(), is(4));
    assertThat(secondEventAsStartElement.getAttributeByName(QName.valueOf("type")).getValue(), is("set"));
    assertThat(secondEventAsStartElement.getAttributeByName(QName.valueOf("from")).getValue(),
            is("test@xmpp.org"));
    assertThat(secondEventAsStartElement.getAttributeByName(QName.valueOf("to")).getValue(),
            is("xmpp.onosproject.org"));
    assertThat(secondEventAsStartElement.getAttributeByName(QName.valueOf("id")).getValue(), is("sub1"));
    XMLEvent fourthEvent = (XMLEvent) list.get(3);
    assertThat(fourthEvent.isStartElement(), is(true));
    StartElement fourthEventAsStartElement = (StartElement) fourthEvent;
    assertThat(fourthEventAsStartElement.getName().getLocalPart(), is("pubsub"));
    assertThat(fourthEventAsStartElement.getNamespaceURI(""), is("http://jabber.org/protocol/pubsub"));
    XMLEvent fifthEvent = (XMLEvent) list.get(5);
    assertThat(fifthEvent.isStartElement(), is(true));
    StartElement fifthEventAsStartElement = (StartElement) fifthEvent;
    assertThat(fifthEventAsStartElement.getName().getLocalPart(), is("subscribe"));
    assertThat(fifthEventAsStartElement.getAttributeByName(QName.valueOf("node")).getValue(), is("test"));
    XMLEvent sixthEvent = (XMLEvent) list.get(6);
    assertThat(sixthEvent.isEndElement(), is(true));
    EndElement sixthEventAsEndElement = (EndElement) sixthEvent;
    assertThat(sixthEventAsEndElement.getName().getLocalPart(), is("subscribe"));
    XMLEvent seventhEvent = (XMLEvent) list.get(8);
    assertThat(seventhEvent.isEndElement(), is(true));
    EndElement seventhEventAsEndElement = (EndElement) seventhEvent;
    assertThat(seventhEventAsEndElement.getName().getLocalPart(), is("pubsub"));
    XMLEvent eighthEvent = (XMLEvent) list.get(9);
    assertThat(eighthEvent.isEndElement(), is(true));
    EndElement eighthEventAsEndElement = (EndElement) eighthEvent;
    assertThat(eighthEventAsEndElement.getName().getLocalPart(), is("iq"));
}

From source file:org.openhim.mediator.denormalization.EnrichRegistryStoredQueryActor.java

private String enrichStoredQueryXML(Identifier id, InputStream xml) throws XMLStreamException {
    XMLEventReader reader = XMLInputFactory.newInstance().createXMLEventReader(xml);
    StringWriter output = new StringWriter();
    XMLEventWriter writer = XMLOutputFactory.newInstance().createXMLEventWriter(output);
    XMLEventFactory eventFactory = XMLEventFactory.newFactory();

    String curSlot = null;// www  .  ja  v  a  2 s .c  o m
    boolean patientIdSlot = false;

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

        if (event.getEventType() == XMLEvent.START_ELEMENT) {
            StartElement elem = event.asStartElement();
            if ("Slot".equals(elem.getName().getLocalPart())) {
                curSlot = elem.getAttributeByName(new QName("name")).getValue();
            } else if ("Value".equals(elem.getName().getLocalPart())
                    && ParseRegistryStoredQueryActor.PATIENT_ID_SLOT_TYPE.equals(curSlot)) {
                patientIdSlot = true;
                writer.add(event);
            }
        } else if (event.getEventType() == XMLEvent.END_ELEMENT) {
            EndElement elem = event.asEndElement();
            if (patientIdSlot && "Value".equals(elem.getName().getLocalPart())) {
                XMLEvent ecidEvent = eventFactory.createCharacters("'" + id.toString() + "'");
                writer.add(ecidEvent);
                patientIdSlot = false;
            }
        }

        if (!patientIdSlot) {
            writer.add(event);
        }
    }

    writer.close();
    return output.toString();
}

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

private String retrieveCredentials(String responseBody) {
    String username = null;/*from   www. ja va  2  s  . co 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;//www.  j a v  a  2 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  . j a  va 2s .  co  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   w  ww.  j a  va 2s  .c o  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}./*from w w w.  ja  v a  2  s  .co 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.sakaiproject.nakamura.proxy.RSSProxyPostProcessor.java

public void process(Map<String, Object> templateParams, SlingHttpServletResponse response,
        ProxyResponse proxyResponse) throws IOException {
    if (proxyResponse.getResultCode() == HttpServletResponse.SC_PRECONDITION_FAILED) {
        response.sendError(HttpServletResponse.SC_BAD_REQUEST, "This RSS feed is too big ");
        return;// w w w.  j a va2s . c o m
    }

    Map<String, String[]> headers = proxyResponse.getResponseHeaders();

    // Check if the content-length is smaller than the maximum (if any).
    String[] contentLengthHeader = headers.get("Content-Length");
    if (contentLengthHeader != null) {
        int length = Integer.parseInt(contentLengthHeader[0]);
        if (length > maxLength) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST,
                    "This RSS feed is too big. The maximum for a feed is: " + maxLength);
            return;
        }
    }

    // Check if the Content-Type we get is valid (if any).
    String[] contentTypeHeader = headers.get("Content-Type");
    if (contentTypeHeader != null) {
        String contentType = contentTypeHeader[0];
        if (contentType.contains(";")) {
            contentType = contentType.substring(0, contentType.indexOf(';'));
        }
        if (!contentTypes.contains(contentType)) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST,
                    "This URL doesn't send a proper Content-Type back");
            return;
        }
    }

    boolean isValid = false;
    InputStream in = proxyResponse.getResponseBodyAsInputStream();
    InputStreamReader reader = new InputStreamReader(in);

    // XMLStreamWriter writer = null;
    XMLEventWriter writer = null;
    ByteArrayOutputStream out = null;

    int i = 0;
    try {
        XMLEventReader eventReader = xmlInputFactory.createXMLEventReader(reader);
        // Create a temporary outputstream where we can write to.
        out = new ByteArrayOutputStream();

        Set<String> checkedElements = null;

        XMLOutputFactory outputFactory = new WstxOutputFactory();
        writer = outputFactory.createXMLEventWriter(out);

        while (eventReader.hasNext()) {
            XMLEvent e = eventReader.nextEvent();
            // Stream it to an output stream.
            writer.add(e);

            if (!isValid) {
                if (e.getEventType() == XMLEvent.START_ELEMENT) {
                    StartElement el = e.asStartElement();
                    String name = el.getName().getLocalPart().toLowerCase();
                    if (checkedElements == null) {
                        // get the right format to validate against
                        String formatKey = name;
                        Attribute attr = el.getAttributeByName(new QName("version"));
                        if (attr != null) {
                            formatKey += "-" + attr.getValue();
                        }
                        Set<String> format = formats.get(formatKey);
                        if (format != null) {
                            checkedElements = new HashSet<String>(format);
                        }
                    } else {
                        checkedElements.remove(name);

                        if (checkedElements.isEmpty()) {
                            isValid = true;
                        }
                    }
                }

                if (i > eventsThreshold) {
                    response.sendError(HttpServletResponse.SC_BAD_REQUEST, "This file is too complex.");
                    return;
                }
                i++;
            }
        }

        if (!isValid) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid RSS file.");
            return;
        }

        // Check if we are not streaming a gigantic file..
        if (out.size() > maxLength) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST, "This file is too big.");
            return;
        }

        for (Entry<String, String[]> h : proxyResponse.getResponseHeaders().entrySet()) {
            for (String v : h.getValue()) {
                response.setHeader(h.getKey(), v);
            }
        }
        // We always return 200 when we get to this point.
        response.setStatus(200);
        response.setHeader("Content-Length", Integer.toString(out.size()));
        // Write the cached stream to the output.
        out.writeTo(response.getOutputStream());

    } catch (XMLStreamException e) {
        response.sendError(HttpServletResponse.SC_BAD_REQUEST, "This is not a valid XML file.");
    } catch (Exception e) {
        logger.warn("Exception reading RSS feed.", e);
        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "General exception caught.");
    } finally {
        if (out != null) {
            out.close();
        }
        reader.close();
        try {
            if (writer != null)
                writer.close();
        } catch (XMLStreamException e) {
            // Not much we can do?
            e.printStackTrace();
        }
    }

}