private EdmAnnotationElement readAnnotationElement()

in odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/deserializer/XmlMetadataDeserializer.java [1259:1316]


  private EdmAnnotationElement readAnnotationElement(final XMLStreamReader reader) throws XMLStreamException {
    EdmAnnotationElementImpl elementImpl = new EdmAnnotationElementImpl();
    List<EdmAnnotationElement> annotationElements = new ArrayList<EdmAnnotationElement>();
    List<EdmAnnotationAttribute> annotationAttributes = new ArrayList<EdmAnnotationAttribute>();
    elementImpl.setName(reader.getLocalName());
    String elementNamespace = reader.getNamespaceURI();
    if (!edmNamespaces.contains(elementNamespace)) {
      elementImpl.setPrefix(reader.getPrefix());
      elementImpl.setNamespace(elementNamespace);
    }
    for (int i = 0; i < reader.getAttributeCount(); i++) {
      EdmAnnotationAttributeImpl annotationAttribute = new EdmAnnotationAttributeImpl();
      annotationAttribute.setText(reader.getAttributeValue(i));
      annotationAttribute.setName(reader.getAttributeLocalName(i));
      annotationAttribute.setPrefix(reader.getAttributePrefix(i));
      String namespace = reader.getAttributeNamespace(i);
      if (namespace != null && !isDefaultNamespace(namespace)) {
        annotationAttribute.setNamespace(namespace);
      }
      annotationAttributes.add(annotationAttribute);
    }
    if (!annotationAttributes.isEmpty()) {
      elementImpl.setAttributes(annotationAttributes);
    }

    boolean justRead = false;
    if (reader.hasNext()) {
      reader.next();
      justRead = true;
    }

    while (justRead && !(reader.isEndElement() && elementImpl.getName() != null
        && elementImpl.getName().equals(reader.getLocalName()))) {
      justRead = false;
      if (reader.isStartElement()) {
        annotationElements.add(readAnnotationElement(reader));
        if (reader.hasNext()) {
          reader.next();
          justRead = true;
        }
      } else if (reader.isCharacters()) {
        String elementText = "";
        do {
          justRead = false;
          elementText = elementText + reader.getText();
          if (reader.hasNext()) {
            reader.next();
            justRead = true;
          }
        } while (justRead && reader.isCharacters());
        elementImpl.setText(elementText);
      }
    }
    if (!annotationElements.isEmpty()) {
      elementImpl.setChildElements(annotationElements);
    }
    return elementImpl;
  }