You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2016/11/16 10:16:11 UTC
olingo-odata2 git commit: [OLINGO-1047] Fix metadata consumer for
multi level keys
Repository: olingo-odata2
Updated Branches:
refs/heads/master 8edf569c4 -> a823475b5
[OLINGO-1047] Fix metadata consumer for multi level keys
Based on the contribution made by Archana Rai in
https://issues.apache.org/jira/browse/OLINGO-1047
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/a823475b
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/a823475b
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/a823475b
Branch: refs/heads/master
Commit: a823475b5f13a996bd41dccd38411a73d69bf138
Parents: 8edf569
Author: Christian Amend <ch...@sap.com>
Authored: Wed Nov 16 11:07:03 2016 +0100
Committer: Christian Amend <ch...@sap.com>
Committed: Wed Nov 16 11:08:18 2016 +0100
----------------------------------------------------------------------
.../core/ep/consumer/XmlMetadataConsumer.java | 23 +++-
.../ep/consumer/XmlMetadataConsumerTest.java | 120 +++++++++++++++++++
2 files changed, 142 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/a823475b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumer.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumer.java
index 2bcc2e6..e245cad 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumer.java
@@ -991,7 +991,7 @@ public class XmlMetadataConsumer {
FullQualifiedName fqName = validateEntityTypeWithAlias(baseTypeFQName);
baseEntityType = entityTypesMap.get(fqName);
} else {
- baseEntityType = entityTypesMap.get(baseTypeFQName);
+ baseEntityType = fetchLastBaseType(baseTypeFQName,entityTypesMap);
}
if (baseEntityType.getKey() == null) {
throw new EntityProviderException(EntityProviderException.ILLEGAL_ARGUMENT
@@ -1005,6 +1005,27 @@ public class XmlMetadataConsumer {
}
}
+
+ /* This method gets the last base type of the EntityType
+ * which has key defined in order to validate it*/
+ private EntityType fetchLastBaseType
+ (FullQualifiedName baseTypeFQName, Map<FullQualifiedName, EntityType> entityTypesMap)
+ throws EntityProviderException {
+
+ EntityType baseEntityType = null ;
+ while(baseTypeFQName!=null){
+ baseEntityType = entityTypesMap.get(baseTypeFQName);
+ if(baseEntityType.getKey()!=null){
+ break;
+ }else if(baseEntityType !=null && baseEntityType.getBaseType() !=null){
+ baseTypeFQName = baseEntityType.getBaseType();
+ }else if(baseEntityType.getBaseType() == null){
+ break;
+ }
+ }
+ return baseEntityType;
+ }
+
private FullQualifiedName validateComplexTypeWithAlias(final FullQualifiedName aliasName)
throws EntityProviderException {
String namespace = aliasNamespaceMap.get(aliasName.getNamespace());
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/a823475b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumerTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumerTest.java
index ec8e96c..fb95029 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumerTest.java
@@ -293,6 +293,126 @@ public class XmlMetadataConsumerTest extends AbstractXmlConsumerTest {
assertEquals(" value1", childElements.get(0).getText());
}
+
+
+ @Test
+ public void ODATAJAVA_77_testMetadataDokumentWithMultiLevelEntityType() throws Exception {
+ final String metadata = ""
+ + "<edmx:Edmx Version=\"1.0\" xmlns:edmx=\"" + Edm.NAMESPACE_EDMX_2007_06 + "\">"
+ + " <edmx:DataServices m:DataServiceVersion=\"2.0\" xmlns:m=\"" + Edm.NAMESPACE_M_2007_08 + "\">"
+ + " <Schema Namespace=\"" + NAMESPACE2 + "\" xmlns=\"" + Edm.NAMESPACE_EDM_2008_09 + "\">"
+ + " <EntityType Name= \"Parameter\">"
+ + " <Key> "
+ + " <PropertyRef Name=\"Id\" />"
+ + " </Key>"
+ + " <Property Name=\"Id\" Type=\"Edm.Int16\" Nullable=\"false\" />"
+ + " </EntityType>"
+ + " <EntityType Name= \"ConfigParameter\" BaseType= \"RefScenario2.Parameter\" />"
+ + " <EntityType Name= \"DataConfigParameter\" BaseType= \"RefScenario2.ConfigParameter\" />"
+ + " <EntityType Name= \"StringDataConfigParameter\" BaseType= \"RefScenario2.DataConfigParameter\" />"
+ + " </Schema>"
+ + " </edmx:DataServices>"
+ + "</edmx:Edmx>";
+
+ XmlMetadataConsumer parser = new XmlMetadataConsumer();
+ XMLStreamReader reader = createStreamReader(metadata);
+ DataServices result = parser.readMetadata(reader, true);
+
+ assertEquals(1, result.getSchemas().size());
+ List<EntityType> entityTypes = result.getSchemas().get(0).getEntityTypes();
+ assertEquals(4, entityTypes.size());
+
+ }
+
+ @Test
+ public void ODATAJAVA_77_testBaseTypeKey() throws Exception {
+ final String metadata = ""
+ + "<edmx:Edmx Version=\"1.0\" xmlns:edmx=\"" + Edm.NAMESPACE_EDMX_2007_06 + "\">"
+ + " <edmx:DataServices m:DataServiceVersion=\"2.0\" xmlns:m=\"" + Edm.NAMESPACE_M_2007_08 + "\">"
+ + " <Schema Namespace=\"" + NAMESPACE2 + "\" xmlns=\"" + Edm.NAMESPACE_EDM_2008_09 + "\">"
+ + " <EntityType Name= \"Parameter\">"
+ + " <Key> "
+ + " <PropertyRef Name=\"Id\" />"
+ + " </Key>"
+ + " <Property Name=\"Id\" Type=\"Edm.Int16\" Nullable=\"false\" />"
+ + " </EntityType>"
+ + " <EntityType Name= \"ConfigParameter\" BaseType= \"RefScenario2.Parameter\" />"
+ + " <EntityType Name= \"DataConfigParameter\" BaseType= \"RefScenario2.ConfigParameter\" >"
+ + " <Key> "
+ + " <PropertyRef Name=\"Name\" />"
+ + " </Key>"
+ + " <Property Name=\"Name\" Type=\"Edm.String\" Nullable=\"false\" />"
+ + " </EntityType>"
+ + " <EntityType Name= \"StringDataConfigParameter\" BaseType= \"RefScenario2.DataConfigParameter\" />"
+ + " </Schema>"
+ + " </edmx:DataServices>"
+ + "</edmx:Edmx>";
+
+ XmlMetadataConsumer parser = new XmlMetadataConsumer();
+ XMLStreamReader reader = createStreamReader(metadata);
+ DataServices result = parser.readMetadata(reader, true);
+
+ assertEquals(1, result.getSchemas().size());
+ List<EntityType> entityTypes = result.getSchemas().get(0).getEntityTypes();
+ assertEquals(4, entityTypes.size());
+
+ }
+
+ @Test
+ public void ODATAJAVA_77_testEntityTypeKey() throws Exception {
+ final String metadata = ""
+ + "<edmx:Edmx Version=\"1.0\" xmlns:edmx=\"" + Edm.NAMESPACE_EDMX_2007_06 + "\">"
+ + " <edmx:DataServices m:DataServiceVersion=\"2.0\" xmlns:m=\"" + Edm.NAMESPACE_M_2007_08 + "\">"
+ + " <Schema Namespace=\"" + NAMESPACE2 + "\" xmlns=\"" + Edm.NAMESPACE_EDM_2008_09 + "\">"
+ + " <EntityType Name= \"Parameter\">"
+ + " <Key> "
+ + " <PropertyRef Name=\"Id\" />"
+ + " </Key>"
+ + " <Property Name=\"Id\" Type=\"Edm.Int16\" Nullable=\"false\" />"
+ + " </EntityType>"
+ + " <EntityType Name= \"ConfigParameter\" BaseType= \"RefScenario2.Parameter\" />"
+ + " <EntityType Name= \"DataConfigParameter\" BaseType= \"RefScenario2.ConfigParameter\" />"
+ + " <EntityType Name= \"StringDataConfigParameter\" BaseType= \"RefScenario2.DataConfigParameter\" >"
+ + " <Key> "
+ + " <PropertyRef Name=\"Name\" />"
+ + " </Key>"
+ + " <Property Name=\"Name\" Type=\"Edm.String\" Nullable=\"false\" />"
+ + " </EntityType>"
+ + " </Schema>"
+ + " </edmx:DataServices>"
+ + "</edmx:Edmx>";
+
+ XmlMetadataConsumer parser = new XmlMetadataConsumer();
+ XMLStreamReader reader = createStreamReader(metadata);
+ DataServices result = parser.readMetadata(reader, true);
+
+ assertEquals(1, result.getSchemas().size());
+ List<EntityType> entityTypes = result.getSchemas().get(0).getEntityTypes();
+ assertEquals(4, entityTypes.size());
+
+ }
+ @Test(expected=EntityProviderException.class)
+ public void ODATAJAVA_77_ExceptionScenario() throws Exception {
+ final String metadata = ""
+ + "<edmx:Edmx Version=\"1.0\" xmlns:edmx=\"" + Edm.NAMESPACE_EDMX_2007_06 + "\">"
+ + " <edmx:DataServices m:DataServiceVersion=\"2.0\" xmlns:m=\"" + Edm.NAMESPACE_M_2007_08 + "\">"
+ + " <Schema Namespace=\"" + NAMESPACE2 + "\" xmlns=\"" + Edm.NAMESPACE_EDM_2008_09 + "\">"
+ + " <EntityType Name= \"ConfigParameter\" BaseType= \"RefScenario2.Parameter\" />"
+ + " <EntityType Name= \"DataConfigParameter\" BaseType= \"RefScenario2.ConfigParameter\" />"
+ + " <EntityType Name= \"StringDataConfigParameter\" BaseType= \"RefScenario2.DataConfigParameter\" />"
+ + " <EntityType Name= \"Parameter\">"
+ + " <Property Name=\"Id\" Type=\"Edm.Int16\" Nullable=\"false\" />"
+ + " </EntityType>"
+ + " </Schema>"
+ + " </edmx:DataServices>"
+ + "</edmx:Edmx>";
+
+ XmlMetadataConsumer parser = new XmlMetadataConsumer();
+ XMLStreamReader reader = createStreamReader(metadata);
+ parser.readMetadata(reader, true);
+ }
+
+
@Test
public void stringValueForMaxLegthFacet() throws Exception {