You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2014/08/05 10:06:03 UTC

git commit: [OLINGO-387] Fix metadata deserialization

Repository: olingo-odata2
Updated Branches:
  refs/heads/master 3b3987bc2 -> f414699f0


[OLINGO-387] Fix metadata deserialization


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/f414699f
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/f414699f
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/f414699f

Branch: refs/heads/master
Commit: f414699f06f2aa52cf96933d94e3c30d7ee6c5bb
Parents: 3b3987b
Author: Holzer, Christian <c....@sap.com>
Authored: Tue Aug 5 09:34:16 2014 +0200
Committer: Michael Bolz <mi...@apache.org>
Committed: Tue Aug 5 10:04:37 2014 +0200

----------------------------------------------------------------------
 .../odata2/api/ep/EntityProviderException.java     |  4 ++++
 .../core/ep/consumer/XmlMetadataConsumer.java      | 10 ++++++++--
 .../odata2/core/ep/util/XmlMetadataConstants.java  |  4 +++-
 .../odata-core/src/main/resources/i18n.properties  |  1 +
 .../core/ep/consumer/XmlMetadataConsumerTest.java  | 17 +++++++++++++++++
 5 files changed, 33 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/f414699f/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderException.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderException.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderException.java
index 9054372..4c157a9 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderException.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderException.java
@@ -56,6 +56,10 @@ public class EntityProviderException extends ODataMessageException {
   /** INVALID_PARENT_TAG requires 2 content values ('missing attribute name' and 'tag name') */
   public static final MessageReference MISSING_ATTRIBUTE = createMessageReference(EntityProviderException.class,
       "MISSING_ATTRIBUTE");
+  /** MISSING_TAG requires 1 content values ('tag name') */
+  public static final MessageReference MISSING_TAG = createMessageReference(EntityProviderException.class,
+      "MISSING_TAG");
+  /** UNSUPPORTED_PROPERTY_TYPE requires 1 content values ('property type') */
   public static final MessageReference UNSUPPORTED_PROPERTY_TYPE = createMessageReference(
       EntityProviderException.class, "UNSUPPORTED_PROPERTY_TYPE");
   public static final MessageReference INLINECOUNT_INVALID = createMessageReference(EntityProviderException.class,

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/f414699f/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 1c0776a..0cc25e8 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
@@ -92,7 +92,7 @@ public class XmlMetadataConsumer {
 
       while (reader.hasNext()
           && !(reader.isEndElement() && Edm.NAMESPACE_EDMX_2007_06.equals(reader.getNamespaceURI())
-          && XmlMetadataConstants.EDM_DATA_SERVICES.equals(reader.getLocalName()))) {
+          && XmlMetadataConstants.EDMX_TAG.equals(reader.getLocalName()))) {
         reader.next();
         if (reader.isStartElement()) {
           extractNamespaces(reader);
@@ -104,8 +104,14 @@ public class XmlMetadataConsumer {
               .getLocalName())) {
             dataServices.setDataServiceVersion(reader.getAttributeValue(Edm.NAMESPACE_M_2007_08, "DataServiceVersion"));
           }
-        }
+        } 
+      }
+
+      if (!reader.isEndElement() || !XmlMetadataConstants.EDMX_TAG.equals(reader.getLocalName())) {
+        throw new EntityProviderException(EntityProviderException.MISSING_TAG
+            .addContent(XmlMetadataConstants.EDMX_TAG));
       }
+
       if (validate) {
         validate();
       }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/f414699f/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/util/XmlMetadataConstants.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/util/XmlMetadataConstants.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/util/XmlMetadataConstants.java
index 1a1e558..e3198a5 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/util/XmlMetadataConstants.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/util/XmlMetadataConstants.java
@@ -23,7 +23,9 @@ package org.apache.olingo.odata2.core.ep.util;
  * 
  */
 public class XmlMetadataConstants {
-
+  
+  public static final String EDMX_TAG = "Edmx";
+  
   public static final String EDM_DATA_SERVICES = "DataServices";
   public static final String EDM_DATA_SERVICE_VERSION = "DataServiceVersion";
   public static final String EDM_SCHEMA = "Schema";

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/f414699f/odata2-lib/odata-core/src/main/resources/i18n.properties
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/resources/i18n.properties b/odata2-lib/odata-core/src/main/resources/i18n.properties
index b640790..cc2ca5f 100644
--- a/odata2-lib/odata-core/src/main/resources/i18n.properties
+++ b/odata2-lib/odata-core/src/main/resources/i18n.properties
@@ -103,6 +103,7 @@ org.apache.olingo.odata2.api.ep.EntityProviderException.INVALID_CONTENT='%1$s' n
 org.apache.olingo.odata2.api.ep.EntityProviderException.INVALID_PROPERTY_VALUE=Provided value for the property '%1$s' is not compatible with the property.
 org.apache.olingo.odata2.api.ep.EntityProviderException.MISSING_ATTRIBUTE=Mandatory attribute '%1$s' at tag '%2$s' was not found.
 org.apache.olingo.odata2.api.ep.EntityProviderException.MISSING_PROPERTY=Property with name '%1$s' was not found.
+org.apache.olingo.odata2.api.ep.EntityProviderException.MISSING_TAG=Tag with name '%1$s' was not found.
 org.apache.olingo.odata2.api.ep.EntityProviderException.NOT_SET_CHARACTER_ENCODING=Mandatory character encoding is not set.
 org.apache.olingo.odata2.api.ep.EntityProviderException.DOUBLE_PROPERTY=Double occurrence of property with name '%1$s'.
 org.apache.olingo.odata2.api.ep.EntityProviderException.UNSUPPORTED_CHARACTER_ENCODING=The given character encoding '%1$s' is not supported.

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/f414699f/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 c497c68..bab3454 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
@@ -371,6 +371,23 @@ public class XmlMetadataConsumerTest extends AbstractXmlConsumerTest {
     parser.readMetadata(reader, true);
   }
 
+  @Test(expected = EntityProviderException.class)
+  public void testMissingEdmxCloseTag() throws XMLStreamException, EntityProviderException {
+    final String xml = "<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=\"" + NAMESPACE + "\" xmlns=\"" + Edm.NAMESPACE_EDM_2008_09 + "\">"
+        + "<EntityType Name= \"Employee\" m:HasStream=\"true\">" + "<Key><PropertyRef Name=\"EmployeeId\"/></Key>"
+        + "<Property Name=\"" + propertyNames[0] + "\" Type=\"Edm.String\" Nullable=\"false\"/>" + "<Property Name=\""
+        + propertyNames[1] + "\" Type=\"Edm.String\" m:FC_TargetPath=\"SyndicationTitle\"/>" + "<Property Name=\""
+        + propertyNames[2] + "\" Type=\"RefScenario.c_Location\" Nullable=\"false\"/>" + "</EntityType>"
+        + "<ComplexType Name=\"c_Location\">" + "<Property Name=\"Country\" Type=\"Edm.String\"/>" + "</ComplexType>"
+        + "</Schema>" + "</edmx:DataServices>";
+
+    XmlMetadataConsumer parser = new XmlMetadataConsumer();
+    XMLStreamReader reader = createStreamReader(xml);
+    parser.readMetadata(reader, true);
+  }
+
   @Test
   public void testAssociation() throws XMLStreamException, EntityProviderException {
     XmlMetadataConsumer parser = new XmlMetadataConsumer();