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();