Example usage for javax.xml.stream.events Attribute getValue

List of usage examples for javax.xml.stream.events Attribute getValue

Introduction

In this page you can find the example usage for javax.xml.stream.events Attribute getValue.

Prototype

public String getValue();

Source Link

Document

Gets the normalized value of this attribute

Usage

From source file:org.apache.olingo.fit.utils.AbstractXMLUtilities.java

public Map.Entry<Integer, XmlElement> extractElement(final XMLEventReader reader, final XMLEventWriter writer,
        final List<String> path, final Collection<Map.Entry<String, String>> filter, final boolean filterInOr,
        final int startPathPos, final int minPathPos, final int maxPathPos) throws Exception {

    StartElement start = null;/*from   www  .ja va 2 s.  co  m*/
    int searchFor = 0;
    int depth = startPathPos;

    // Current inspected element
    String current = null;

    // set defaults
    final List<String> pathElementNames = path == null ? Collections.<String>emptyList() : path;
    final Collection<Map.Entry<String, String>> filterAttrs = filter == null
            ? Collections.<Map.Entry<String, String>>emptySet()
            : filter;

    while (reader.hasNext() && start == null) {
        final XMLEvent event = reader.nextEvent();

        if (event.getEventType() == XMLStreamConstants.START_ELEMENT) {
            depth++;

            if (current != null
                    || ((minPathPos < 0 || minPathPos <= depth) && (maxPathPos < 0 || depth <= maxPathPos))) {
                if (pathElementNames.isEmpty() || pathElementNames.get(searchFor).trim()
                        .equals(event.asStartElement().getName().getLocalPart())) {

                    if (searchFor < pathElementNames.size() - 1) {
                        // path exploring not completed
                        writeEvent(event, writer);
                        current = pathElementNames.get(searchFor).trim();
                        searchFor++;
                    } else {

                        // path exploring completed ... evaluate filter about path element name attribute
                        boolean match = filterAttrs.isEmpty() || !filterInOr;

                        for (Map.Entry<String, String> filterAttr : filterAttrs) {
                            final Attribute attr = event.asStartElement()
                                    .getAttributeByName(new QName(filterAttr.getKey().trim()));

                            if (attr == null || !filterAttr.getValue().trim().equals(attr.getValue())) {
                                match = filterInOr ? match : false;
                            } else {
                                match = filterInOr ? true : match;
                            }
                        }

                        if (match) {
                            // found searched element
                            start = event.asStartElement();
                        } else {
                            skipElement(event.asStartElement(), reader, writer, false);
                            depth--;
                        }
                    }
                } else if (current == null) {
                    writeEvent(event, writer);
                } else {
                    // skip element
                    skipElement(event.asStartElement(), reader, writer, false);
                    depth--;
                }
            } else {
                writeEvent(event, writer);
            }

        } else if (event.getEventType() == XMLStreamConstants.END_ELEMENT) {
            depth--;

            writeEvent(event, writer);

            if (event.asEndElement().getName().getLocalPart().equals(current)) {
                // back step ....
                searchFor--;
                current = searchFor > 0 ? pathElementNames.get(searchFor - 1).trim() : null;
            }
        } else {
            writeEvent(event, writer);
        }
    }

    if (start == null) {
        throw new NotFoundException();
    }

    return new SimpleEntry<Integer, XmlElement>(Integer.valueOf(depth - 1), getXmlElement(start, reader));
}

From source file:org.apache.olingo.fit.utils.AbstractXMLUtilities.java

public String getEdmTypeFromAtom(final String entitySetName, final String entityId, final List<String> path)
        throws Exception {
    InputStream src = fsManager.readFile(Commons.getEntityBasePath(entitySetName, entityId) + ENTITY,
            Accept.XML);/*from   w ww  . j  av  a2 s  . com*/

    final List<String> atomPathElements = new ArrayList<String>();

    for (String element : path) {
        atomPathElements.add(ATOM_PROPERTY_PREFIX + element);
    }

    final Map.Entry<Integer, XmlElement> prop = extractElement(getEventReader(src), null, atomPathElements, 0,
            3, 4);
    IOUtils.closeQuietly(src);

    final Attribute type = prop.getValue().getStart().getAttributeByName(new QName(TYPE));

    final String edmType;

    if (type == null) {
        edmType = Constants.ATOM_DEF_TYPE;
    } else {
        edmType = type.getValue();
    }

    return edmType;
}

From source file:org.apache.olingo.fit.utils.XMLUtilities.java

/**
 * {@inheritDoc }//w  w w.j  a  v  a 2s . c o m
 */
@Override
protected NavigationLinks retrieveNavigationInfo(final String entitySetName, final InputStream is)
        throws Exception {

    final NavigationLinks links = new NavigationLinks();

    final XMLEventReader reader = getEventReader(is);

    try {
        final List<Map.Entry<String, String>> filter = new ArrayList<Map.Entry<String, String>>();
        filter.add(new AbstractMap.SimpleEntry<String, String>("type", "application/atom+xml;type=entry"));
        filter.add(new AbstractMap.SimpleEntry<String, String>("type", "application/atom+xml;type=feed"));

        int startDepth = 0;

        while (true) {
            // a. search for link with type attribute equals to "application/atom+xml;type=entry/feed"
            final Map.Entry<Integer, XMLElement> linkInfo = extractElement(reader, null,
                    Collections.<String>singletonList(Constants.get(ConstantKey.LINK)), filter, true,
                    startDepth, 2, 2);
            final XMLElement link = linkInfo.getValue();
            startDepth = linkInfo.getKey();

            final String title = link.getStart().getAttributeByName(new QName("title")).getValue();

            final Attribute hrefAttr = link.getStart().getAttributeByName(new QName("href"));
            final String href = hrefAttr == null ? null : hrefAttr.getValue();

            try {
                final XMLElement inlineElement = extractElement(link.getContentReader(), null,
                        Collections.<String>singletonList(Constants.get(ConstantKey.INLINE)), 0, -1, -1)
                                .getValue();
                final XMLEventReader inlineReader = inlineElement.getContentReader();

                try {
                    while (true) {
                        final XMLElement entry = extractElement(inlineReader, null,
                                Collections.<String>singletonList("entry"), 0, -1, -1).getValue();
                        links.addInlines(title, entry.toStream());
                    }
                } catch (Exception e) {
                    // Reached the end of document
                }

                inlineReader.close();
            } catch (Exception ignore) {
                // inline element not found (inlines are not mondatory).
                if (StringUtils.isNotBlank(href) && ENTITY_URI_PATTERN.matcher(href).matches()) {
                    links.addLinks(title, href.substring(href.lastIndexOf('/') + 1));
                }
            }
        }
    } catch (Exception ignore) {
        // ignore
    } finally {
        reader.close();
    }

    return links;
}

From source file:org.apache.olingo.fit.utils.XMLUtilities.java

public Map.Entry<Integer, XMLElement> extractElement(final XMLEventReader reader, final XMLEventWriter writer,
        final List<String> path, final Collection<Map.Entry<String, String>> filter, final boolean filterInOr,
        final int startPathPos, final int minPathPos, final int maxPathPos) throws Exception {

    StartElement start = null;//w w w. j  av a  2s. c o m
    int searchFor = 0;
    int depth = startPathPos;

    // Current inspected element
    String current = null;

    // set defaults
    final List<String> pathElementNames = path == null ? Collections.<String>emptyList() : path;
    final Collection<Map.Entry<String, String>> filterAttrs = filter == null
            ? Collections.<Map.Entry<String, String>>emptySet()
            : filter;

    while (reader.hasNext() && start == null) {
        final XMLEvent event = reader.nextEvent();

        if (event.getEventType() == XMLStreamConstants.START_ELEMENT) {
            depth++;

            if (current != null
                    || ((minPathPos < 0 || minPathPos <= depth) && (maxPathPos < 0 || depth <= maxPathPos))) {
                if (pathElementNames.isEmpty() || pathElementNames.get(searchFor).trim()
                        .equals(event.asStartElement().getName().getLocalPart())) {

                    if (searchFor < pathElementNames.size() - 1) {
                        // path exploring not completed
                        writeEvent(event, writer);
                        current = pathElementNames.get(searchFor).trim();
                        searchFor++;
                    } else {

                        // path exploring completed ... evaluate filter about path element name attribute
                        boolean match = filterAttrs.isEmpty() || !filterInOr;

                        for (Map.Entry<String, String> filterAttr : filterAttrs) {
                            final Attribute attr = event.asStartElement()
                                    .getAttributeByName(new QName(filterAttr.getKey().trim()));

                            if (attr == null || !filterAttr.getValue().trim().equals(attr.getValue())) {
                                match = filterInOr ? match : false;
                            } else {
                                match = filterInOr ? true : match;
                            }
                        }

                        if (match) {
                            // found searched element
                            start = event.asStartElement();
                        } else {
                            skipElement(event.asStartElement(), reader, writer, false);
                            depth--;
                        }
                    }
                } else if (current == null) {
                    writeEvent(event, writer);
                } else {
                    // skip element
                    skipElement(event.asStartElement(), reader, writer, false);
                    depth--;
                }
            } else {
                writeEvent(event, writer);
            }

        } else if (event.getEventType() == XMLStreamConstants.END_ELEMENT) {
            depth--;

            writeEvent(event, writer);

            if (event.asEndElement().getName().getLocalPart().equals(current)) {
                // back step ....
                searchFor--;
                current = searchFor > 0 ? pathElementNames.get(searchFor - 1).trim() : null;
            }
        } else {
            writeEvent(event, writer);
        }
    }

    if (start == null) {
        throw new NotFoundException();
    }

    return new SimpleEntry<Integer, XMLElement>(Integer.valueOf(depth - 1), getXmlElement(start, reader));
}

From source file:org.apache.olingo.server.core.deserializer.xml.ODataXmlDeserializer.java

private Property property(final XMLEventReader reader, final StartElement start, final EdmType edmType,
        final boolean isNullable, final Integer maxLength, final Integer precision, final Integer scale,
        final boolean isUnicode, final boolean isCollection)
        throws XMLStreamException, EdmPrimitiveTypeException, DeserializerException {

    final Property property = new Property();

    if (propertyValueQName.equals(start.getName())) {
        // retrieve name from context
        final Attribute context = start.getAttributeByName(contextQName);
        if (context != null) {
            property.setName(StringUtils.substringAfterLast(context.getValue(), "/"));
        }/*from  w  w w  . j  a v  a 2 s  . co  m*/
    } else {
        property.setName(start.getName().getLocalPart());
    }
    valuable(property, reader, start, edmType, isNullable, maxLength, precision, scale, isUnicode,
            isCollection);
    return property;
}

From source file:org.apache.olingo.server.core.deserializer.xml.ODataXmlDeserializer.java

private String entityRef(final XMLEventReader reader, final StartElement start) throws XMLStreamException {
    boolean foundEndElement = false;
    final Attribute entityRefId = start.getAttributeByName(Constants.QNAME_ATOM_ATTR_ID);
    while (reader.hasNext() && !foundEndElement) {
        final XMLEvent event = reader.nextEvent();
        if (event.isEndElement() && start.getName().equals(event.asEndElement().getName())) {
            foundEndElement = true;/*from   w  w  w.  j av  a  2  s  .  c o m*/
        }
    }
    return entityRefId.getValue();
}

From source file:org.apache.olingo.server.core.deserializer.xml.ODataXmlDeserializer.java

private Entity entity(final XMLEventReader reader, final StartElement start, final EdmEntityType edmEntityType)
        throws XMLStreamException, EdmPrimitiveTypeException, DeserializerException {
    Entity entity = null;//from  w ww.j a  v a  2s  .c om
    if (entryRefQName.equals(start.getName())) {
        entity = entityRef(start);
    } else if (Constants.QNAME_ATOM_ELEM_ENTRY.equals(start.getName())) {
        entity = new Entity();
        final Attribute xmlBase = start.getAttributeByName(Constants.QNAME_ATTR_XML_BASE);
        if (xmlBase != null) {
            entity.setBaseURI(URI.create(xmlBase.getValue()));
        }

        final Attribute etag = start.getAttributeByName(etagQName);
        if (etag != null) {
            entity.setETag(etag.getValue());
        }

        boolean foundEndEntry = false;
        while (reader.hasNext() && !foundEndEntry) {
            final XMLEvent event = reader.nextEvent();

            if (event.isStartElement()) {
                if (Constants.QNAME_ATOM_ELEM_ID.equals(event.asStartElement().getName())) {
                    common(reader, event.asStartElement(), entity, "id");
                } else if (Constants.QNAME_ATOM_ELEM_CATEGORY.equals(event.asStartElement().getName())) {
                    final Attribute term = event.asStartElement()
                            .getAttributeByName(QName.valueOf(Constants.ATOM_ATTR_TERM));
                    if (term != null) {
                        entity.setType(new EdmTypeInfo.Builder().setTypeExpression(term.getValue()).build()
                                .internal());
                    }
                } else if (Constants.QNAME_ATOM_ELEM_LINK.equals(event.asStartElement().getName())) {
                    final Link link = new Link();
                    final Attribute rel = event.asStartElement()
                            .getAttributeByName(QName.valueOf(Constants.ATTR_REL));
                    if (rel != null) {
                        link.setRel(rel.getValue());
                    }
                    final Attribute title = event.asStartElement()
                            .getAttributeByName(QName.valueOf(Constants.ATTR_TITLE));
                    if (title != null) {
                        link.setTitle(title.getValue());
                    }
                    final Attribute href = event.asStartElement()
                            .getAttributeByName(QName.valueOf(Constants.ATTR_HREF));
                    if (href != null) {
                        link.setBindingLink(href.getValue());
                    }
                    final Attribute linktype = event.asStartElement()
                            .getAttributeByName(QName.valueOf(Constants.ATTR_TYPE));
                    if (linktype != null) {
                        link.setType(linktype.getValue());
                    }
                    if (Constants.SELF_LINK_REL.equals(link.getRel())) {
                        entity.setSelfLink(link);
                    } else if (Constants.EDIT_LINK_REL.equals(link.getRel())) {
                        entity.setEditLink(link);
                    } else if (Constants.EDITMEDIA_LINK_REL.equals(link.getRel())) {
                        final Attribute mediaETag = event.asStartElement().getAttributeByName(etagQName);
                        if (mediaETag != null) {
                            entity.setMediaETag(mediaETag.getValue());
                        }
                    } else if (link.getRel().startsWith(Constants.NS_NAVIGATION_LINK_REL)) {
                        inline(reader, event.asStartElement(), link, edmEntityType);
                        if (link.getInlineEntity() == null && link.getInlineEntitySet() == null) {
                            entity.getNavigationBindings().add(link);
                        } else {
                            if (link.getInlineEntitySet() != null) {
                                List<String> bindings = new ArrayList<String>();
                                List<Entity> entities = link.getInlineEntitySet().getEntities();

                                for (Entity inlineEntity : entities) {
                                    // check if this is reference
                                    if (inlineEntity.getId() != null
                                            && inlineEntity.getProperties().isEmpty()) {
                                        bindings.add(inlineEntity.getId().toASCIIString());
                                    }
                                }
                                if (!bindings.isEmpty()) {
                                    link.setInlineEntitySet(null);
                                    link.setBindingLinks(bindings);
                                    entity.getNavigationBindings().add(link);
                                } else {
                                    entity.getNavigationLinks().add(link);
                                }
                            } else {
                                // add link
                                entity.getNavigationLinks().add(link);
                            }
                        }
                    } else if (link.getRel().startsWith(Constants.NS_ASSOCIATION_LINK_REL)) {
                        entity.getAssociationLinks().add(link);
                    } else if (link.getRel().startsWith(Constants.NS_MEDIA_EDIT_LINK_REL)) {
                        final Attribute metag = event.asStartElement().getAttributeByName(etagQName);
                        if (metag != null) {
                            link.setMediaETag(metag.getValue());
                        }
                        entity.getMediaEditLinks().add(link);
                    }
                } else if (Constants.QNAME_ATOM_ELEM_CONTENT.equals(event.asStartElement().getName())) {
                    final Attribute contenttype = event.asStartElement()
                            .getAttributeByName(QName.valueOf(Constants.ATTR_TYPE));
                    if (contenttype == null || ContentType.APPLICATION_XML.toContentTypeString()
                            .equals(contenttype.getValue())) {
                        properties(reader, skipBeforeFirstStartElement(reader), entity, edmEntityType);
                    } else {
                        entity.setMediaContentType(contenttype.getValue());
                        final Attribute src = event.asStartElement()
                                .getAttributeByName(QName.valueOf(Constants.ATOM_ATTR_SRC));
                        if (src != null) {
                            entity.setMediaContentSource(URI.create(src.getValue()));
                        }
                    }
                } else if (propertiesQName.equals(event.asStartElement().getName())) {
                    properties(reader, event.asStartElement(), entity, edmEntityType);
                }
            }

            if (event.isEndElement() && start.getName().equals(event.asEndElement().getName())) {
                foundEndEntry = true;
            }
        }
    }
    return entity;
}

From source file:org.apache.olingo.server.core.deserializer.xml.ODataXmlDeserializer.java

private EntityCollection entitySet(final XMLEventReader reader, final StartElement start,
        final EdmEntityType edmEntityType)
        throws XMLStreamException, EdmPrimitiveTypeException, DeserializerException {
    if (!Constants.QNAME_ATOM_ELEM_FEED.equals(start.getName())) {
        return null;
    }/*w  ww.  j a va2  s.co m*/
    final EntityCollection entitySet = new EntityCollection();
    final Attribute xmlBase = start.getAttributeByName(Constants.QNAME_ATTR_XML_BASE);
    if (xmlBase != null) {
        entitySet.setBaseURI(URI.create(xmlBase.getValue()));
    }

    boolean foundEndFeed = false;
    while (reader.hasNext() && !foundEndFeed) {
        final XMLEvent event = reader.nextEvent();
        if (event.isStartElement()) {
            if (countQName.equals(event.asStartElement().getName())) {
                count(reader, event.asStartElement(), entitySet);
            } else if (Constants.QNAME_ATOM_ELEM_ID.equals(event.asStartElement().getName())) {
                common(reader, event.asStartElement(), entitySet, "id");
            } else if (Constants.QNAME_ATOM_ELEM_LINK.equals(event.asStartElement().getName())) {
                final Attribute rel = event.asStartElement()
                        .getAttributeByName(QName.valueOf(Constants.ATTR_REL));
                if (rel != null) {
                    if (Constants.NEXT_LINK_REL.equals(rel.getValue())) {
                        final Attribute href = event.asStartElement()
                                .getAttributeByName(QName.valueOf(Constants.ATTR_HREF));
                        if (href != null) {
                            entitySet.setNext(URI.create(href.getValue()));
                        }
                    }
                    if (Constants.NS_DELTA_LINK_REL.equals(rel.getValue())) {
                        final Attribute href = event.asStartElement()
                                .getAttributeByName(QName.valueOf(Constants.ATTR_HREF));
                        if (href != null) {
                            entitySet.setDeltaLink(URI.create(href.getValue()));
                        }
                    }
                }
            } else if (Constants.QNAME_ATOM_ELEM_ENTRY.equals(event.asStartElement().getName())) {
                entitySet.getEntities().add(entity(reader, event.asStartElement(), edmEntityType));
            } else if (entryRefQName.equals(event.asStartElement().getName())) {
                entitySet.getEntities().add(entityRef(event.asStartElement()));
            }
        }

        if (event.isEndElement() && start.getName().equals(event.asEndElement().getName())) {
            foundEndFeed = true;
        }
    }
    return entitySet;
}

From source file:org.apache.olingo.server.core.deserializer.xml.ODataXmlDeserializer.java

@Override
public DeserializerResult entityReferences(final InputStream stream) throws DeserializerException {
    try {//from w  ww  .  j  a v a  2s .  com
        XMLEventReader reader = getReader(stream);
        ArrayList<URI> references = new ArrayList<URI>();

        while (reader.hasNext()) {
            final XMLEvent event = reader.nextEvent();
            if (event.isStartElement()) {
                StartElement start = event.asStartElement();
                if (entryRefQName.equals(start.getName())) {
                    Attribute context = start.getAttributeByName(Constants.QNAME_ATOM_ATTR_ID);
                    URI uri = URI.create(context.getValue());
                    references.add(uri);
                }
            }
        }
        return DeserializerResultImpl.with().entityReferences(references).build();
    } catch (XMLStreamException e) {
        throw new DeserializerException(e.getMessage(), e, DeserializerException.MessageKeys.IO_EXCEPTION);
    }
}

From source file:org.apache.xml.security.stax.impl.processor.input.AbstractDecryptInputProcessor.java

protected ReferenceType matchesReferenceId(XMLSecStartElement xmlSecStartElement) {
    Attribute refId = getReferenceIDAttribute(xmlSecStartElement);
    if (refId != null) {
        //does the id exist in the referenceList?
        return this.references.get(refId.getValue());
    }// w  w  w  .j  a  v a2 s . co m
    return null;
}