List of usage examples for javax.xml.stream.events XMLEvent asStartElement
public StartElement asStartElement();
From source file:org.apache.hadoop.hdfs.tools.offlineImageViewer.OfflineImageReconstructor.java
private void loadNodeChildrenHelper(Node parent, String expected, String terminators[]) throws IOException { XMLEvent ev = null; while (true) { try {// w ww. j a v a2 s . co m ev = events.peek(); switch (ev.getEventType()) { case XMLEvent.END_ELEMENT: if (terminators.length != 0) { return; } events.nextEvent(); return; case XMLEvent.START_ELEMENT: String key = ev.asStartElement().getName().getLocalPart(); for (String terminator : terminators) { if (terminator.equals(key)) { return; } } events.nextEvent(); Node node = new Node(); parent.addChild(key, node); loadNodeChildrenHelper(node, expected, new String[0]); break; case XMLEvent.CHARACTERS: String val = XMLUtils.unmangleXmlString(ev.asCharacters().getData(), true); parent.setVal(val); events.nextEvent(); break; case XMLEvent.ATTRIBUTE: throw new IOException("Unexpected XML event " + ev); default: // Ignore other event types like comment, etc. if (LOG.isTraceEnabled()) { LOG.trace("Skipping XMLEvent " + ev); } events.nextEvent(); break; } } catch (XMLStreamException e) { throw new IOException("Expecting " + expected + ", but got XMLStreamException", e); } } }
From source file:org.apache.hadoop.hdfs.tools.offlineImageViewer.OfflineImageReconstructor.java
/** * Processes the XML file back into an fsimage. *///from ww w . j a va 2s . c om private void processXml() throws Exception { LOG.debug("Loading <fsimage>."); expectTag("fsimage", false); // Read the <version> tag. readVersion(); // Write the HDFSIMG1 magic number which begins the fsimage file. out.write(FSImageUtil.MAGIC_HEADER); // Write a series of fsimage sections. sectionStartOffset = FSImageUtil.MAGIC_HEADER.length; final HashSet<String> unprocessedSections = new HashSet<>(sections.keySet()); while (!unprocessedSections.isEmpty()) { XMLEvent ev = expectTag("[section header]", true); if (ev.getEventType() == XMLStreamConstants.END_ELEMENT) { if (ev.asEndElement().getName().getLocalPart().equals("fsimage")) { throw new IOException("FSImage XML ended prematurely, without " + "including section(s) " + StringUtils.join(", ", unprocessedSections)); } throw new IOException( "Got unexpected tag end event for " + ev.asEndElement().getName().getLocalPart() + " while looking " + "for section header tag."); } else if (ev.getEventType() != XMLStreamConstants.START_ELEMENT) { throw new IOException( "Expected section header START_ELEMENT; " + "got event of type " + ev.getEventType()); } String sectionName = ev.asStartElement().getName().getLocalPart(); if (!unprocessedSections.contains(sectionName)) { throw new IOException("Unknown or duplicate section found for " + sectionName); } SectionProcessor sectionProcessor = sections.get(sectionName); if (sectionProcessor == null) { throw new IOException("Unknown FSImage section " + sectionName + ". Valid section names are [" + StringUtils.join(", ", sections.keySet()) + "]"); } unprocessedSections.remove(sectionName); sectionProcessor.process(); } // Write the StringTable section to disk. // This has to be done after the other sections, since some of them // add entries to the string table. writeStringTableSection(); // Write the FileSummary section to disk. // This section is always last. long prevOffset = out.getCount(); FileSummary fileSummary = fileSummaryBld.build(); if (LOG.isDebugEnabled()) { LOG.debug("Writing FileSummary: {" + TextFormat.printToString(fileSummary) + "}"); } // Even though the last 4 bytes of the file gives the FileSummary length, // we still write a varint first that also contains the length. fileSummary.writeDelimitedTo(out); // Write the length of the FileSummary section as a fixed-size big // endian 4-byte quantity. int summaryLen = Ints.checkedCast(out.getCount() - prevOffset); byte[] summaryLenBytes = new byte[4]; ByteBuffer.wrap(summaryLenBytes).asIntBuffer().put(summaryLen); out.write(summaryLenBytes); }
From source file:org.apache.hadoop.util.ConfTest.java
private static List<NodeInfo> parseConf(InputStream in) throws XMLStreamException { QName configuration = new QName("configuration"); QName property = new QName("property"); List<NodeInfo> nodes = new ArrayList<NodeInfo>(); Stack<NodeInfo> parsed = new Stack<NodeInfo>(); XMLInputFactory factory = XMLInputFactory.newInstance(); XMLEventReader reader = factory.createXMLEventReader(in); while (reader.hasNext()) { XMLEvent event = reader.nextEvent(); if (event.isStartElement()) { StartElement currentElement = event.asStartElement(); NodeInfo currentNode = new NodeInfo(currentElement); if (parsed.isEmpty()) { if (!currentElement.getName().equals(configuration)) { return null; }// w ww. ja v a2 s .co m } else { NodeInfo parentNode = parsed.peek(); QName parentName = parentNode.getStartElement().getName(); if (parentName.equals(configuration) && currentNode.getStartElement().getName().equals(property)) { @SuppressWarnings("unchecked") Iterator<Attribute> it = currentElement.getAttributes(); while (it.hasNext()) { currentNode.addAttribute(it.next()); } } else if (parentName.equals(property)) { parentNode.addElement(currentElement); } } parsed.push(currentNode); } else if (event.isEndElement()) { NodeInfo node = parsed.pop(); if (parsed.size() == 1) { nodes.add(node); } } else if (event.isCharacters()) { if (2 < parsed.size()) { NodeInfo parentNode = parsed.pop(); StartElement parentElement = parentNode.getStartElement(); NodeInfo grandparentNode = parsed.peek(); if (grandparentNode.getElement(parentElement) == null) { grandparentNode.setElement(parentElement, event.asCharacters()); } parsed.push(parentNode); } } } return nodes; }
From source file:org.apache.hadoop.util.ConfTest.java
public static List<String> checkConf(InputStream in) { List<NodeInfo> nodes = null; List<String> errors = new ArrayList<String>(); try {//w w w . j a va 2 s .c om nodes = parseConf(in); if (nodes == null) { errors.add("bad conf file: top-level element not <configuration>"); } } catch (XMLStreamException e) { errors.add("bad conf file: " + e.getMessage()); } if (!errors.isEmpty()) { return errors; } Map<String, List<Integer>> duplicatedProperties = new HashMap<String, List<Integer>>(); for (NodeInfo node : nodes) { StartElement element = node.getStartElement(); int line = element.getLocation().getLineNumber(); if (!element.getName().equals(new QName("property"))) { errors.add(String.format("Line %d: element not <property>", line)); continue; } List<XMLEvent> events = node.getXMLEventsForQName(new QName("name")); if (events == null) { errors.add(String.format("Line %d: <property> has no <name>", line)); } else { String v = null; for (XMLEvent event : events) { if (event.isAttribute()) { v = ((Attribute) event).getValue(); } else { Characters c = node.getElement(event.asStartElement()); if (c != null) { v = c.getData(); } } if (v == null || v.isEmpty()) { errors.add(String.format("Line %d: <property> has an empty <name>", line)); } } if (v != null && !v.isEmpty()) { List<Integer> lines = duplicatedProperties.get(v); if (lines == null) { lines = new ArrayList<Integer>(); duplicatedProperties.put(v, lines); } lines.add(node.getStartElement().getLocation().getLineNumber()); } } events = node.getXMLEventsForQName(new QName("value")); if (events == null) { errors.add(String.format("Line %d: <property> has no <value>", line)); } for (QName qName : node.getDuplicatedQNames()) { if (!qName.equals(new QName("source"))) { errors.add(String.format("Line %d: <property> has duplicated <%s>s", line, qName)); } } } for (Entry<String, List<Integer>> e : duplicatedProperties.entrySet()) { List<Integer> lines = e.getValue(); if (1 < lines.size()) { errors.add(String.format("Line %s: duplicated <property>s for %s", StringUtils.join(", ", lines), e.getKey())); } } return errors; }
From source file:org.apache.olingo.client.core.serialization.AtomDeserializer.java
private Object fromPrimitive(final XMLEventReader reader, final StartElement start, final EdmTypeInfo typeInfo) throws XMLStreamException, EdmPrimitiveTypeException { Object value = null;//from www . ja va 2 s. c om boolean foundEndProperty = false; while (reader.hasNext() && !foundEndProperty) { final XMLEvent event = reader.nextEvent(); if (event.isStartElement() && typeInfo != null && typeInfo.getPrimitiveTypeKind().isGeospatial()) { final EdmPrimitiveTypeKind geoType = EdmPrimitiveTypeKind .valueOfFQN(typeInfo.getFullQualifiedName().toString()); value = geoDeserializer.deserialize(reader, event.asStartElement(), geoType); } if (event.isCharacters() && !event.asCharacters().isWhiteSpace() && (typeInfo == null || !typeInfo.getPrimitiveTypeKind().isGeospatial())) { final String stringValue = event.asCharacters().getData(); if (typeInfo == null) { value = stringValue; } else { final EdmPrimitiveType primitiveType = (EdmPrimitiveType) typeInfo.getType(); final Class<?> returnType = primitiveType.getDefaultType().isAssignableFrom(Calendar.class) ? Timestamp.class : primitiveType.getDefaultType(); value = ((EdmPrimitiveType) typeInfo.getType()).valueOfString(stringValue, true, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, true, returnType); } } if (event.isEndElement() && start.getName().equals(event.asEndElement().getName())) { foundEndProperty = true; } } return value; }
From source file:org.apache.olingo.client.core.serialization.AtomDeserializer.java
private Object fromComplexOrEnum(final XMLEventReader reader, final StartElement start) throws XMLStreamException, EdmPrimitiveTypeException { Object value = null;/*from ww w . j a va2 s . c o m*/ boolean foundEndProperty = false; while (reader.hasNext() && !foundEndProperty) { final XMLEvent event = reader.nextEvent(); if (event.isStartElement()) { if (value == null) { value = new ComplexValue(); } 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.setHref(href.getValue()); } final Attribute type = event.asStartElement() .getAttributeByName(QName.valueOf(Constants.ATTR_TYPE)); if (type != null) { link.setType(type.getValue()); } if (link.getRel().startsWith(Constants.NS_NAVIGATION_LINK_REL)) { ((ComplexValue) value).getNavigationLinks().add(link); inline(reader, event.asStartElement(), link); } else if (link.getRel().startsWith(Constants.NS_ASSOCIATION_LINK_REL)) { ((Valuable) value).asComplex().getAssociationLinks().add(link); } } else { ((ComplexValue) value).getValue().add(property(reader, event.asStartElement())); } } if (event.isCharacters() && !event.asCharacters().isWhiteSpace()) { value = event.asCharacters().getData(); } if (event.isEndElement() && start.getName().equals(event.asEndElement().getName())) { foundEndProperty = true; } } return value; }
From source file:org.apache.olingo.client.core.serialization.AtomDeserializer.java
private void fromCollection(final Valuable valuable, final XMLEventReader reader, final StartElement start, final EdmTypeInfo typeInfo) throws XMLStreamException, EdmPrimitiveTypeException { List<Object> values = new ArrayList<Object>(); ValueType valueType = ValueType.COLLECTION_PRIMITIVE; final EdmTypeInfo type = typeInfo == null ? null : new EdmTypeInfo.Builder().setTypeExpression(typeInfo.getFullQualifiedName().toString()).build(); boolean foundEndProperty = false; while (reader.hasNext() && !foundEndProperty) { final XMLEvent event = reader.nextEvent(); if (event.isStartElement()) { switch (guessPropertyType(reader, typeInfo)) { case COMPLEX: final Object complexValue = fromComplexOrEnum(reader, event.asStartElement()); valueType = ValueType.COLLECTION_COMPLEX; values.add(complexValue); break; case ENUM: valueType = ValueType.COLLECTION_ENUM; values.add(fromComplexOrEnum(reader, event.asStartElement())); break; case PRIMITIVE: final Object value = fromPrimitive(reader, event.asStartElement(), type); valueType = value instanceof Geospatial ? ValueType.COLLECTION_GEOSPATIAL : ValueType.COLLECTION_PRIMITIVE; values.add(value);/*from w w w . j ava 2 s . co m*/ break; default: // do not add null or empty values } } if (event.isEndElement() && start.getName().equals(event.asEndElement().getName())) { foundEndProperty = true; } } valuable.setValue(valueType, values); }
From source file:org.apache.olingo.client.core.serialization.AtomDeserializer.java
private PropertyType guessPropertyType(final XMLEventReader reader, final EdmTypeInfo typeInfo) throws XMLStreamException { XMLEvent child = null; while (reader.hasNext() && child == null) { final XMLEvent event = reader.peek(); if (event.isCharacters() && event.asCharacters().isWhiteSpace()) { reader.nextEvent();//from ww w . j a va 2 s .c om } else { child = event; } } final PropertyType type; if (child == null) { type = typeInfo == null || typeInfo.isPrimitiveType() ? PropertyType.PRIMITIVE : PropertyType.ENUM; } else { if (child.isStartElement()) { if (Constants.NS_GML.equals(child.asStartElement().getName().getNamespaceURI())) { type = PropertyType.PRIMITIVE; } else if (elementQName.equals(child.asStartElement().getName())) { type = PropertyType.COLLECTION; } else { type = PropertyType.COMPLEX; } } else if (child.isCharacters()) { type = typeInfo == null || typeInfo.isPrimitiveType() ? PropertyType.PRIMITIVE : PropertyType.ENUM; } else { type = PropertyType.EMPTY; } } return type; }
From source file:org.apache.olingo.client.core.serialization.AtomDeserializer.java
private StartElement skipBeforeFirstStartElement(final XMLEventReader reader) throws XMLStreamException { StartElement startEvent = null; while (reader.hasNext() && startEvent == null) { final XMLEvent event = reader.nextEvent(); if (event.isStartElement()) { startEvent = event.asStartElement(); }//from w w w.ja v a 2 s .c om } if (startEvent == null) { throw new IllegalArgumentException("Cannot find any XML start element"); } return startEvent; }
From source file:org.apache.olingo.client.core.serialization.AtomDeserializer.java
private void inline(final XMLEventReader reader, final StartElement start, final Link link) throws XMLStreamException, EdmPrimitiveTypeException { boolean foundEndElement = false; while (reader.hasNext() && !foundEndElement) { final XMLEvent event = reader.nextEvent(); if (event.isStartElement()) { if (inlineQName.equals(event.asStartElement().getName())) { StartElement inline = getStartElement(reader); if (inline != null) { if (Constants.QNAME_ATOM_ELEM_ENTRY.equals(inline.getName())) { link.setInlineEntity(entity(reader, inline)); }/*from ww w. j av a 2 s .c o m*/ if (Constants.QNAME_ATOM_ELEM_FEED.equals(inline.getName())) { link.setInlineEntitySet(entitySet(reader, inline)); } } } else if (annotationQName.equals(event.asStartElement().getName())) { link.getAnnotations().add(annotation(reader, event.asStartElement())); } } if (event.isEndElement() && start.getName().equals(event.asEndElement().getName())) { foundEndElement = true; } } }