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 <[email protected]> Authored: Tue Aug 5 09:34:16 2014 +0200 Committer: Michael Bolz <[email protected]> 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();
