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;
}