You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ra...@apache.org on 2017/10/12 05:16:58 UTC
[2/3] olingo-odata4 git commit: [OLINGO-1180] Validation of metadata
post deserialization
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/48263a8c/lib/client-core/src/test/java/org/apache/olingo/client/core/MetadataValidationTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/MetadataValidationTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/MetadataValidationTest.java
new file mode 100644
index 0000000..cec818e
--- /dev/null
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/MetadataValidationTest.java
@@ -0,0 +1,1254 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.client.core;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+
+import org.apache.olingo.client.api.edm.xml.XMLMetadata;
+import org.apache.olingo.client.api.serialization.ODataMetadataValidation;
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmException;
+import org.apache.olingo.commons.api.format.ContentType;
+import org.junit.Test;
+
+public class MetadataValidationTest extends AbstractTest {
+ public static final String wrongBindingTarget = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" "
+ + "xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" m:MaxDataServiceVersion=\"4.0\" "
+ + "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\">"
+ + "<EntityType Name=\"User\"><Key><PropertyRef Name=\"Id\" />"
+ + "</Key><Property Name=\"Id\" Type=\"Edm.String\" Nullable=\"false\" />"
+ + "<NavigationProperty Name=\"Messages\" "
+ + "Type=\"Collection(Microsoft.Exchange.Services.OData.Model.EmailMessage)\" />"
+ + "</EntityType>"
+ + "<EntityType Name=\"Folder\">"
+ + "<Key><PropertyRef Name=\"Id\" /></Key>"
+ + "<Property Name=\"Id\" Type=\"Edm.String\" Nullable=\"false\" />"
+ + "<Property Name=\"ParentFolderId\" Type=\"Edm.String\" />"
+ + "</EntityType>"
+ + "<EntityType Name=\"EmailMessage\">"
+ + "<Key><PropertyRef Name=\"Id\" /></Key>"
+ + "<Property Name=\"Id\" Type=\"Edm.String\" Nullable=\"false\" />"
+ + "</EntityType>"
+ + "<EntityContainer Name=\"EntityContainer\" m:IsDefaultEntityContainer=\"true\">"
+ + "<EntitySet Name=\"Users\" EntityType=\"Microsoft.Exchange.Services.OData.Model.User\">"
+ + "<NavigationPropertyBinding Path=\"Messages\" Target=\"Folders\" />"
+ + "</EntitySet>"
+ + "<EntitySet Name=\"Folders\" EntityType=\"Microsoft.Exchange.Services.OData.Model.Folder\" />"
+ + "</EntityContainer>"
+ + "</Schema>"
+ + "</edmx:DataServices>"
+ + "</edmx:Edmx>";
+
+ public static final String xmlWithNonKeyEntity =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" "
+ + "m:MaxDataServiceVersion=\"4.0\" "
+ + "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\">"
+ + "<EntityType Name=\"Entity\" Abstract=\"true\">"
+ + "<Property Name=\"Id\" Type=\"Edm.String\" Nullable=\"false\" />"
+ + "</EntityType>"
+ + "<EntityType Name=\"User\" BaseType=\"Microsoft.Exchange.Services.OData.Model.Entity\">"
+ + "</EntityType><EntityContainer Name=\"EntityContainer\" m:IsDefaultEntityContainer=\"true\">"
+ + "<EntitySet Name=\"Users\" EntityType=\"Microsoft.Exchange.Services.OData.Model.User\" />"
+ + "</EntityContainer>"
+ + "</Schema>"
+ + "</edmx:DataServices>"
+ + "</edmx:Edmx>";
+
+ public static final String xmlWithWrongBindingTarget =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" m:MaxDataServiceVersion=\"4.0\" "
+ + "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\">"
+ + "<EntityType Name=\"Customer\" Abstract=\"true\">"
+ + "<Key><PropertyRef Name=\"CustomerId\" /></Key>"
+ + "<Property Name=\"CustomerId\" Type=\"Edm.String\" Nullable=\"false\"/>"
+ + "<Property Name=\"CustomerName\" Type=\"Edm.String\" />"
+ + "<Property Name=\"Pet\" Type=\"Microsoft.Exchange.Services.OData.Model.Animal\" />"
+ + "</EntityType><EntityType Name=\"City\">"
+ + "<Key><PropertyRef Name=\"Id\" /></Key>"
+ + "<Property Name=\"Id\" Type=\"Edm.String\" Nullable=\"false\"/>"
+ + "</EntityType><ComplexType Name=\"Animal\">"
+ + "</ComplexType><ComplexType Name=\"Human\" "
+ + "BaseType=\"Microsoft.Exchange.Services.OData.Model.Animal\">"
+ + "<Property Name=\"HumanAddress\" Type=\"Microsoft.Exchange.Services.OData.Model.USAddress\" />"
+ + "</ComplexType>"
+ + "<ComplexType Name=\"Address\">"
+ + "<NavigationProperty Name=\"City\" Type=\"Microsoft.Exchange.Services.OData.Model.City\" />"
+ + "</ComplexType>"
+ + "<ComplexType Name=\"USAddress\" "
+ + "BaseType=\"Microsoft.Exchange.Services.OData.Model.Address\">"
+ + "<NavigationProperty Name=\"SubCity\" Type=\"Microsoft.Exchange.Services.OData.Model.City\" />"
+ + "</ComplexType>"
+ + "<EntityContainer Name=\"EntityContainer\" m:IsDefaultEntityContainer=\"true\">"
+ + "<EntitySet Name=\"Customers\" EntityType=\"Microsoft.Exchange.Services.OData.Model.Customer\">"
+ + "<NavigationPropertyBinding "
+ + "Path=\"Pet/Microsoft.Exchange.Services.OData.Model.Human/HumanAddress/SubCity\" "
+ + "Target=\"HumanCities\" />"
+ + "</EntitySet>"
+ + "</EntityContainer>"
+ + "</Schema>"
+ + "<Schema Namespace=\"ODataWebExperimental.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\">"
+ + "<EntityContainer Name=\"EntityContainer1\" p4:LazyLoadingEnabled=\"true\" "
+ + "xmlns:p4=\"http://schemas.microsoft.com/ado/2009/02/edm/annotation\">"
+ + "<EntitySet Name=\"HumanCities\" EntityType=\"Microsoft.Exchange.Services.OData.Model.City\"/>"
+ + "</EntityContainer>"
+ + "</Schema>"
+ + "</edmx:DataServices>"
+ + "</edmx:Edmx>";
+
+ public static final String xmlWithWrongBindingTarget1 =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" m:MaxDataServiceVersion=\"4.0\" "
+ + "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\">"
+ + "<EntityType Name=\"Customer\" Abstract=\"true\">"
+ + "<Key><PropertyRef Name=\"CustomerId\" /></Key>"
+ + "<Property Name=\"CustomerId\" Type=\"Edm.String\" Nullable=\"false\"/>"
+ + "<Property Name=\"CustomerName\" Type=\"Edm.String\" />"
+ + "<Property Name=\"Pet\" Type=\"Microsoft.Exchange.Services.OData.Model.Animal\" />"
+ + "</EntityType><EntityType Name=\"City\">"
+ + "<Key><PropertyRef Name=\"Id\" /></Key>"
+ + "<Property Name=\"Id\" Type=\"Edm.String\" Nullable=\"false\"/>"
+ + "</EntityType><ComplexType Name=\"Animal\">"
+ + "</ComplexType><ComplexType Name=\"Human\" "
+ + "BaseType=\"Microsoft.Exchange.Services.OData.Model.Animal\">"
+ + "<Property Name=\"HumanAddress\" Type=\"Microsoft.Exchange.Services.OData.Model.USAddress\" />"
+ + "</ComplexType>"
+ + "<ComplexType Name=\"Address\">"
+ + "<NavigationProperty Name=\"City\" Type=\"Microsoft.Exchange.Services.OData.Model.City\" />"
+ + "</ComplexType>"
+ + "<ComplexType Name=\"USAddress\" "
+ + "BaseType=\"Microsoft.Exchange.Services.OData.Model.Address\">"
+ + "<NavigationProperty Name=\"SubCity\" Type=\"Microsoft.Exchange.Services.OData.Model.City\" />"
+ + "</ComplexType>"
+ + "<EntityContainer Name=\"EntityContainer\" m:IsDefaultEntityContainer=\"true\">"
+ + "<EntitySet Name=\"Customers\" EntityType=\"Microsoft.Exchange.Services.OData.Model.Customer\">"
+ + "<NavigationPropertyBinding "
+ + "Path=\"Pet/Microsoft.Exchange.Services.OData.Model.Human/HumanAddress/SubCity\" "
+ + "Target=\"ODataWebExperimental.OData.Model.EntityContainer1/HuCities\" />"
+ + "</EntitySet>"
+ + "</EntityContainer>"
+ + "</Schema>"
+ + "<Schema Namespace=\"ODataWebExperimental.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\">"
+ + "<EntityContainer Name=\"EntityContainer1\" p4:LazyLoadingEnabled=\"true\" "
+ + "xmlns:p4=\"http://schemas.microsoft.com/ado/2009/02/edm/annotation\">"
+ + "<EntitySet Name=\"HumanCities\" EntityType=\"Microsoft.Exchange.Services.OData.Model.City\"/>"
+ + "</EntityContainer>"
+ + "</Schema>"
+ + "</edmx:DataServices>"
+ + "</edmx:Edmx>";
+
+ public static final String xmlWithNonKeyEntity1 =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" "
+ + "m:MaxDataServiceVersion=\"4.0\" "
+ + "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\">"
+ + "<EntityType Name=\"User\">"
+ + "</EntityType><EntityContainer Name=\"EntityContainer\" m:IsDefaultEntityContainer=\"true\">"
+ + "<EntitySet Name=\"Users\" EntityType=\"Microsoft.Exchange.Services.OData.Model.User\" />"
+ + "</EntityContainer>"
+ + "</Schema>"
+ + "</edmx:DataServices>"
+ + "</edmx:Edmx>";
+
+ public static final String xmlWithWrongNamespaceInBindingTarget =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" m:MaxDataServiceVersion=\"4.0\" "
+ + "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\">"
+ + "<EntityType Name=\"Customer\" Abstract=\"true\">"
+ + "<Key><PropertyRef Name=\"CustomerId\" /></Key>"
+ + "<Property Name=\"CustomerId\" Type=\"Edm.String\" Nullable=\"false\"/>"
+ + "<Property Name=\"CustomerName\" Type=\"Edm.String\" />"
+ + "<Property Name=\"Pet\" Type=\"Microsoft.Exchange.Services.OData.Model.Animal\" />"
+ + "</EntityType><EntityType Name=\"City\">"
+ + "<Key><PropertyRef Name=\"Id\" /></Key>"
+ + "<Property Name=\"Id\" Type=\"Edm.String\" Nullable=\"false\"/>"
+ + "</EntityType><ComplexType Name=\"Animal\">"
+ + "</ComplexType><ComplexType Name=\"Human\" "
+ + "BaseType=\"Microsoft.Exchange.Services.OData.Model.Animal\">"
+ + "<Property Name=\"HumanAddress\" Type=\"Microsoft.Exchange.Services.OData.Model.USAddress\" />"
+ + "</ComplexType>"
+ + "<ComplexType Name=\"Address\">"
+ + "<NavigationProperty Name=\"City\" Type=\"Microsoft.Exchange.Services.OData.Model.City\" />"
+ + "</ComplexType>"
+ + "<ComplexType Name=\"USAddress\" "
+ + "BaseType=\"Microsoft.Exchange.Services.OData.Model.Address\">"
+ + "<NavigationProperty Name=\"SubCity\" Type=\"Microsoft.Exchange.Services.OData.Model.City\" />"
+ + "</ComplexType>"
+ + "<EntityContainer Name=\"EntityContainer\" m:IsDefaultEntityContainer=\"true\">"
+ + "<EntitySet Name=\"Customers\" EntityType=\"Microsoft.Exchange.Services.OData.Model.Customer\">"
+ + "<NavigationPropertyBinding "
+ + "Path=\"Pet/Microsoft.Exchange.Services.OData.Model.Human/HumanAddress/SubCity\" "
+ + "Target=\"Model.EntityContainer1/HumanCities\" />"
+ + "</EntitySet>"
+ + "</EntityContainer>"
+ + "</Schema>"
+ + "<Schema Namespace=\"ODataWebExperimental.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\">"
+ + "<EntityContainer Name=\"EntityContainer1\" p4:LazyLoadingEnabled=\"true\" "
+ + "xmlns:p4=\"http://schemas.microsoft.com/ado/2009/02/edm/annotation\">"
+ + "<EntitySet Name=\"HumanCities\" EntityType=\"Microsoft.Exchange.Services.OData.Model.City\"/>"
+ + "</EntityContainer>"
+ + "</Schema>"
+ + "</edmx:DataServices>"
+ + "</edmx:Edmx>";
+
+ public static final String xmlWithWrongNamespaceInBindingPath =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" m:MaxDataServiceVersion=\"4.0\" "
+ + "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\">"
+ + "<EntityType Name=\"Customer\" Abstract=\"true\">"
+ + "<Key><PropertyRef Name=\"CustomerId\" /></Key>"
+ + "<Property Name=\"CustomerId\" Type=\"Edm.String\" Nullable=\"false\"/>"
+ + "<Property Name=\"CustomerName\" Type=\"Edm.String\" />"
+ + "<Property Name=\"Pet\" Type=\"Microsoft.Exchange.Services.OData.Model.Animal\" />"
+ + "</EntityType><EntityType Name=\"City\">"
+ + "<Key><PropertyRef Name=\"Id\" /></Key>"
+ + "<Property Name=\"Id\" Type=\"Edm.String\" Nullable=\"false\"/>"
+ + "</EntityType><ComplexType Name=\"Animal\">"
+ + "</ComplexType><ComplexType Name=\"Human\" "
+ + "BaseType=\"Microsoft.Exchange.Services.OData.Model.Animal\">"
+ + "<Property Name=\"HumanAddress\" Type=\"Microsoft.Exchange.Services.OData.Model.USAddress\" />"
+ + "</ComplexType>"
+ + "<ComplexType Name=\"Address\">"
+ + "<NavigationProperty Name=\"City\" Type=\"Microsoft.Exchange.Services.OData.Model.City\" />"
+ + "</ComplexType>"
+ + "<ComplexType Name=\"USAddress\" "
+ + "BaseType=\"Microsoft.Exchange.Services.OData.Model.Address\">"
+ + "<NavigationProperty Name=\"SubCity\" Type=\"Microsoft.Exchange.Services.OData.Model.City\" />"
+ + "</ComplexType>"
+ + "<EntityContainer Name=\"EntityContainer\" m:IsDefaultEntityContainer=\"true\">"
+ + "<EntitySet Name=\"Customers\" EntityType=\"Microsoft.Exchange.Services.OData.Model.Customer\">"
+ + "<NavigationPropertyBinding "
+ + "Path=\"Pet/OData.Model.Human/HumanAddress/SubCity\" "
+ + "Target=\"ODataWebExperimental.OData.Model.EntityContainer1/HumanCities\" />"
+ + "</EntitySet>"
+ + "</EntityContainer>"
+ + "</Schema>"
+ + "<Schema Namespace=\"ODataWebExperimental.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\">"
+ + "<EntityContainer Name=\"EntityContainer1\" p4:LazyLoadingEnabled=\"true\" "
+ + "xmlns:p4=\"http://schemas.microsoft.com/ado/2009/02/edm/annotation\">"
+ + "<EntitySet Name=\"HumanCities\" EntityType=\"Microsoft.Exchange.Services.OData.Model.City\"/>"
+ + "</EntityContainer>"
+ + "</Schema>"
+ + "</edmx:DataServices>"
+ + "</edmx:Edmx>";
+
+ public static final String xmlWithInvalidEntityTypeNamespace =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" m:MaxDataServiceVersion=\"4.0\" "
+ + "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\">"
+ + "<EntityType Name=\"Customer\" Abstract=\"true\">"
+ + "<Key><PropertyRef Name=\"CustomerId\" /></Key>"
+ + "<Property Name=\"CustomerId\" Type=\"Edm.String\" Nullable=\"false\"/>"
+ + "<Property Name=\"CustomerName\" Type=\"Edm.String\" />"
+ + "<Property Name=\"Pet\" Type=\"Microsoft.Exchange.Services.OData.Model.Animal\" />"
+ + "</EntityType>"
+ + "<EntityType Name=\"City\">"
+ + "<Key><PropertyRef Name=\"Id\" /></Key>"
+ + "<Property Name=\"Id\" Type=\"Edm.String\" Nullable=\"false\"/>"
+ + "</EntityType>"
+ + "<ComplexType Name=\"Animal\">"
+ + "</ComplexType>"
+ + "<ComplexType Name=\"Human\" BaseType=\"Microsoft.Exchange.Services.OData.Model.Animal\">"
+ + "<Property Name=\"HumanAddress\" Type=\"Microsoft.Exchange.Services.OData.Model.USAddress\"/>"
+ + "</ComplexType>"
+ + "<ComplexType Name=\"Address\">"
+ + "<NavigationProperty Name=\"City\" Type=\"Microsoft.Exchange.Services.OData.Model.City\"/>"
+ + "</ComplexType>"
+ + "<ComplexType Name=\"USAddress\" BaseType=\"Microsoft.Exchange.Services.OData.Model.Address\">"
+ + "<NavigationProperty Name=\"SubCity\" Type=\"Microsoft.Exchange.Services.OData.Model.City\" />"
+ + "</ComplexType>"
+ + "<EntityContainer Name=\"EntityContainer\" m:IsDefaultEntityContainer=\"true\">"
+ + "<EntitySet Name=\"Customers\" EntityType=\"OData.Model.Customer\">"
+ + "<NavigationPropertyBinding "
+ + "Path=\"Pet/Microsoft.Exchange.Services.OData.Model.Human/HumanAddress/SubCity\" "
+ + "Target=\"ODataWebExperimental.OData.Model.EntityContainer1/HumanCities\" />"
+ + "</EntitySet>"
+ + "</EntityContainer>"
+ + "</Schema>"
+ + "<Schema Namespace=\"ODataWebExperimental.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\">"
+ + "<EntityContainer Name=\"EntityContainer1\" p4:LazyLoadingEnabled=\"true\" "
+ + "xmlns:p4=\"http://schemas.microsoft.com/ado/2009/02/edm/annotation\">"
+ + "<EntitySet Name=\"HumanCities\" EntityType=\"Microsoft.Exchange.Services.OData.Model.City\"/>"
+ + "</EntityContainer>"
+ + "</Schema>"
+ + "</edmx:DataServices>"
+ + "</edmx:Edmx>";
+
+ public static final String xmlWithWrongComplexBaseType =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" m:MaxDataServiceVersion=\"4.0\" "
+ + "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\">"
+ + "<EntityType Name=\"Customer\" Abstract=\"true\">"
+ + "<Key><PropertyRef Name=\"CustomerId\" /></Key>"
+ + "<Property Name=\"CustomerId\" Type=\"Edm.String\" Nullable=\"false\"/>"
+ + "<Property Name=\"CustomerName\" Type=\"Edm.String\" />"
+ + "<Property Name=\"Pet\" Type=\"Microsoft.Exchange.Services.OData.Model.Animal\" />"
+ + "</EntityType>"
+ + "<EntityType Name=\"City\">"
+ + "<Key><PropertyRef Name=\"Id\" /></Key>"
+ + "<Property Name=\"Id\" Type=\"Edm.String\" Nullable=\"false\"/>"
+ + "</EntityType>"
+ + "<ComplexType Name=\"Animal\">"
+ + "</ComplexType><ComplexType Name=\"Human\" BaseType=\"OData.Model.Animal\">"
+ + "<Property Name=\"HumanAddress\" Type=\"Microsoft.Exchange.Services.OData.Model.USAddress\"/>"
+ + "</ComplexType>"
+ + "<ComplexType Name=\"Address\">"
+ + "<NavigationProperty Name=\"City\" Type=\"Microsoft.Exchange.Services.OData.Model.City\"/>"
+ + "</ComplexType>"
+ + "<ComplexType Name=\"USAddress\" BaseType=\"Microsoft.Exchange.Services.OData.Model.Address\">"
+ + "<NavigationProperty Name=\"SubCity\" Type=\"Microsoft.Exchange.Services.OData.Model.City\" />"
+ + "</ComplexType><EntityContainer Name=\"EntityContainer\" "
+ + "m:IsDefaultEntityContainer=\"true\">"
+ + "<EntitySet Name=\"Customers\" EntityType=\"Microsoft.Exchange.Services.OData.Model.Customer\">"
+ + "<NavigationPropertyBinding "
+ + "Path=\"Pet/Microsoft.Exchange.Services.OData.Model.Human/HumanAddress/SubCity\" "
+ + "Target=\"ODataWebExperimental.OData.Model.EntityContainer1/HumanCities\" />"
+ + "</EntitySet>"
+ + "</EntityContainer></Schema><Schema Namespace=\"ODataWebExperimental.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\">"
+ + "<EntityContainer Name=\"EntityContainer1\" p4:LazyLoadingEnabled=\"true\" "
+ + "xmlns:p4=\"http://schemas.microsoft.com/ado/2009/02/edm/annotation\">"
+ + "<EntitySet Name=\"HumanCities\" EntityType=\"Microsoft.Exchange.Services.OData.Model.City\"/>"
+ + "</EntityContainer></Schema></edmx:DataServices></edmx:Edmx>";
+
+ public static final String xmlWithBaseEntityAsBindingTarget =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" m:MaxDataServiceVersion=\"4.0\" "
+ + "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\" Alias=\"Namespace1_Alias\">"
+ + "<EntityType Name=\"ETTwoKeyNav\">"
+ + "<Key><PropertyRef Name=\"PropertyInt16\"/>"
+ + "<PropertyRef Name=\"PropertyString\"/>"
+ + "</Key>"
+ + "<Property Name=\"PropertyInt16\" Type=\"Edm.Int16\" Nullable=\"false\"/>"
+ + "<Property Name=\"PropertyString\" Type=\"Edm.String\" Nullable=\"false\"/>"
+ + "</EntityType>"
+ + "<EntityType Name=\"ETBaseTwoKeyNav\" BaseType=\"Namespace1_Alias.ETTwoKeyNav\">"
+ + "<NavigationProperty Name=\"NavPropertyETTwoBaseTwoKeyNavOne\" "
+ + "Type=\"Namespace1_Alias.ETTwoBaseTwoKeyNav\"/>"
+ + "</EntityType>"
+ + "<EntityType Name=\"ETTwoBaseTwoKeyNav\" BaseType=\"Namespace1_Alias.ETBaseTwoKeyNav\">"
+ + "</EntityType><EntityContainer Name=\"EntityContainer\" m:IsDefaultEntityContainer=\"true\">"
+ + "<EntitySet Name=\"ESTwoKeyNav\" EntityType=\"Namespace1_Alias.ETTwoKeyNav\">"
+ + "<NavigationPropertyBinding Path=\"Namespace1_Alias.ETBaseTwoKeyNav/NavPropertyETTwoBaseTwoKeyNavOne\""
+ + " Target=\"ESBaseTwoKeyNav\"/>"
+ + "</EntitySet>"
+ + "<EntitySet Name=\"ESBaseTwoKeyNav\" EntityType=\"Namespace1_Alias.ETBaseTwoKeyNav\"/>"
+ + "<EntitySet Name=\"ESTwoBaseTwoKeyNav\" EntityType=\"Namespace1_Alias.ETTwoBaseTwoKeyNav\"/>"
+ + "</EntityContainer></Schema></edmx:DataServices></edmx:Edmx>";
+
+ public static final String basicXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" m:MaxDataServiceVersion=\"4.0\" "
+ + "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\" Alias=\"Namespace1_Alias\">"
+ + "<EntityType Name=\"ETTwoKeyNav\">"
+ + "<Key><PropertyRef Name=\"PropertyInt16\"/>"
+ + "<PropertyRef Name=\"PropertyString\"/></Key>"
+ + "<Property Name=\"PropertyInt16\" Type=\"Edm.Int16\" Nullable=\"false\"/>"
+ + "<Property Name=\"PropertyString\" Type=\"Edm.String\" Nullable=\"false\"/>"
+ + "<Property Name=\"CollPropertyCompNav\" Type=\"Collection(Namespace1_Alias.CTNavFiveProp)\"/>"
+ + "</EntityType><ComplexType Name=\"CTNavFiveProp\">"
+ + "<NavigationProperty Name=\"NavPropertyETTwoKeyNavOne\" Type=\"Namespace1_Alias.ETTwoKeyNav\">"
+ + "<ReferentialConstraint Property=\"PropertyInt16\" ReferencedProperty=\"PropertyInt16\"/>"
+ + "</NavigationProperty>"
+ + "</ComplexType><EntityContainer Name=\"EntityContainer\" "
+ + "m:IsDefaultEntityContainer=\"true\"><EntitySet Name=\"ESTwoKeyNav\" "
+ + "EntityType=\"Namespace1_Alias.ETTwoKeyNav\">"
+ + "<NavigationPropertyBinding Path=\"CollPropertyCompNav/NavPropertyETTwoKeyNavOne\" "
+ + "Target=\"ESTwoKeyNav\"/>"
+ + "</EntitySet>"
+ + "</EntityContainer></Schema>"
+ + "</edmx:DataServices></edmx:Edmx>";
+
+ public static final String basicXmlWithSingleton = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" m:MaxDataServiceVersion=\"4.0\" "
+ + "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\" Alias=\"Namespace1_Alias\">"
+ + "<EntityType Name=\"ETTwoKeyNav\">"
+ + "<Key><PropertyRef Name=\"PropertyInt16\"/>"
+ + "<PropertyRef Name=\"PropertyString\"/></Key>"
+ + "<Property Name=\"PropertyInt16\" Type=\"Edm.Int16\" Nullable=\"false\"/>"
+ + "<Property Name=\"PropertyString\" Type=\"Edm.String\" Nullable=\"false\"/>"
+ + "<Property Name=\"CollPropertyCompNav\" Type=\"Collection(Namespace1_Alias.CTNavFiveProp)\"/>"
+ + "<NavigationProperty Name=\"NavPropertySINav\" Type=\"Namespace1_Alias.ETTwoKeyNav\"/>"
+ + "</EntityType><ComplexType Name=\"CTNavFiveProp\">"
+ + "<NavigationProperty Name=\"NavPropertyETTwoKeyNavOne\" Type=\"Namespace1_Alias.ETTwoKeyNav\">"
+ + "<ReferentialConstraint Property=\"PropertyInt16\" ReferencedProperty=\"PropertyInt16\"/>"
+ + "</NavigationProperty>"
+ + "</ComplexType><EntityContainer Name=\"EntityContainer\" "
+ + "m:IsDefaultEntityContainer=\"true\"><EntitySet Name=\"ESTwoKeyNav\" "
+ + "EntityType=\"Namespace1_Alias.ETTwoKeyNav\">"
+ + "<NavigationPropertyBinding Path=\"CollPropertyCompNav/NavPropertyETTwoKeyNavOne\" "
+ + "Target=\"ESTwoKeyNav\"/>"
+ + "<NavigationPropertyBinding Path=\"NavPropertySINav\" Target=\"SINav\"/>"
+ + "</EntitySet><Singleton Name=\"SINav\" EntityType=\"Namespace1_Alias.ETTwoKeyNav\"/>"
+ + "</EntityContainer></Schema>"
+ + "</edmx:DataServices></edmx:Edmx>";
+
+ public static final String xmlWithIncorrectReferentialConstraint1 =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" m:MaxDataServiceVersion=\"4.0\" "
+ + "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\" Alias=\"Namespace1_Alias\">"
+ + "<EntityType Name=\"ETTwoKeyNav\">"
+ + "<Key><PropertyRef Name=\"PropertyInt16\"/>"
+ + "<PropertyRef Name=\"PropertyString\"/></Key>"
+ + "<Property Name=\"PropertyInt16\" Type=\"Edm.Int16\" Nullable=\"false\"/>"
+ + "<Property Name=\"PropertyString\" Type=\"Edm.String\" Nullable=\"false\"/>"
+ + "<Property Name=\"CollPropertyCompNav\" Type=\"Collection(Namespace1_Alias.CTNavFiveProp)\"/>"
+ + "</EntityType><ComplexType Name=\"CTNavFiveProp\">"
+ + "<NavigationProperty Name=\"NavPropertyETTwoKeyNavOne\" Type=\"Namespace1_Alias.ETTwoKeyNav\">"
+ + "<ReferentialConstraint Property=\"PropertyInt1\" ReferencedProperty=\"PropertyInt16\"/>"
+ + "</NavigationProperty>"
+ + "</ComplexType><EntityContainer Name=\"EntityContainer\" "
+ + "m:IsDefaultEntityContainer=\"true\"><EntitySet Name=\"ESTwoKeyNav\" "
+ + "EntityType=\"Namespace1_Alias.ETTwoKeyNav\">"
+ + "<NavigationPropertyBinding Path=\"CollPropertyCompNav/NavPropertyETTwoKeyNavOne\" "
+ + "Target=\"ESTwoKeyNav\"/></EntitySet></EntityContainer></Schema>"
+ + "</edmx:DataServices></edmx:Edmx>";
+
+ public static final String xmlWithIncorrectReferentialConstraint2 =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" m:MaxDataServiceVersion=\"4.0\" "
+ + "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\" Alias=\"Namespace1_Alias\">"
+ + "<EntityType Name=\"ETTwoKeyNav\">"
+ + "<Key><PropertyRef Name=\"PropertyInt16\"/>"
+ + "<PropertyRef Name=\"PropertyString\"/></Key>"
+ + "<Property Name=\"PropertyInt16\" Type=\"Edm.Int16\" Nullable=\"false\"/>"
+ + "<Property Name=\"PropertyString\" Type=\"Edm.String\" Nullable=\"false\"/>"
+ + "<Property Name=\"CollPropertyCompNav\" Type=\"Collection(Namespace1_Alias.CTNavFiveProp)\"/>"
+ + "</EntityType><ComplexType Name=\"CTNavFiveProp\">"
+ + "<NavigationProperty Name=\"NavPropertyETTwoKeyNavOne\" Type=\"Namespace1_Alias.ETTwoKeyNav\">"
+ + "<ReferentialConstraint Property=\"PropertyInt16\" ReferencedProperty=\"PropertyInt1\"/>"
+ + "</NavigationProperty>"
+ + "</ComplexType><EntityContainer Name=\"EntityContainer\" "
+ + "m:IsDefaultEntityContainer=\"true\"><EntitySet Name=\"ESTwoKeyNav\" "
+ + "EntityType=\"Namespace1_Alias.ETTwoKeyNav\">"
+ + "<NavigationPropertyBinding Path=\"CollPropertyCompNav/NavPropertyETTwoKeyNavOne\" "
+ + "Target=\"ESTwoKeyNav\"/></EntitySet></EntityContainer></Schema>"
+ + "</edmx:DataServices></edmx:Edmx>";
+
+ public static final String basicActionImportAndFunctionImport =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" m:MaxDataServiceVersion=\"4.0\" "
+ + "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\" Alias=\"Namespace1_Alias\">"
+ + "<EntityType Name=\"ETTwoKeyNav\"><Key><PropertyRef Name=\"PropertyInt16\"/>"
+ + "<PropertyRef Name=\"PropertyString\"/></Key><Property Name=\"PropertyInt16\" "
+ + "Type=\"Edm.Int16\" Nullable=\"false\"/>"
+ + "<Property Name=\"PropertyString\" Type=\"Edm.String\" Nullable=\"false\"/>"
+ + "</EntityType><Function Name=\"UFCRTETTwoKeyNav\" IsComposable=\"true\">"
+ + "<ReturnType Type=\"Namespace1_Alias.ETTwoKeyNav\" Nullable=\"false\"/>"
+ + "</Function><Action Name=\"UARTCollStringTwoParam\" IsBound=\"false\">"
+ + "<Parameter Name=\"ParameterInt16\" Type=\"Edm.Int16\"/><Parameter Name=\"ParameterDuration\" "
+ + "Type=\"Edm.Duration\"/><ReturnType Type=\"Collection(Edm.String)\"/></Action>"
+ + "<EntityContainer Name=\"EntityContainer\" m:IsDefaultEntityContainer=\"true\">"
+ + "<EntitySet Name=\"ESTwoKeyNav\" EntityType=\"Namespace1_Alias.ETTwoKeyNav\"/>"
+ + "<ActionImport Name=\"AIRTCollStringTwoParam\" "
+ + "Action=\"Namespace1_Alias.UARTCollStringTwoParam\"/><FunctionImport "
+ + "Name=\"FICRTESTwoKeyNav\" Function=\"Namespace1_Alias.UFCRTETTwoKeyNav\" "
+ + "EntitySet=\"Namespace1_Alias.ESTwoKeyNav\" IncludeInServiceDocument=\"true\"/>"
+ + "</EntityContainer></Schema></edmx:DataServices></edmx:Edmx>";
+
+ public static final String xmlWithNavPropInBaseType=
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" m:MaxDataServiceVersion=\"4.0\" "
+ + "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\" Alias=\"Namespace1_Alias\">"
+ + "<EntityType Name=\"ETKeyNav\"><Key><PropertyRef Name=\"PropertyInt16\"/>"
+ + "</Key><Property Name=\"PropertyInt16\" Type=\"Edm.Int16\" Nullable=\"false\"/>"
+ + "<NavigationProperty Name=\"NavPropertyETKeyNavMany\" Type=\"Collection(Namespace1_Alias.ETKeyNav)\"/>"
+ + "</EntityType><EntityType Name=\"ETTwoKeyNav\" BaseType=\"Namespace1_Alias.ETKeyNav\">"
+ + "</EntityType><EntityType Name=\"ETBaseTwoKeyNav\" BaseType=\"Namespace1_Alias.ETTwoKeyNav\">"
+ + "</EntityType><EntityContainer Name=\"EntityContainer\" m:IsDefaultEntityContainer=\"true\">"
+ + "<EntitySet Name=\"ESTwoKeyNav\" EntityType=\"Namespace1_Alias.ETTwoKeyNav\"/>"
+ + "<EntitySet Name=\"ESBaseTwoKeyNav\" EntityType=\"Namespace1_Alias.ETBaseTwoKeyNav\">"
+ + "<NavigationPropertyBinding Path=\"NavPropertyETKeyNavMany\" Target=\"ESKeyNav\"/>"
+ + "</EntitySet>"
+ + "<EntitySet Name=\"ESKeyNav\" EntityType=\"Namespace1_Alias.ETKeyNav\"/>"
+ + "</EntityContainer></Schema></edmx:DataServices></edmx:Edmx>";
+
+ public static final String xmlWithActionsAndFunctionsHavingReturnedEntitiesInDiffNamespace =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" "
+ + "m:MaxDataServiceVersion=\"4.0\" xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\" Alias=\"Namespace1_Alias\">"
+ + "<Action Name=\"UAETTwoKeyNavRTETTwoKeyNavParam\" IsBound=\"false\">"
+ + "<Parameter Name=\"ParameterInt16\" Type=\"Edm.Int16\" Nullable=\"false\"/>"
+ + "<ReturnType Type=\"Namespace2_Alias.ODataWebExperimentalETKeyNav\"/>"
+ + "</Action><Function Name=\"UFCRTETTwoKeyNav\" IsComposable=\"true\" "
+ + "IsBound=\"false\"><ReturnType Type=\"Namespace2_Alias.ODataWebExperimentalETKeyNav\" "
+ + "Nullable=\"false\"/></Function><EntityContainer Name=\"EntityContainer\" "
+ + "m:IsDefaultEntityContainer=\"true\"><ActionImport "
+ + "Name=\"AIRTETTwoKeyNavRTETTwoKeyNavParam\" "
+ + "Action=\"Namespace1_Alias.UAETTwoKeyNavRTETTwoKeyNavParam\" "
+ + "EntitySet=\"Namespace2_Alias.EntityContainer1/ODataWebExperimentalETKeyNavSet\"/>"
+ + "<FunctionImport Name=\"FICRTESTwoKeyNav\" "
+ + "Function=\"Namespace1_Alias.UFCRTETTwoKeyNav\" "
+ + "EntitySet=\"Namespace2_Alias.EntityContainer1/ODataWebExperimentalETKeyNavSet\" "
+ + "IncludeInServiceDocument=\"true\"/></EntityContainer></Schema>"
+ + "<Schema Namespace=\"ODataWebExperimental.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\" Alias=\"Namespace2_Alias\">"
+ + "<EntityType Name=\"ODataWebExperimentalETKeyNav\"><Key>"
+ + "<PropertyRef Name=\"PropertyInt16\"/></Key>"
+ + "<Property Name=\"PropertyInt16\" Type=\"Edm.Int16\" Nullable=\"false\"/>"
+ + "</EntityType><EntityContainer Name=\"EntityContainer1\" "
+ + "p4:LazyLoadingEnabled=\"true\" "
+ + "xmlns:p4=\"http://schemas.microsoft.com/ado/2009/02/edm/annotation\">"
+ + "<EntitySet Name=\"ODataWebExperimentalETKeyNavSet\" "
+ + "EntityType=\"Namespace2_Alias.ODataWebExperimentalETKeyNav\"/>"
+ + "</EntityContainer></Schema></edmx:DataServices></edmx:Edmx>";
+
+ public static final String invalidFunction =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" "
+ + "m:MaxDataServiceVersion=\"4.0\" xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\" Alias=\"Namespace1_Alias\">"
+ + "<Function Name=\"UFCRTETTwoKeyNavABC\" IsComposable=\"true\" "
+ + "IsBound=\"false\"><ReturnType Type=\"Namespace2_Alias.ODataWebExperimentalETKeyNav\" "
+ + "Nullable=\"false\"/></Function><EntityContainer Name=\"EntityContainer\" "
+ + "m:IsDefaultEntityContainer=\"true\">"
+ + "<FunctionImport Name=\"FICRTESTwoKeyNav\" "
+ + "Function=\"Namespace1_Alias.UFCRTETTwoKeyNav\" "
+ + "EntitySet=\"Namespace2_Alias.EntityContainer1/ODataWebExperimentalETKeyNavSet\" "
+ + "IncludeInServiceDocument=\"true\"/></EntityContainer></Schema>"
+ + "<Schema Namespace=\"ODataWebExperimental.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\" Alias=\"Namespace2_Alias\">"
+ + "<EntityType Name=\"ODataWebExperimentalETKeyNav\"><Key>"
+ + "<PropertyRef Name=\"PropertyInt16\"/></Key>"
+ + "<Property Name=\"PropertyInt16\" Type=\"Edm.Int16\" Nullable=\"false\"/>"
+ + "</EntityType><EntityContainer Name=\"EntityContainer1\" "
+ + "p4:LazyLoadingEnabled=\"true\" "
+ + "xmlns:p4=\"http://schemas.microsoft.com/ado/2009/02/edm/annotation\">"
+ + "<EntitySet Name=\"ODataWebExperimentalETKeyNavSet\" "
+ + "EntityType=\"Namespace2_Alias.ODataWebExperimentalETKeyNav\"/>"
+ + "</EntityContainer></Schema></edmx:DataServices></edmx:Edmx>";
+
+ public static final String invalidAction =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"
+ + "<edmx:DataServices m:DataServiceVersion=\"4.0\" "
+ + "m:MaxDataServiceVersion=\"4.0\" xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\">"
+ + "<Schema Namespace=\"Microsoft.Exchange.Services.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\" Alias=\"Namespace1_Alias\">"
+ + "<Action Name=\"UAETTwoKeyNavRTETTwoKeyNavParamABC\" IsBound=\"false\">"
+ + "<Parameter Name=\"ParameterInt16\" Type=\"Edm.Int16\" Nullable=\"false\"/>"
+ + "<ReturnType Type=\"Namespace2_Alias.ODataWebExperimentalETKeyNav\"/>"
+ + "</Action>"
+ + "<EntityContainer Name=\"EntityContainer\" "
+ + "m:IsDefaultEntityContainer=\"true\"><ActionImport "
+ + "Name=\"AIRTETTwoKeyNavRTETTwoKeyNavParam\" "
+ + "Action=\"Namespace1_Alias.UAETTwoKeyNavRTETTwoKeyNavParam\" "
+ + "EntitySet=\"Namespace2_Alias.EntityContainer1/ODataWebExperimentalETKeyNavSet\"/>"
+ + "</EntityContainer></Schema>"
+ + "<Schema Namespace=\"ODataWebExperimental.OData.Model\" "
+ + "xmlns=\"http://docs.oasis-open.org/odata/ns/edm\" Alias=\"Namespace2_Alias\">"
+ + "<EntityType Name=\"ODataWebExperimentalETKeyNav\"><Key>"
+ + "<PropertyRef Name=\"PropertyInt16\"/></Key>"
+ + "<Property Name=\"PropertyInt16\" Type=\"Edm.Int16\" Nullable=\"false\"/>"
+ + "</EntityType><EntityContainer Name=\"EntityContainer1\" "
+ + "p4:LazyLoadingEnabled=\"true\" "
+ + "xmlns:p4=\"http://schemas.microsoft.com/ado/2009/02/edm/annotation\">"
+ + "<EntitySet Name=\"ODataWebExperimentalETKeyNavSet\" "
+ + "EntityType=\"Namespace2_Alias.ODataWebExperimentalETKeyNav\"/>"
+ + "</EntityContainer></Schema></edmx:DataServices></edmx:Edmx>";
+
+ @Test
+ public void testXMLMetadataWithOneSchema() {
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(getClass().getResourceAsStream("metadata.xml"));
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ }
+
+ @Test
+ public void testXMLMetadataWithTwoSchemas() {
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(getClass().getResourceAsStream("northwind-metadata.xml"));
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ }
+
+ @Test
+ public void testXMLMetadataWithTripInService() {
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(getClass().getResourceAsStream("metadata_TripInService.xml"));
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ }
+
+ @Test
+ public void testXMLMetadataWithDiffNavBindingPath() {
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(getClass().getResourceAsStream("metadata_1.xml"));
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ }
+
+ @Test
+ public void testXMLMetadataWithDiffNavBindingTarget() {
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(getClass().getResourceAsStream("metadata_2.xml"));
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ }
+
+ @Test
+ public void testXMLMetadataWithAliasNamespaceMapping() {
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(getClass().getResourceAsStream("metadata_3.xml"));
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ }
+
+ @Test
+ public void testEdmWithOneSchema() {
+ final Edm edm = client.getReader().readMetadata(getClass().getResourceAsStream("metadata.xml"));
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ }
+
+ @Test
+ public void testEdmWithWithTripInService() {
+ final Edm edm = client.getReader().readMetadata(getClass().
+ getResourceAsStream("metadata_TripInService.xml"));
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ }
+
+ @Test
+ public void testEdmWithDiffNavBindingPath() {
+ final Edm edm = client.getReader().readMetadata(getClass().
+ getResourceAsStream("metadata_1.xml"));
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ }
+
+ @Test
+ public void testEdmWithDiffNavBindingTarget() {
+ final Edm edm = client.getReader().readMetadata(getClass().
+ getResourceAsStream("metadata_2.xml"));
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ }
+
+ @Test
+ public void testEdmWithAliasNamespaceMapping() {
+ final Edm edm = client.getReader().readMetadata(getClass().
+ getResourceAsStream("metadata_3.xml"));
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ }
+
+ @Test
+ public void testEdmWithTwoSchema() {
+ final Edm edm = client.getReader().readMetadata(getClass().
+ getResourceAsStream("northwind-metadata.xml"));
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ }
+
+ @Test
+ public void testWrongEdm1() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(wrongBindingTarget.getBytes("UTF-8"));
+ final Edm edm = client.getReader().readMetadata(stream);
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Navigation Property Type "
+ + "Microsoft.Exchange.Services.OData.Model.EmailMessage "
+ + "does not match "
+ + "the binding target type Microsoft.Exchange.Services.OData.Model.Folder");
+ }
+ }
+
+ @Test
+ public void testInvalidFunction() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(invalidFunction.getBytes("UTF-8"));
+ final Edm edm = client.getReader().readMetadata(stream);
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Invalid Function Namespace1_Alias.UFCRTETTwoKeyNav");
+ }
+ }
+
+ @Test
+ public void testInvalidFunctionInXMLMetadata1() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(invalidFunction.getBytes("UTF-8"));
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(stream);
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Invalid Function Namespace1_Alias.UFCRTETTwoKeyNav");
+ }
+ }
+
+ @Test
+ public void testInvalidActionInXMLMetadata1() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(invalidAction.getBytes("UTF-8"));
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(stream);
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Invalid Action Namespace1_Alias.UAETTwoKeyNavRTETTwoKeyNavParam");
+ }
+ }
+
+ @Test
+ public void testWrongXMLMetadata1() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(wrongBindingTarget.getBytes("UTF-8"));
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(stream);
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Navigation Property Type "
+ + "Microsoft.Exchange.Services.OData.Model.EmailMessage "
+ + "does not match "
+ + "the binding target type Microsoft.Exchange.Services.OData.Model.Folder");
+ }
+ }
+
+ @Test
+ public void testWrongEdm2() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(xmlWithNonKeyEntity.getBytes("UTF-8"));
+ final Edm edm = client.getReader().readMetadata(stream);
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Missing key for EntityType Entity");
+ }
+ }
+
+ @Test
+ public void testWrongEdm3() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithWrongNamespaceInBindingPath.getBytes("UTF-8"));
+ final Edm edm = client.getReader().readMetadata(stream);
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "The fully Qualified type OData.Model.Human mentioned "
+ + "in navigation binding path not found ");
+ }
+ }
+
+ @Test
+ public void testWrongEdm4() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithWrongComplexBaseType.getBytes("UTF-8"));
+ final Edm edm = client.getReader().readMetadata(stream);
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (EdmException e) {
+ assertEquals(e.getMessage(), "Can't find base type"
+ + " with name: OData.Model.Animal for complex type: Human");
+ }
+ }
+
+ @Test
+ public void testWrongEdm5() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithNonKeyEntity1.getBytes("UTF-8"));
+ final Edm edm = client.getReader().readMetadata(stream);
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Missing key for EntityType User");
+ }
+ }
+
+ @Test
+ public void testWrongEdm6() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithIncorrectReferentialConstraint1.getBytes("UTF-8"));
+ final Edm edm = client.getReader().readMetadata(stream);
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Property name PropertyInt1 not part of the source entity.");
+ }
+ }
+
+ @Test
+ public void testWrongEdm7() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithIncorrectReferentialConstraint2.getBytes("UTF-8"));
+ final Edm edm = client.getReader().readMetadata(stream);
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Property name PropertyInt1 not part of the target entity.");
+ }
+ }
+
+ @Test
+ public void testEdmWithBaseEntityAsBindingTarget() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithBaseEntityAsBindingTarget.getBytes("UTF-8"));
+ final Edm edm = client.getReader().readMetadata(stream);
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ }
+ }
+
+ @Test
+ public void testEdmWithBasicXML() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ basicXml.getBytes("UTF-8"));
+ final Edm edm = client.getReader().readMetadata(stream);
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ }
+ }
+
+ @Test
+ public void testEdmWithActionAndFunctionImportXML() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ basicActionImportAndFunctionImport.getBytes("UTF-8"));
+ final Edm edm = client.getReader().readMetadata(stream);
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ }
+ }
+
+ @Test
+ public void testEdmWithNavPropInBaseType() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithNavPropInBaseType.getBytes("UTF-8"));
+ final Edm edm = client.getReader().readMetadata(stream);
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ }
+ }
+
+ @Test
+ public void testEdmWithtestEdmWithActionAndFunctionImport()
+ throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithActionsAndFunctionsHavingReturnedEntitiesInDiffNamespace.getBytes("UTF-8"));
+ final Edm edm = client.getReader().readMetadata(stream);
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ }
+ }
+
+ @Test
+ public void testWrongXMLMetadata2() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(xmlWithNonKeyEntity.getBytes("UTF-8"));
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(stream);
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Missing key for EntityType Entity");
+ }
+ }
+
+ @Test
+ public void testWrongXMLMetadata3() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithWrongNamespaceInBindingTarget.getBytes("UTF-8"));
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(stream);
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Container with FullyQualifiedName "
+ + "Model.EntityContainer1 not found.");
+ }
+ }
+
+ @Test
+ public void testWrongXMLMetadata4() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithWrongNamespaceInBindingPath.getBytes("UTF-8"));
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(stream);
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "The fully Qualified type OData."
+ + "Model.Human mentioned in navigation binding path not found ");
+ }
+ }
+
+ @Test
+ public void testWrongXMLMetadata5() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithInvalidEntityTypeNamespace.getBytes("UTF-8"));
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(stream);
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Invalid Entity Type OData.Model.Customer");
+ }
+ }
+
+ @Test
+ public void testWrongXMLMetadata6() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithWrongComplexBaseType.getBytes("UTF-8"));
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(stream);
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Invalid Complex BaseType OData.Model.Animal");
+ }
+ }
+
+ @Test
+ public void testWrongXMLMetadata7() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithNonKeyEntity1.getBytes("UTF-8"));
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(stream);
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Missing key for EntityType User");
+ }
+ }
+
+ @Test
+ public void testWrongXMLMetadata8() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithWrongBindingTarget.getBytes("UTF-8"));
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(stream);
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Navigation Property Target HumanCities is not part "
+ + "of the same container Microsoft.Exchange.Services.OData.Model.EntityContainer");
+ }
+ }
+
+ @Test
+ public void testXMLMetadataBaseEntityAsBindingTaget() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithBaseEntityAsBindingTarget.getBytes("UTF-8"));
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(stream);
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ }
+ }
+
+ @Test
+ public void testBasicXMLMetadata10() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ basicXml.getBytes("UTF-8"));
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(stream);
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ }
+ }
+
+ @Test
+ public void testWrongXMLMetadata11() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithWrongBindingTarget1.getBytes("UTF-8"));
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(stream);
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Target Entity Set mentioned in navigationBindingProperty "
+ + "not found in the container EntityContainer1");
+ }
+ }
+
+ @Test
+ public void testWrongXMLMetadata12() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithIncorrectReferentialConstraint1.getBytes("UTF-8"));
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(stream);
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Property name PropertyInt1 not part of the source entity.");
+ }
+ }
+
+ @Test
+ public void testWrongXMLMetadata13() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithIncorrectReferentialConstraint2.getBytes("UTF-8"));
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(stream);
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Property name PropertyInt1 not part of the target entity.");
+ }
+ }
+
+ @Test
+ public void XMLMetadataActionImportAndFunctionImport() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ basicActionImportAndFunctionImport.getBytes("UTF-8"));
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(stream);
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ }
+ }
+
+ @Test
+ public void XMLMetadataWithNavigationPropertyInBaseType() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ xmlWithNavPropInBaseType.getBytes("UTF-8"));
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(stream);
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ }
+ }
+
+ @Test
+ public void testEdmWithSingleton()
+ throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ basicXmlWithSingleton.getBytes("UTF-8"));
+ final Edm edm = client.getReader().readMetadata(stream);
+ assertNotNull(edm);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(edm);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Validations of Singletons are not supported: SINav");
+ }
+ }
+
+ @Test
+ public void XMLMetadataWithSingleton() throws UnsupportedEncodingException {
+ try {
+ InputStream stream = new ByteArrayInputStream(
+ basicXmlWithSingleton.getBytes("UTF-8"));
+ final XMLMetadata metadata = client.getDeserializer(ContentType.APPLICATION_XML).
+ toMetadata(stream);
+ assertNotNull(metadata);
+ ODataMetadataValidation metadataValidator = client.metadataValidation();
+ metadataValidator.validateMetadata(metadata);
+ } catch (UnsupportedEncodingException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Validations of Singletons are not supported: SINav");
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/48263a8c/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_1.xml
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_1.xml b/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_1.xml
new file mode 100644
index 0000000..af7cec1
--- /dev/null
+++ b/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_1.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
+ <edmx:DataServices m:DataServiceVersion="4.0" m:MaxDataServiceVersion="4.0" xmlns:m="http://docs.oasis-open.org/odata/ns/metadata">
+ <Schema Namespace="Microsoft.Exchange.Services.OData.Model" xmlns="http://docs.oasis-open.org/odata/ns/edm">
+ <EntityType Name="Customer" Abstract="true">
+ <Key>
+ <PropertyRef Name="CustomerId" />
+ </Key>
+ <Property Name="CustomerId" Type="Edm.String" Nullable="false"/>
+ <Property Name="CustomerName" Type="Edm.String" />
+ <Property Name="Pet" Type="Microsoft.Exchange.Services.OData.Model.Animal" />
+ </EntityType>
+ <EntityType Name="VipCustomer" BaseType="Microsoft.Exchange.Services.OData.Model.Customer" Abstract="true">
+ <Property Name="CustomerType" Type="Edm.String" />
+ <Property Name="VipLocations" Type="Collection(Microsoft.Exchange.Services.OData.Model.Address)" />
+ </EntityType>
+ <EntityType Name="City">
+ <Key>
+ <PropertyRef Name="Id" />
+ </Key>
+ <Property Name="Id" Type="Edm.String" Nullable="false"/>
+ </EntityType>
+ <ComplexType Name="Animal">
+ </ComplexType>
+ <ComplexType Name="Human" BaseType="Microsoft.Exchange.Services.OData.Model.Animal">
+ <Property Name="HumanAddress" Type="Microsoft.Exchange.Services.OData.Model.USAddress" />
+ </ComplexType>
+ <ComplexType Name="Horse" BaseType="Microsoft.Exchange.Services.OData.Model.Animal">
+ <Property Name="HorseAddress" Type="Microsoft.Exchange.Services.OData.Model.USAddress" />
+ <Property Name="HorseAddresses" Type="Collection(Microsoft.Exchange.Services.OData.Model.USAddress)" />
+ </ComplexType>
+ <ComplexType Name="Address">
+ <NavigationProperty Name="City" Type="Microsoft.Exchange.Services.OData.Model.City" />
+ </ComplexType>
+ <ComplexType Name="USAddress" BaseType="Microsoft.Exchange.Services.OData.Model.Address">
+ <Property Name="CountryAddress" Type="Microsoft.Exchange.Services.OData.Model.CountryAddress" />
+ <NavigationProperty Name="SubCity" Type="Microsoft.Exchange.Services.OData.Model.City" />
+ </ComplexType>
+ <ComplexType Name="CountryAddress" BaseType="Microsoft.Exchange.Services.OData.Model.Address">
+ <NavigationProperty Name="SubCity" Type="Microsoft.Exchange.Services.OData.Model.City" />
+ </ComplexType>
+ <EntityContainer Name="EntityContainer" m:IsDefaultEntityContainer="true">
+ <EntitySet Name="Customers" EntityType="Microsoft.Exchange.Services.OData.Model.Customer">
+ <NavigationPropertyBinding Path="Pet/Microsoft.Exchange.Services.OData.Model.Human/HumanAddress/SubCity" Target="HumanCities" />
+ <NavigationPropertyBinding Path="Pet/Microsoft.Exchange.Services.OData.Model.Horse/HorseAddress/SubCity" Target="HorseCities" />
+ <NavigationPropertyBinding Path="Pet/Microsoft.Exchange.Services.OData.Model.Horse/HorseAddresses/SubCity" Target="HorseCities" />
+ <NavigationPropertyBinding Path="Microsoft.Exchange.Services.OData.Model.VipCustomer/VipLocations/Microsoft.Exchange.Services.OData.Model.USAddress/SubCity" Target="HumanCities" />
+ <NavigationPropertyBinding Path="Microsoft.Exchange.Services.OData.Model.VipCustomer/VipLocations/Microsoft.Exchange.Services.OData.Model.USAddress/CountryAddress/SubCity" Target="HumanCities" />
+ <NavigationPropertyBinding Path="Microsoft.Exchange.Services.OData.Model.VipCustomer/VipLocations/City" Target="HumanCities" />
+ </EntitySet>
+ <EntitySet Name="HumanCities" EntityType="Microsoft.Exchange.Services.OData.Model.City"/>
+ <EntitySet Name="HorseCities" EntityType="Microsoft.Exchange.Services.OData.Model.City"/>
+ </EntityContainer>
+ </Schema>
+ </edmx:DataServices>
+</edmx:Edmx>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/48263a8c/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_2.xml
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_2.xml b/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_2.xml
new file mode 100644
index 0000000..c8a6ff5
--- /dev/null
+++ b/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_2.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
+ <edmx:DataServices m:DataServiceVersion="4.0" m:MaxDataServiceVersion="4.0" xmlns:m="http://docs.oasis-open.org/odata/ns/metadata">
+ <Schema Namespace="Microsoft.Exchange.Services.OData.Model" xmlns="http://docs.oasis-open.org/odata/ns/edm" Alias="Namespace1_Alias">
+ <EntityType Name="Customer" Abstract="true">
+ <Key>
+ <PropertyRef Name="CustomerId" />
+ </Key>
+ <Property Name="CustomerId" Type="Edm.String" Nullable="false"/>
+ <Property Name="CustomerName" Type="Edm.String" />
+ <Property Name="Pet" Type="Microsoft.Exchange.Services.OData.Model.Animal" />
+ </EntityType>
+ <EntityType Name="VipCustomer" BaseType="Microsoft.Exchange.Services.OData.Model.Customer" Abstract="true">
+ <Property Name="CustomerType" Type="Edm.String" />
+ <Property Name="VipLocations" Type="Collection(Microsoft.Exchange.Services.OData.Model.Address)" />
+ </EntityType>
+ <EntityType Name="City">
+ <Key>
+ <PropertyRef Name="Id" />
+ </Key>
+ <Property Name="Id" Type="Edm.String" Nullable="false"/>
+ </EntityType>
+ <ComplexType Name="Animal">
+ </ComplexType>
+ <ComplexType Name="Human" BaseType="Microsoft.Exchange.Services.OData.Model.Animal">
+ <Property Name="HumanAddress" Type="Microsoft.Exchange.Services.OData.Model.USAddress" />
+ </ComplexType>
+ <ComplexType Name="Horse" BaseType="Microsoft.Exchange.Services.OData.Model.Animal">
+ <Property Name="HorseAddress" Type="Microsoft.Exchange.Services.OData.Model.USAddress" />
+ <Property Name="HorseAddresses" Type="Collection(Microsoft.Exchange.Services.OData.Model.USAddress)" />
+ </ComplexType>
+ <ComplexType Name="Address">
+ <NavigationProperty Name="City" Type="Microsoft.Exchange.Services.OData.Model.City" />
+ </ComplexType>
+ <ComplexType Name="USAddress" BaseType="Microsoft.Exchange.Services.OData.Model.Address">
+ <Property Name="CountryAddress" Type="Microsoft.Exchange.Services.OData.Model.CountryAddress" />
+ <NavigationProperty Name="SubCity" Type="Microsoft.Exchange.Services.OData.Model.City" />
+ </ComplexType>
+ <ComplexType Name="CountryAddress" BaseType="Microsoft.Exchange.Services.OData.Model.Address">
+ <NavigationProperty Name="SubCity" Type="Microsoft.Exchange.Services.OData.Model.City" />
+ </ComplexType>
+ <EntityContainer Name="EntityContainer" m:IsDefaultEntityContainer="true">
+ <EntitySet Name="Customers" EntityType="Microsoft.Exchange.Services.OData.Model.Customer">
+ <NavigationPropertyBinding Path="Pet/Microsoft.Exchange.Services.OData.Model.Human/HumanAddress/SubCity" Target="ODataWebExperimental.OData.Model.EntityContainer1/HumanCities" />
+ <NavigationPropertyBinding Path="Pet/Microsoft.Exchange.Services.OData.Model.Horse/HorseAddress/SubCity" Target="HorseCities" />
+ <NavigationPropertyBinding Path="Pet/Microsoft.Exchange.Services.OData.Model.Horse/HorseAddresses/SubCity" Target="HorseCities" />
+ <NavigationPropertyBinding Path="Microsoft.Exchange.Services.OData.Model.VipCustomer/VipLocations/Microsoft.Exchange.Services.OData.Model.USAddress/SubCity" Target="ODataWebExperimental.OData.Model.EntityContainer1/HumanCities" />
+ <NavigationPropertyBinding Path="Microsoft.Exchange.Services.OData.Model.VipCustomer/VipLocations/Microsoft.Exchange.Services.OData.Model.USAddress/CountryAddress/SubCity" Target="ODataWebExperimental.OData.Model.EntityContainer1/HumanCities" />
+ <NavigationPropertyBinding Path="Microsoft.Exchange.Services.OData.Model.VipCustomer/VipLocations/City" Target="ODataWebExperimental.OData.Model.EntityContainer1/HumanCities" />
+ </EntitySet>
+ <EntitySet Name="HorseCities" EntityType="Microsoft.Exchange.Services.OData.Model.City"/>
+ </EntityContainer>
+ </Schema>
+ <Schema Namespace="ODataWebExperimental.OData.Model" xmlns="http://docs.oasis-open.org/odata/ns/edm">
+ <EntityContainer Name="EntityContainer1" p4:LazyLoadingEnabled="true" xmlns:p4="http://schemas.microsoft.com/ado/2009/02/edm/annotation">
+ <EntitySet Name="HumanCities" EntityType="Microsoft.Exchange.Services.OData.Model.City"/>
+ <EntitySet Name="Customers" EntityType="Microsoft.Exchange.Services.OData.Model.Customer">
+ <NavigationPropertyBinding Path="Pet/Microsoft.Exchange.Services.OData.Model.Human/HumanAddress/SubCity" Target="HumanCities" />
+ <NavigationPropertyBinding Path="Pet/Microsoft.Exchange.Services.OData.Model.Horse/HorseAddress/SubCity" Target="Namespace1_Alias.EntityContainer/HorseCities" />
+ <NavigationPropertyBinding Path="Pet/Microsoft.Exchange.Services.OData.Model.Horse/HorseAddresses/SubCity" Target="Microsoft.Exchange.Services.OData.Model.EntityContainer/HorseCities" />
+ <NavigationPropertyBinding Path="Microsoft.Exchange.Services.OData.Model.VipCustomer/VipLocations/Microsoft.Exchange.Services.OData.Model.USAddress/SubCity" Target="HumanCities" />
+ <NavigationPropertyBinding Path="Microsoft.Exchange.Services.OData.Model.VipCustomer/VipLocations/Microsoft.Exchange.Services.OData.Model.USAddress/CountryAddress/SubCity" Target="HumanCities" />
+ <NavigationPropertyBinding Path="Microsoft.Exchange.Services.OData.Model.VipCustomer/VipLocations/City" Target="HumanCities" />
+ </EntitySet>
+ </EntityContainer>
+ </Schema>
+ </edmx:DataServices>
+</edmx:Edmx>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/48263a8c/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_3.xml
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_3.xml b/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_3.xml
new file mode 100644
index 0000000..6a6275b
--- /dev/null
+++ b/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_3.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
+ <edmx:DataServices m:DataServiceVersion="4.0" m:MaxDataServiceVersion="4.0" xmlns:m="http://docs.oasis-open.org/odata/ns/metadata">
+ <Schema Namespace="Microsoft.Exchange.Services.OData.Model" Alias="Namespace1_Alias" xmlns="http://docs.oasis-open.org/odata/ns/edm">
+ <EntityType Name="Customer" Abstract="true">
+ <Key>
+ <PropertyRef Name="CustomerId" />
+ </Key>
+ <Property Name="CustomerId" Type="Edm.String" Nullable="false"/>
+ <Property Name="CustomerName" Type="Edm.String" />
+ <Property Name="Pet" Type="Microsoft.Exchange.Services.OData.Model.Animal" />
+ </EntityType>
+ <EntityType Name="VipCustomer" BaseType="Namespace1_Alias.Customer" Abstract="true">
+ <Property Name="CustomerType" Type="Edm.String" />
+ <Property Name="VipLocations" Type="Collection(Namespace1_Alias.Address)" />
+ </EntityType>
+ <EntityType Name="City">
+ <Key>
+ <PropertyRef Name="Id" />
+ </Key>
+ <Property Name="Id" Type="Edm.String" Nullable="false"/>
+ </EntityType>
+ <ComplexType Name="Animal">
+ </ComplexType>
+ <ComplexType Name="Human" BaseType="Namespace1_Alias.Animal">
+ <Property Name="HumanAddress" Type="Microsoft.Exchange.Services.OData.Model.USAddress" />
+ </ComplexType>
+ <ComplexType Name="Horse" BaseType="Microsoft.Exchange.Services.OData.Model.Animal">
+ <Property Name="HorseAddress" Type="Namespace1_Alias.USAddress" />
+ <Property Name="HorseAddresses" Type="Collection(Microsoft.Exchange.Services.OData.Model.USAddress)" />
+ </ComplexType>
+ <ComplexType Name="Address">
+ <NavigationProperty Name="City" Type="Microsoft.Exchange.Services.OData.Model.City" />
+ </ComplexType>
+ <ComplexType Name="USAddress" BaseType="Microsoft.Exchange.Services.OData.Model.Address">
+ <Property Name="CountryAddress" Type="Microsoft.Exchange.Services.OData.Model.CountryAddress" />
+ <NavigationProperty Name="SubCity" Type="Microsoft.Exchange.Services.OData.Model.City" />
+ </ComplexType>
+ <ComplexType Name="CountryAddress" BaseType="Microsoft.Exchange.Services.OData.Model.Address">
+ <NavigationProperty Name="SubCity" Type="Microsoft.Exchange.Services.OData.Model.City" />
+ </ComplexType>
+ <EntityContainer Name="EntityContainer" m:IsDefaultEntityContainer="true">
+ <EntitySet Name="Customers" EntityType="Namespace1_Alias.Customer">
+ <NavigationPropertyBinding Path="Pet/Namespace1_Alias.Human/HumanAddress/SubCity" Target="ODataWebExperimental.OData.Model.EntityContainer1/HumanCities" />
+ <NavigationPropertyBinding Path="Pet/Microsoft.Exchange.Services.OData.Model.Horse/HorseAddress/SubCity" Target="HorseCities" />
+ <NavigationPropertyBinding Path="Pet/Microsoft.Exchange.Services.OData.Model.Horse/HorseAddresses/SubCity" Target="HorseCities" />
+ <NavigationPropertyBinding Path="Microsoft.Exchange.Services.OData.Model.VipCustomer/VipLocations/Microsoft.Exchange.Services.OData.Model.USAddress/SubCity" Target="ODataWebExperimental.OData.Model.EntityContainer1/HumanCities" />
+ <NavigationPropertyBinding Path="Namespace1_Alias.VipCustomer/VipLocations/Microsoft.Exchange.Services.OData.Model.USAddress/CountryAddress/SubCity" Target="ODataWebExperimental.OData.Model.EntityContainer1/HumanCities" />
+ <NavigationPropertyBinding Path="Microsoft.Exchange.Services.OData.Model.VipCustomer/VipLocations/City" Target="ODataWebExperimental.OData.Model.EntityContainer1/HumanCities" />
+ </EntitySet>
+ <EntitySet Name="HorseCities" EntityType="Microsoft.Exchange.Services.OData.Model.City"/>
+ </EntityContainer>
+ </Schema>
+ <Schema Namespace="ODataWebExperimental.OData.Model" xmlns="http://docs.oasis-open.org/odata/ns/edm" Alias="Namespace2_Alias">
+ <EntityContainer Name="EntityContainer1" p4:LazyLoadingEnabled="true" xmlns:p4="http://schemas.microsoft.com/ado/2009/02/edm/annotation">
+ <EntitySet Name="HumanCities" EntityType="Namespace1_Alias.City"/>
+ <EntitySet Name="Customers" EntityType="Microsoft.Exchange.Services.OData.Model.Customer">
+ <NavigationPropertyBinding Path="Pet/Microsoft.Exchange.Services.OData.Model.Human/HumanAddress/SubCity" Target="HumanCities" />
+ <NavigationPropertyBinding Path="Pet/Microsoft.Exchange.Services.OData.Model.Horse/HorseAddress/SubCity" Target="Namespace1_Alias.EntityContainer/HorseCities" />
+ <NavigationPropertyBinding Path="Pet/Microsoft.Exchange.Services.OData.Model.Horse/HorseAddresses/SubCity" Target="Microsoft.Exchange.Services.OData.Model.EntityContainer/HorseCities" />
+ <NavigationPropertyBinding Path="Microsoft.Exchange.Services.OData.Model.VipCustomer/VipLocations/Microsoft.Exchange.Services.OData.Model.USAddress/SubCity" Target="HumanCities" />
+ <NavigationPropertyBinding Path="Microsoft.Exchange.Services.OData.Model.VipCustomer/VipLocations/Microsoft.Exchange.Services.OData.Model.USAddress/CountryAddress/SubCity" Target="HumanCities" />
+ <NavigationPropertyBinding Path="Microsoft.Exchange.Services.OData.Model.VipCustomer/VipLocations/City" Target="HumanCities" />
+ </EntitySet>
+ </EntityContainer>
+ </Schema>
+ </edmx:DataServices>
+</edmx:Edmx>
\ No newline at end of file