in odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/deserializer/XmlMetadataDeserializer.java [194:256]
private EdmSchema readSchema(final XMLStreamReader reader, EdmImpl edm) //NOSONAR
throws XMLStreamException, EntityProviderException, EdmException {
reader.require(XMLStreamConstants.START_ELEMENT, edmNamespace, XmlMetadataConstants.EDM_SCHEMA);
final EdmSchemaImpl schemaImpl = new EdmSchemaImpl();
final List<EdmUsing> usings = new ArrayList<EdmUsing>();
final List<EdmComplexType> complexTypes = new ArrayList<EdmComplexType>();
final List<EdmEntityType> entityTypes = new ArrayList<EdmEntityType>();
final List<EdmAssociation> associations = new ArrayList<EdmAssociation>();
final List<EdmEntityContainer> entityContainers = new ArrayList<EdmEntityContainer>();
final List<EdmAnnotationElement> annotationElements = new ArrayList<EdmAnnotationElement>();
schemaImpl.setNamespace(reader.getAttributeValue(null, XmlMetadataConstants.EDM_SCHEMA_NAMESPACE));
inscopeMap.put(schemaImpl.getNamespace(), new HashSet<String>());
schemaImpl.setAlias(reader.getAttributeValue(null, XmlMetadataConstants.EDM_SCHEMA_ALIAS));
schemaImpl.setAnnotationAttributes(readAnnotationAttribute(reader));
currentNamespace = schemaImpl.getNamespace();
while (reader.hasNext()
&& !(reader.isEndElement() && edmNamespace.equals(reader.getNamespaceURI())
&& XmlMetadataConstants.EDM_SCHEMA.equals(reader.getLocalName()))) {
reader.next();
if (reader.isStartElement()) {
extractNamespaces(reader);
currentHandledStartTagName = reader.getLocalName();
if (XmlMetadataConstants.EDM_USING.equals(currentHandledStartTagName)) {
usings.add(readUsing(reader, schemaImpl.getNamespace()));
} else if (XmlMetadataConstants.EDM_ENTITY_TYPE.equals(currentHandledStartTagName)) {
entityTypes.add(readEntityType(reader, edm));
} else if (XmlMetadataConstants.EDM_COMPLEX_TYPE.equals(currentHandledStartTagName)) {
complexTypes.add(readComplexType(reader, edm));
} else if (XmlMetadataConstants.EDM_ASSOCIATION.equals(currentHandledStartTagName)) {
associations.add(readAssociation(reader, edm));
} else if (XmlMetadataConstants.EDM_ENTITY_CONTAINER.equals(currentHandledStartTagName)) {
entityContainers.add(readEntityContainer(reader, (EdmImpl) edm));
} else {
annotationElements.add(readAnnotationElement(reader));
}
}
}
if (schemaImpl.getAlias() != null) {
aliasNamespaceMap.put(schemaImpl.getAlias(), schemaImpl.getNamespace());
edm.setAliasToNamespaceInfo(aliasNamespaceMap);
}
if (!annotationElements.isEmpty()) {
schemaImpl.setAnnotationElements(annotationElements);
}
schemaImpl
.setUsings(usings)
.setEntityTypes(entityTypes)
.setComplexTypes(complexTypes)
.setAssociations(associations)
.setEntityContainers(entityContainers);
edm.setAliasToNamespaceInfo(aliasNamespaceMap)
.setEdmAssociations(associationsMap)
.setEdmComplexTypes(complexTypesMap)
.setEdmEntityContainers(containerMap)
.setDefaultEntityContainer(defaultEdmEntityContainer)
.setEdmEntitySets(edmEntitySetList)
.setEdmEntityTypes(entityTypesMap)
.setEdmFunctionImports(edmFunctionImportList);
return schemaImpl;
}