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

[11/15] git commit: [OLINGO-264] More client-side tests

[OLINGO-264] More client-side tests


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

Branch: refs/heads/master
Commit: 3b3660025e02a499cba0c8fc528e97e56d0d00ef
Parents: 726fbe5
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon May 5 12:22:23 2014 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon May 5 12:22:23 2014 +0200

----------------------------------------------------------------------
 .../org/apache/olingo/fit/V4Vocabularies.java   |  75 +++++
 .../resources/V40/Org.OData.Capabilities.V1.xml | 326 +++++++++++++++++++
 .../main/resources/V40/Org.OData.Core.V1.xml    | 125 +++++++
 .../resources/V40/Org.OData.Measures.V1.xml     |  48 +++
 .../main/resources/V40/northwind-metadata.xml   |   2 +-
 .../resources/V40/vocabularies-metadata.xml     |  37 +++
 .../main/webapp/WEB-INF/applicationContext.xml  |   1 +
 .../olingo/fit/AbstractMetadataTestITCase.java  |  35 --
 .../olingo/fit/v3/MetadataTestITCase.java       |  12 +-
 .../olingo/fit/v4/AbstractTestITCase.java       |   8 +-
 .../olingo/fit/v4/MetadataTestITCase.java       |  82 ++++-
 .../client/api/edm/xml/v4/Annotatable.java      |   2 +-
 .../olingo/client/api/edm/xml/v4/Reference.java |   4 +-
 .../retrieve/v4/XMLMetadataRequestImpl.java     |   2 +-
 .../client/core/edm/EdmActionImportImpl.java    |   6 +
 .../core/edm/EdmAnnotationHelperImpl.java       |  13 +
 .../client/core/edm/EdmAnnotationImpl.java      |   5 +
 .../client/core/edm/EdmBindingTargetImpl.java   |   6 +
 .../olingo/client/core/edm/EdmClientImpl.java   |   5 +-
 .../client/core/edm/EdmComplexTypeImpl.java     |   6 +
 .../client/core/edm/EdmEntityContainerImpl.java |   6 +
 .../client/core/edm/EdmEntityTypeImpl.java      |   6 +
 .../client/core/edm/EdmFunctionImportImpl.java  |   6 +
 .../olingo/client/core/edm/EdmMemberImpl.java   |   6 +
 .../core/edm/EdmNavigationPropertyImpl.java     |   6 +
 .../client/core/edm/EdmOperationImpl.java       |   6 +
 .../client/core/edm/EdmOperationImportImpl.java |   6 +
 .../client/core/edm/EdmParameterImpl.java       |   6 +
 .../olingo/client/core/edm/EdmPropertyImpl.java |   6 +
 .../core/edm/EdmReferentialConstraintImpl.java  |   6 +
 .../olingo/client/core/edm/EdmSchemaImpl.java   |  15 +-
 .../olingo/client/core/edm/EdmTermImpl.java     |  14 +-
 .../client/core/edm/EdmTypeDefinitionImpl.java  |   6 +
 .../client/core/edm/v3/EdmEntitySetProxy.java   |   6 +
 .../core/edm/v3/EdmNavigationPropertyProxy.java |   6 +
 .../client/core/edm/v3/EdmOperationProxy.java   |   6 +
 .../client/core/edm/xml/SchemaDeserializer.java |  31 +-
 .../client/core/edm/xml/v4/ReferenceImpl.java   |  11 +-
 .../client/core/edm/xml/v4/SchemaImpl.java      |   4 +-
 .../olingo/commons/api/edm/EdmAnnotatable.java  |   2 +
 .../olingo/commons/core/edm/AbstractEdm.java    |   6 +
 .../commons/core/edm/AbstractEdmSchema.java     |   2 +-
 .../commons/core/edm/EdmAnnotationHelper.java   |   7 +-
 ...mAnnotatableDynamicAnnotationExpression.java |  13 +
 .../core/edm/provider/EdmComplexTypeImpl.java   |   7 +
 .../edm/provider/EdmEntityContainerImpl.java    |   9 +-
 .../core/edm/provider/EdmEntitySetImpl.java     |   9 +-
 .../core/edm/provider/EdmEntityTypeImpl.java    |   7 +
 .../server/core/edm/provider/EdmMemberImpl.java |   7 +
 .../edm/provider/EdmNavigationPropertyImpl.java |   7 +
 .../core/edm/provider/EdmOperationImpl.java     |   7 +
 .../edm/provider/EdmOperationImportImpl.java    |   7 +
 .../core/edm/provider/EdmParameterImpl.java     |   7 +
 .../core/edm/provider/EdmPropertyImpl.java      |   7 +
 .../provider/EdmReferentialConstraintImpl.java  |   7 +
 .../server/core/edm/provider/EdmSchemaImpl.java |   6 +
 .../core/edm/provider/EdmSingletonImpl.java     |   9 +-
 .../edm/provider/EdmTypeDefinitionImpl.java     |   7 +
 58 files changed, 987 insertions(+), 105 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/fit/src/main/java/org/apache/olingo/fit/V4Vocabularies.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/V4Vocabularies.java b/fit/src/main/java/org/apache/olingo/fit/V4Vocabularies.java
new file mode 100644
index 0000000..122a8be
--- /dev/null
+++ b/fit/src/main/java/org/apache/olingo/fit/V4Vocabularies.java
@@ -0,0 +1,75 @@
+/*
+ * 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.fit;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+import org.apache.olingo.fit.utils.Accept;
+import org.apache.olingo.fit.utils.ConstantKey;
+import org.apache.olingo.fit.utils.Constants;
+import org.apache.olingo.fit.utils.FSManager;
+import org.apache.olingo.fit.utils.XMLUtilities;
+import org.springframework.stereotype.Service;
+
+@Service
+@Path("/V40/Vocabularies.svc")
+public class V4Vocabularies {
+
+  private final XMLUtilities xml;
+
+  public V4Vocabularies() throws Exception {
+    this.xml = new XMLUtilities(ODataServiceVersion.V40);
+  }
+
+  @GET
+  @Path("/$metadata")
+  @Produces(MediaType.APPLICATION_XML)
+  public Response getMetadata() {
+    try {
+      return xml.createResponse(
+              null,
+              FSManager.instance(ODataServiceVersion.V40).readFile(
+                      "vocabularies-" + Constants.get(ODataServiceVersion.V40, ConstantKey.METADATA), Accept.XML),
+              null,
+              Accept.XML);
+    } catch (Exception e) {
+      return xml.createFaultResponse(Accept.XML.toString(ODataServiceVersion.V40), e);
+    }
+  }
+
+  @GET
+  @Path("/{vocabulary}")
+  @Produces(MediaType.APPLICATION_XML)
+  public Response getVocabulary(@PathParam("vocabulary") final String vocabulary) {
+    try {
+      return xml.createResponse(
+              null,
+              FSManager.instance(ODataServiceVersion.V40).readFile(vocabulary, null),
+              null,
+              Accept.XML);
+    } catch (Exception e) {
+      return xml.createFaultResponse(Accept.XML.toString(ODataServiceVersion.V40), e);
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/fit/src/main/resources/V40/Org.OData.Capabilities.V1.xml
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Org.OData.Capabilities.V1.xml b/fit/src/main/resources/V40/Org.OData.Capabilities.V1.xml
new file mode 100644
index 0000000..9703401
--- /dev/null
+++ b/fit/src/main/resources/V40/Org.OData.Capabilities.V1.xml
@@ -0,0 +1,326 @@
+<?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 xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
+  <edmx:Reference Uri="http://localhost:${cargo.servlet.port}/StaticService/V40/Vocabularies.svc/Org.OData.Core.V1.xml">
+    <edmx:Include Alias="Core" Namespace="Org.OData.Core.V1" />
+  </edmx:Reference>
+  <edmx:DataServices>
+    <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Org.OData.Capabilities.V1" Alias="Capabilities">
+      <Annotation Term="Core.Description">
+        <String>
+          The Capabilities vocabulary aims to provide a way for service authors to describe
+          certain capabilities of an OData Service.
+        </String>
+      </Annotation>
+      <Annotation Term="Core.LongDescription">
+        <String>
+          There are some capabilities which are strongly recommended for services to support even
+          though they are optional. Support for $top and $skip is a good example as
+          supporting these query options helps with performance of a service and are essential. Such
+          capabilities are assumed to be default capabilities of an OData service even in
+          the case that a capabilities annotation doesn’t exist. Capabilities annotations are
+          mainly expected to be used to explicitly specify that a service doesn’t support such
+          capabilities. Capabilities annotations can as well be used to declaratively
+          specify the support of such capabilities.
+
+          On the other hand, there are some capabilities that a service may choose to support or
+          not support and in varying degrees. $filter and $orderby are such good examples.
+          This vocabulary aims to define terms to specify support or no support for such
+          capabilities.
+
+          A service is assumed to support by default the following capabilities even though an
+          annotation doesn’t exist:
+          - Countability ($count, $inlinecount)
+          - Client pageability ($top, $skip)
+          - Expandability ($expand)
+          - Indexability by key
+          - Batch support ($batch)
+          - Navigability of navigation properties
+
+          A service is expected to support the following capabilities. If not supported, the
+          service is expected to call out the restrictions using annotations:
+          - Filterability ($filter)
+          - Sortability ($orderby)
+          - Queryability of top level entity sets
+          - Query functions
+
+          A client cannot assume that a service supports certain capabilities. A client can try, but
+          it needs to be prepared to handle an error in case the following capabilities are not
+          supported:
+          - Insertability
+          - Updatability
+          - Deletability
+        </String>
+      </Annotation>
+
+      <!-- Conformance Level -->
+
+      <Term Name="ConformanceLevel" Type="Capabilities.ConformanceLevelType" AppliesTo="EntityContainer" />
+      <EnumType Name="ConformanceLevelType">
+        <Member Name="Minimal" />
+        <Member Name="Intermediate" />
+        <Member Name="Advanced" />
+      </EnumType>
+
+      <!-- Request Capabilities -->
+
+      <Term Name="SupportedFormats" Type="Collection(Edm.String)">
+        <Annotation Term="Core.Description" String="Media types of supported formats, including format parameters" />
+        <Annotation Term="Core.IsMediaType" />
+      </Term>
+
+      <Term Name="AcceptableEncodings" Type="Collection(Edm.String)" AppliesTo="EntityContainer">
+        <Annotation Term="Core.Description" String="List of acceptable compression methods for ($batch) requests, e.g. gzip" />
+      </Term>
+
+      <!-- Supported Preferences -->
+
+      <Term Name="AsynchronousRequestsSupported" Type="Core.Tag" DefaultValue="true" AppliesTo="EntityContainer">
+        <Annotation Term="Core.Description" String="Service supports the asynchronous request preference" />
+      </Term>
+
+      <Term Name="BatchContinueOnErrorSupported" Type="Core.Tag" DefaultValue="true" AppliesTo="EntityContainer">
+        <Annotation Term="Core.Description" String="Service supports the continue on error preference" />
+      </Term>
+
+      <Term Name="IsolationSupported" Type="Capabilities.IsolationLevel" AppliesTo="EntityContainer">
+        <Annotation Term="Core.Description" String="Supported odata.isolation levels" />
+      </Term>
+      <EnumType Name="IsolationLevel" IsFlags="true">
+        <Member Name="Snapshot" Value="1" />
+      </EnumType>
+
+      <Term Name="CallbackSupported" Type="Capabilities.CallbackType" AppliesTo="EntityContainer EntitySet">
+        <Annotation Term="Core.Description" String="Supports callbacks for the specified protocols" />
+      </Term>
+      <Term Name="CrossJoinSupported" Type="Core.Tag" DefaultValue="true" AppliesTo="EntityContainer">
+        <Annotation Term="Core.Description" String="Supports cross joins for the entity sets in this container" />
+      </Term>
+      <ComplexType Name="CallbackType">
+        <Property Name="CallbackProtocols" Type="Collection(Capabilities.CallbackProtocol)" />
+        <Annotation Term="Core.Description"
+          String="A non-empty collection lists the full set of supported protocols. A empty collection means 'only HTTP is supported'" />
+      </ComplexType>
+      <ComplexType Name="CallbackProtocol">
+        <Property Name="Id" Type="Edm.String">
+          <Annotation Term="Core.Description" String="Protcol Identifier" />
+        </Property>
+        <Property Name="UrlTemplate" Type="Edm.String">
+          <Annotation Term="Core.Description"
+            String="URL Template including parameters. Parameters are enclosed in curly braces {} as defined in RFC6570" />
+        </Property>
+        <Property Name="DocumentationUrl" Type="Edm.String" Nullable="true">
+          <Annotation Term="Core.Description" String="Human readable description of the meaning of the URL Template parameters" />
+          <Annotation Term="Core.IsURL" />
+        </Property>
+      </ComplexType>
+
+      <Term Name="ChangeTracking" Type="Capabilities.ChangeTrackingType" AppliesTo="EntityContainer EntitySet">
+        <Annotation Term="Core.Description" String="Change tracking capabilities of this service or entity set" />
+      </Term>
+      <ComplexType Name="ChangeTrackingType">
+        <Property Name="Supported" Type="Edm.Boolean" DefaultValue="true">
+          <Annotation Term="Core.Description" String="This entity set supports the odata.track-changes preference" />
+        </Property>
+        <Property Name="FilterableProperties" Type="Collection(Edm.PropertyPath)">
+          <Annotation Term="Core.Description" String="Change tracking supports filters on these properties" />
+        </Property>
+        <Property Name="ExpandableProperties" Type="Collection(Edm.NavigationPropertyPath)">
+          <Annotation Term="Core.Description" String="Change tracking supports these properties expanded" />
+        </Property>
+      </ComplexType>
+
+      <!--Query Capabilities -->
+
+      <Term Name="CountRestrictions" Type="Capabilities.CountRestrictionsType" AppliesTo="EntitySet">
+        <Annotation Term="Core.Description" String="Restrictions on /$count path suffix and $count=true system query option" />
+      </Term>
+      <ComplexType Name="CountRestrictionsType">
+        <Property Name="Countable" Type="Edm.Boolean" DefaultValue="true">
+          <Annotation Term="Core.Description" String="Entities can be counted" />
+        </Property>
+        <Property Name="NonCountableProperties" Type="Collection(Edm.PropertyPath)">
+          <Annotation Term="Core.Description" String="These collection properties do not allow /$count segments" />
+        </Property>
+        <Property Name="NonCountableNavigationProperties" Type="Collection(Edm.NavigationPropertyPath)">
+          <Annotation Term="Core.Description" String="These navigation properties do not allow /$count segments" />
+        </Property>
+      </ComplexType>
+
+      <Term Name="NavigationRestrictions" Type="Capabilities.NavigationRestrictionsType" AppliesTo="EntitySet">
+        <Annotation Term="Core.Description" String="Restrictions on navigating properties according to OData URL conventions" />
+      </Term>
+      <ComplexType Name="NavigationRestrictionsType">
+        <Property Name="Navigability" Type="Capabilities.NavigationType">
+          <Annotation Term="Core.Description" String="Supported Navigability" />
+        </Property>
+        <Property Name="RestrictedProperties" Type="Collection(Capabilities.NavigationPropertyRestriction)" />
+      </ComplexType>
+      <ComplexType Name="NavigationPropertyRestriction">
+        <Property Name="NavigationProperty" Type="Edm.NavigationPropertyPath">
+          <Annotation Term="Core.Description" String="Navigation properties can be navigated to a single level" />
+        </Property>
+        <Property Name="Navigability" Type="Capabilities.NavigationType">
+          <Annotation Term="Core.Description" String="Navigation properties can be navigated to a single level" />
+        </Property>
+      </ComplexType>
+      <EnumType Name="NavigationType">
+        <Member Name="Recursive">
+          <Annotation Term="Core.Description" String="Navigation properties can be recursively navigated" />
+        </Member>
+        <Member Name="Single">
+          <Annotation Term="Core.Description" String="Navigation properties can be navigated to a single level" />
+        </Member>
+        <Member Name="None">
+          <Annotation Term="Core.Description" String="Navigation properties are not navigable" />
+        </Member>
+      </EnumType>
+
+      <Term Name="IndexableByKey" Type="Core.Tag" DefaultValue="true" AppliesTo="EntitySet">
+        <Annotation Term="Core.Description" String="Supports key values according to OData URL conventions" />
+      </Term>
+
+      <Term Name="TopSupported" Type="Core.Tag" DefaultValue="true" AppliesTo="EntitySet">
+        <Annotation Term="Core.Description" String="Supports $top" />
+      </Term>
+      <Term Name="SkipSupported" Type="Core.Tag" DefaultValue="true" AppliesTo="EntitySet">
+        <Annotation Term="Core.Description" String="Supports $skip" />
+      </Term>
+
+      <Term Name="BatchSupported" Type="Core.Tag" DefaultValue="true" AppliesTo="EntityContainer">
+        <Annotation Term="Core.Description" String="Supports $batch requests" />
+      </Term>
+
+      <Term Name="FilterFunctions" Type="Collection(Edm.String)" AppliesTo="EntityContainer EntitySet">
+        <Annotation Term="Core.Description" String="List of functions supported in $filter" />
+      </Term>
+
+      <Term Name="FilterRestrictions" Type="Capabilities.FilterRestrictionsType" AppliesTo="EntitySet">
+        <Annotation Term="Core.Description" String="Restrictions on $filter expressions" />
+      </Term>
+      <ComplexType Name="FilterRestrictionsType">
+        <Property Name="Filterable" Type="Edm.Boolean" DefaultValue="true">
+          <Annotation Term="Core.Description" String="$filter is supported" />
+        </Property>
+        <Property Name="RequiresFilter" Type="Edm.Boolean" Nullable="true">
+          <Annotation Term="Core.Description" String="$filter is required" />
+        </Property>
+        <Property Name="RequiredProperties" Type="Collection(Edm.PropertyPath)">
+          <Annotation Term="Core.Description"
+            String="These properties must be specified in the $filter clause (properties of derived types are not allowed here)" />
+        </Property>
+        <Property Name="NonFilterableProperties" Type="Collection(Edm.PropertyPath)">
+          <Annotation Term="Core.Description" String="These properties cannot be used in $filter expressions" />
+        </Property>
+      </ComplexType>
+
+      <Term Name="SortRestrictions" Type="Capabilities.SortRestrictionsType" AppliesTo="EntitySet">
+        <Annotation Term="Core.Description" String="Restrictions on $orderby expressions" />
+      </Term>
+      <ComplexType Name="SortRestrictionsType">
+        <Property Name="Sortable" Type="Edm.Boolean" DefaultValue="true">
+          <Annotation Term="Core.Description" String="$orderby is supported" />
+        </Property>
+        <Property Name="AscendingOnlyProperties" Type="Collection(Edm.PropertyPath)">
+          <Annotation Term="Core.Description" String="These properties can only be used for sorting in Ascending order" />
+        </Property>
+        <Property Name="DescendingOnlyProperties" Type="Collection(Edm.PropertyPath)">
+          <Annotation Term="Core.Description" String="These properties can only be used for sorting in Descending order" />
+        </Property>
+        <Property Name="NonSortableProperties" Type="Collection(Edm.PropertyPath)">
+          <Annotation Term="Core.Description" String="These properties cannot be used in $orderby expressions" />
+        </Property>
+      </ComplexType>
+
+      <Term Name="ExpandRestrictions" Type="Capabilities.ExpandRestrictionsType" AppliesTo="EntitySet">
+        <Annotation Term="Core.Description" String="Restrictions on $expand expressions" />
+      </Term>
+      <ComplexType Name="ExpandRestrictionsType">
+        <Property Name="Expandable" Type="Edm.Boolean" DefaultValue="true">
+          <Annotation Term="Core.Description" String="$expand is supported" />
+        </Property>
+        <Property Name="NonExpandableProperties" Type="Collection(Edm.NavigationPropertyPath)">
+          <Annotation Term="Core.Description" String="These properties cannot be used in $expand expressions" />
+        </Property>
+      </ComplexType>
+
+      <Term Name="SearchRestrictions" Type="Capabilities.SearchRestrictionsType" AppliesTo="EntitySet">
+        <Annotation Term="Core.Description" String="Restrictions on $search expressions" />
+      </Term>
+      <ComplexType Name="SearchRestrictionsType">
+        <Property Name="Searchable" Type="Edm.Boolean" DefaultValue="true">
+          <Annotation Term="Core.Description" String="$search is supported" />
+        </Property>
+        <Property Name="UnsupportedExpressions" Type="Capabilities.SearchExpressions" DefaultValue="none">
+          <Annotation Term="Core.Description" String="Expressions supported in $search" />
+        </Property>
+      </ComplexType>
+      <EnumType Name="SearchExpressions" IsFlags="true">
+        <Member Name="none" Value="0" />
+        <Member Name="AND" Value="1" />
+        <Member Name="OR" Value="2" />
+        <Member Name="NOT" Value="4" />
+        <Member Name="phrase" Value="8" />
+        <Member Name="group" Value="16" />
+      </EnumType>
+
+      <!-- Data Modification Capabilities -->
+
+      <Term Name="InsertRestrictions" Type="Capabilities.InsertRestrictionsType" AppliesTo="EntitySet">
+        <Annotation Term="Core.Description" String="Restrictions on insert operations" />
+      </Term>
+      <ComplexType Name="InsertRestrictionsType">
+        <Property Name="Insertable" Type="Edm.Boolean" DefaultValue="true">
+          <Annotation Term="Core.Description" String="Entities can be inserted" />
+        </Property>
+        <Property Name="NonInsertableNavigationProperties" Type="Collection(Edm.NavigationPropertyPath)">
+          <Annotation Term="Core.Description" String="These navigation properties do not allow deep inserts" />
+        </Property>
+      </ComplexType>
+
+      <Term Name="UpdateRestrictions" Type="Capabilities.UpdateRestrictionsType" AppliesTo="EntitySet">
+        <Annotation Term="Core.Description" String="Restrictions on update operations" />
+      </Term>
+      <ComplexType Name="UpdateRestrictionsType">
+        <Property Name="Updatable" Type="Edm.Boolean" DefaultValue="true">
+          <Annotation Term="Core.Description" String="Entities can be updated" />
+        </Property>
+        <Property Name="NonUpdatableNavigationProperties" Type="Collection(Edm.NavigationPropertyPath)">
+          <Annotation Term="Core.Description" String="These navigation properties do not allow rebinding" />
+        </Property>
+      </ComplexType>
+
+      <Term Name="DeleteRestrictions" Type="Capabilities.DeleteRestrictionsType" AppliesTo="EntitySet">
+        <Annotation Term="Core.Description" String="Restrictions on delete operations" />
+      </Term>
+      <ComplexType Name="DeleteRestrictionsType">
+        <Property Name="Deletable" Type="Edm.Boolean" DefaultValue="true">
+          <Annotation Term="Core.Description" String="Entities can be deleted" />
+        </Property>
+        <Property Name="NonDeletableNavigationProperties" Type="Collection(Edm.NavigationPropertyPath)">
+          <Annotation Term="Core.Description" String="These navigation properties do not allow DeleteLink requests" />
+        </Property>
+      </ComplexType>
+
+    </Schema>
+  </edmx:DataServices>
+</edmx:Edmx>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/fit/src/main/resources/V40/Org.OData.Core.V1.xml
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Org.OData.Core.V1.xml b/fit/src/main/resources/V40/Org.OData.Core.V1.xml
new file mode 100644
index 0000000..42d05b9
--- /dev/null
+++ b/fit/src/main/resources/V40/Org.OData.Core.V1.xml
@@ -0,0 +1,125 @@
+<?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 xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
+  <edmx:DataServices>
+    <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Org.OData.Core.V1" Alias="Core">
+      <Annotation Term="Core.Description">
+        <String>Core terms needed to write vocabularies</String>
+      </Annotation>
+
+      <!--Documentation -->
+
+      <Term Name="Description" Type="Edm.String">
+        <Annotation Term="Core.Description" String="A brief description of a model element" />
+        <Annotation Term="Core.IsLanguageDependent" />
+      </Term>
+
+      <Term Name="LongDescription" Type="Edm.String">
+        <Annotation Term="Core.Description" String="A lengthy description of a model element" />
+        <Annotation Term="Core.IsLanguageDependent" />
+      </Term>
+
+      <!-- Localization -->
+
+      <Term Name="IsLanguageDependent" Type="Core.Tag" DefaultValue="true" AppliesTo="Property Term">
+        <Annotation Term="Core.Description" String="Properties and terms annotated with this term are language-dependent" />
+        <Annotation Term="Core.RequiresType" String="Edm.String" />
+      </Term>
+
+      <!-- Term Restrictions -->
+
+      <TypeDefinition Name="Tag" UnderlyingType="Edm.Boolean">
+        <Annotation Term="Core.Description" String="This is the type to use for all tagging terms" />
+      </TypeDefinition>
+
+      <Term Name="RequiresType" Type="Edm.String" AppliesTo="Term">
+        <Annotation Term="Core.Description"
+          String="Properties and terms annotated with this annotation MUST have a type that is identical to or derived from the given type name" />
+      </Term>
+
+      <!--Resource Paths -->
+
+      <Term Name="ResourcePath" Type="Edm.String" AppliesTo="EntitySet Singleton ActionImport FunctionImport">
+        <Annotation Term="Core.Description"
+          String="Resource path for entity container child, can be relative to xml:base and the request URL" />
+        <Annotation Term="Core.IsUrl" />
+      </Term>
+
+      <Term Name="DereferenceableIDs" Type="Core.Tag" DefaultValue="true" AppliesTo="EntityContainer">
+        <Annotation Term="Core.Description" String="Entity-ids are URLs that locate the identified entity" />
+      </Term>
+
+      <Term Name="ConventionalIDs" Type="Core.Tag" DefaultValue="true" AppliesTo="EntityContainer">
+        <Annotation Term="Core.Description" String="Entity-ids follow OData URL conventions" />
+      </Term>
+
+      <!-- Permissions -->
+
+      <Term Name="Permissions" Type="Core.Permission" AppliesTo="Property">
+        <Annotation Term="Core.Description" String="Permissions available for a property.The value of 2 is reserved for future use." />
+      </Term>
+      <EnumType Name="Permission" IsFlags="true">
+        <Member Name="None" Value="0" />
+        <Member Name="Read" Value="1" />
+        <Member Name="ReadWrite" Value="3" />
+      </EnumType>
+
+      <!-- Metadata Extensions -->
+
+      <Term Name="Immutable" Type="Core.Tag" DefaultValue="true" AppliesTo="Property">
+        <Annotation Term="Core.Description"
+          String="A value for this non-key property can be provided on insert and remains unchanged on update" />
+      </Term>
+
+      <Term Name="Computed" Type="Core.Tag" DefaultValue="true" AppliesTo="Property">
+        <Annotation Term="Core.Description" String="A value for this property is generated on both insert and update" />
+      </Term>
+
+      <Term Name="IsURL" Type="Core.Tag" DefaultValue="true" AppliesTo="Property Term">
+        <Annotation Term="Core.Description" String="Properties and terms annotated with this term MUST contain a valid URL" />
+        <Annotation Term="Core.RequiresType" String="Edm.String" />
+      </Term>
+
+      <Term Name="AcceptableMediaTypes" Type="Collection(Edm.String)" AppliesTo="EntityType Property">
+        <Annotation Term="Core.Description"
+          String="Lists the MIME types acceptable for the annotated entity type marked with HasStream=&quot;true&quot; or the annotated stream property" />
+        <Annotation Term="Core.IsMediaType" />
+      </Term>
+
+      <Term Name="MediaType" Type="Edm.String" AppliesTo="Property">
+        <Annotation Term="Core.IsMediaType" />
+        <Annotation Term="Core.RequiresType" String="Edm.Binary" />
+      </Term>
+
+      <Term Name="IsMediaType" Type="Core.Tag" DefaultValue="true" AppliesTo="Property Term">
+        <Annotation Term="Core.Description" String="Properties and terms annotated with this term MUST contain a valid MIME type" />
+        <Annotation Term="Core.RequiresType" String="Edm.String" />
+      </Term>
+
+      <Term Name="OptimisticConcurrency" Type="Collection(Edm.PropertyPath)" AppliesTo="EntitySet">
+        <Annotation Term="Core.Description"
+          String="Data modification requires the use of Etags. A non-empty collection contains the set of properties that are used to compute the ETag" />
+      </Term>
+
+    </Schema>
+  </edmx:DataServices>
+</edmx:Edmx>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/fit/src/main/resources/V40/Org.OData.Measures.V1.xml
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Org.OData.Measures.V1.xml b/fit/src/main/resources/V40/Org.OData.Measures.V1.xml
new file mode 100644
index 0000000..0d214c3
--- /dev/null
+++ b/fit/src/main/resources/V40/Org.OData.Measures.V1.xml
@@ -0,0 +1,48 @@
+<?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 xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
+  <edmx:Reference Uri="http://localhost:${cargo.servlet.port}/StaticService/V40/Vocabularies.svc/Org.OData.Core.V1.xml">
+    <edmx:Include Alias="Core" Namespace="Org.OData.Core.V1" />
+  </edmx:Reference>
+  <edmx:DataServices>
+    <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Org.OData.Measures.V1" Alias="Measures">
+      <Annotation Term="Core.Description">
+        <String>Terms describing monetary amounts and measured quantities</String>
+      </Annotation>
+
+      <Term Name="ISOCurrency" Type="Edm.String" AppliesTo="Property">
+        <Annotation Term="Core.Description" String="The currency for this monetary amount as an ISO 4217 currency code" />
+      </Term>
+
+      <Term Name="Scale" Type="Edm.Byte" AppliesTo="Property">
+        <Annotation Term="Core.Description"
+          String="The number of significant decimal places in the scale part (less than or equal to the number declared in the Scale facet)" />
+        <Annotation Term="Core.RequiresType" String="Edm.Decimal" />
+      </Term>
+
+      <Term Name="Unit" Type="Edm.String" AppliesTo="Property">
+        <Annotation Term="Core.Description" String="The unit of measure for this measured quantity, e.g. cm for centimeters or % for percentages" />
+      </Term>
+
+    </Schema>
+  </edmx:DataServices>
+</edmx:Edmx>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/fit/src/main/resources/V40/northwind-metadata.xml
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/northwind-metadata.xml b/fit/src/main/resources/V40/northwind-metadata.xml
index 85f260f..fa786e7 100644
--- a/fit/src/main/resources/V40/northwind-metadata.xml
+++ b/fit/src/main/resources/V40/northwind-metadata.xml
@@ -20,7 +20,7 @@
 
 -->
 <edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
-  <edmx:Reference Uri="http://localhost:${cargo.servlet.port}/StaticService/V40/NorthWindExt.svc">
+  <edmx:Reference Uri="http://localhost:${cargo.servlet.port}/StaticService/V40/NorthWindExt.svc/$metadata">
     <edmx:Include Namespace="NorthwindModel"/>
   </edmx:Reference>
   <edmx:DataServices>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/fit/src/main/resources/V40/vocabularies-metadata.xml
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/vocabularies-metadata.xml b/fit/src/main/resources/V40/vocabularies-metadata.xml
new file mode 100644
index 0000000..afe5825
--- /dev/null
+++ b/fit/src/main/resources/V40/vocabularies-metadata.xml
@@ -0,0 +1,37 @@
+<?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:Reference Uri="http://localhost:${cargo.servlet.port}/StaticService/V40/Vocabularies.svc/Org.OData.Core.V1.xml">
+    <edmx:Include Alias="Core" Namespace="Org.OData.Core.V1"/>
+  </edmx:Reference>
+  <edmx:Reference Uri="http://localhost:${cargo.servlet.port}/StaticService/V40/Vocabularies.svc/Org.OData.Measures.V1.xml">
+    <edmx:Include Alias="UoM" Namespace="Org.OData.Measures.V1"/>
+  </edmx:Reference>
+  <edmx:Reference Uri="http://localhost:${cargo.servlet.port}/StaticService/V40/Vocabularies.svc/Org.OData.Capabilities.V1.xml">
+    <edmx:Include Alias="Capabilities" Namespace="Org.OData.Capabilities.V1"/>
+  </edmx:Reference>
+  
+  <edmx:DataServices>
+    <Schema Namespace="Vocabularies" xmlns="http://docs.oasis-open.org/odata/ns/edm">
+    </Schema>
+  </edmx:DataServices>
+</edmx:Edmx>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/fit/src/main/webapp/WEB-INF/applicationContext.xml
----------------------------------------------------------------------
diff --git a/fit/src/main/webapp/WEB-INF/applicationContext.xml b/fit/src/main/webapp/WEB-INF/applicationContext.xml
index 2372c2e..c37b8d0 100644
--- a/fit/src/main/webapp/WEB-INF/applicationContext.xml
+++ b/fit/src/main/webapp/WEB-INF/applicationContext.xml
@@ -48,6 +48,7 @@
       <bean class="org.apache.olingo.fit.V4NorthWind"/>
       <bean class="org.apache.olingo.fit.V4NorthWindExt"/>
       <bean class="org.apache.olingo.fit.V4OpenType"/>
+      <bean class="org.apache.olingo.fit.V4Vocabularies"/>
     </jaxrs:serviceBeans>
     <jaxrs:providers>
       <bean class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider"/>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/fit/src/test/java/org/apache/olingo/fit/AbstractMetadataTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/AbstractMetadataTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/AbstractMetadataTestITCase.java
deleted file mode 100644
index f9eda5f..0000000
--- a/fit/src/test/java/org/apache/olingo/fit/AbstractMetadataTestITCase.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * 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.fit;
-
-import org.apache.olingo.client.api.CommonODataClient;
-
-public abstract class AbstractMetadataTestITCase {
-
-  @SuppressWarnings("rawtypes")
-  protected abstract CommonODataClient getClient();
-
-  protected String getTestServiceRoot() {
-    return "http://localhost:9080/StaticService/" + getClient().getServiceVersion().name() + "/Static.svc";
-  }
-
-  protected String getNorthwindServiceRoot() {
-    return "http://localhost:9080/StaticService/" + getClient().getServiceVersion().name() + "/NorthWind.svc";
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/fit/src/test/java/org/apache/olingo/fit/v3/MetadataTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/MetadataTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/MetadataTestITCase.java
index d535ad1..3ead8d6 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/MetadataTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/MetadataTestITCase.java
@@ -18,24 +18,16 @@
  */
 package org.apache.olingo.fit.v3;
 
-import org.apache.olingo.client.api.v3.ODataClient;
-import org.apache.olingo.client.core.ODataClientFactory;
-import org.apache.olingo.fit.AbstractMetadataTestITCase;
 import org.apache.olingo.commons.api.edm.Edm;
 import static org.junit.Assert.assertNotNull;
 import org.junit.Test;
 
-public class MetadataTestITCase extends AbstractMetadataTestITCase {
-
-  @Override
-  protected ODataClient getClient() {
-    return ODataClientFactory.getV3();
-  }
+public class MetadataTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieve() {
     final Edm metadata = getClient().getRetrieveRequestFactory().
-            getMetadataRequest(getTestServiceRoot()).execute().getBody();
+            getMetadataRequest(testStaticServiceRootURL).execute().getBody();
     assertNotNull(metadata);
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java
index 7e2ef22..5b49444 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java
@@ -49,6 +49,10 @@ public abstract class AbstractTestITCase extends AbstractBaseTestITCase {
 
   protected static String testStaticServiceRootURL;
 
+  protected static String testVocabulariesServiceRootURL;
+
+  protected static String testNorthwindRootURL;
+
   protected static String testKeyAsSegmentServiceRootURL;
 
   protected static String testOpenTypeServiceRootURL;
@@ -60,12 +64,14 @@ public abstract class AbstractTestITCase extends AbstractBaseTestITCase {
   @BeforeClass
   public static void setUpODataServiceRoot() throws IOException {
     testStaticServiceRootURL = "http://localhost:9080/StaticService/V40/Static.svc";
+    testVocabulariesServiceRootURL = "http://localhost:9080/StaticService/V40/Vocabularies.svc";
+    testNorthwindRootURL = "http://localhost:9080/StaticService/V40/NorthWind.svc";
     testKeyAsSegmentServiceRootURL = "http://localhost:9080/StaticService/V40/KeyAsSegment.svc";
     testOpenTypeServiceRootURL = "http://localhost:9080/StaticService/V40/OpenType.svc";
     testLargeModelServiceRootURL = "http://localhost:9080/StaticService/V40/Static.svc/large";
     testAuthServiceRootURL = "http://localhost:9080/DefaultService.svc";
 
-    edmClient = ODataClientFactory.getEdmEnabledV4(testStaticServiceRootURL);  
+    edmClient = ODataClientFactory.getEdmEnabledV4(testStaticServiceRootURL);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/fit/src/test/java/org/apache/olingo/fit/v4/MetadataTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/MetadataTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/MetadataTestITCase.java
index a00e907..4a21437 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/MetadataTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/MetadataTestITCase.java
@@ -20,29 +20,28 @@ package org.apache.olingo.fit.v4;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 
-import org.apache.olingo.client.api.v4.ODataClient;
-import org.apache.olingo.client.core.ODataClientFactory;
-import org.apache.olingo.fit.AbstractMetadataTestITCase;
 import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAnnotation;
 import org.apache.olingo.commons.api.edm.EdmEntityContainer;
 import org.apache.olingo.commons.api.edm.EdmEntitySet;
 import org.apache.olingo.commons.api.edm.EdmEntityType;
+import org.apache.olingo.commons.api.edm.EdmEnumType;
 import org.apache.olingo.commons.api.edm.EdmProperty;
+import org.apache.olingo.commons.api.edm.EdmSchema;
+import org.apache.olingo.commons.api.edm.EdmTerm;
+import org.apache.olingo.commons.api.edm.EdmTypeDefinition;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmBoolean;
 import org.junit.Test;
 
-public class MetadataTestITCase extends AbstractMetadataTestITCase {
-
-  @Override
-  protected ODataClient getClient() {
-    return ODataClientFactory.getV4();
-  }
+public class MetadataTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieve() {
-    final Edm metadata = getClient().getRetrieveRequestFactory().
-            getMetadataRequest(getTestServiceRoot()).execute().getBody();
+    final Edm metadata = client.getRetrieveRequestFactory().
+            getMetadataRequest(testStaticServiceRootURL).execute().getBody();
     assertNotNull(metadata);
 
     final EdmEntityType order = metadata.getEntityType(
@@ -56,11 +55,11 @@ public class MetadataTestITCase extends AbstractMetadataTestITCase {
 
   @Test
   public void include() {
-    final Edm metadata = getClient().getRetrieveRequestFactory().
-            getMetadataRequest(getNorthwindServiceRoot()).execute().getBody();
-    assertNotNull(metadata);
+    final Edm edm = client.getRetrieveRequestFactory().
+            getMetadataRequest(testNorthwindRootURL).execute().getBody();
+    assertNotNull(edm);
 
-    final EdmEntityContainer container = metadata.getEntityContainer(
+    final EdmEntityContainer container = edm.getEntityContainer(
             new FullQualifiedName("ODataWebExperimental.Northwind.Model", "NorthwindEntities"));
     assertNotNull(container);
 
@@ -68,4 +67,57 @@ public class MetadataTestITCase extends AbstractMetadataTestITCase {
     assertNotNull(categories);
     assertEquals("NorthwindModel", categories.getEntityType().getNamespace());
   }
+
+  @Test
+  public void vocabularies() {
+    final Edm edm = client.getRetrieveRequestFactory().
+            getMetadataRequest(testVocabulariesServiceRootURL).execute().getBody();
+    assertNotNull(edm);
+
+    // 1. core
+    final EdmSchema core = edm.getSchema("Org.OData.Core.V1");
+    assertNotNull(core);
+    final EdmSchema coreAlias = edm.getSchema("Core");
+    assertEquals(core, coreAlias);
+
+    final EdmTerm descriptionTerm = edm.getTerm(new FullQualifiedName("Core.Description"));
+    assertNotNull(descriptionTerm);
+    assertEquals(descriptionTerm.getFullQualifiedName(),
+            edm.getTerm(new FullQualifiedName("Org.OData.Core.V1.Description")).getFullQualifiedName());
+
+    final EdmAnnotation description = core.getAnnotation(descriptionTerm);
+    assertNotNull(description);
+    assertEquals("Core terms needed to write vocabularies",
+            description.getExpression().asConstant().getValue().asPrimitive().toString());
+
+    final EdmTerm isLanguageDependent = edm.getTerm(new FullQualifiedName("Core.IsLanguageDependent"));
+    assertNotNull(isLanguageDependent);
+    assertTrue(isLanguageDependent.getAppliesTo().contains(EdmProperty.class));
+    assertTrue(isLanguageDependent.getAppliesTo().contains(EdmTerm.class));
+    assertEquals(edm.getTypeDefinition(new FullQualifiedName("Core.Tag")), isLanguageDependent.getType());
+    assertEquals(EdmBoolean.getInstance(), ((EdmTypeDefinition) isLanguageDependent.getType()).getUnderlyingType());
+    assertNotNull(isLanguageDependent.getAnnotation(descriptionTerm));
+
+    final EdmTerm permissions = edm.getTerm(new FullQualifiedName("Core.Permissions"));
+    assertNotNull(permissions);
+    assertTrue(permissions.getType() instanceof EdmEnumType);
+
+    // 2. measures
+    final EdmSchema measures = edm.getSchema("Measures");
+    assertNotNull(measures);
+
+    final EdmTerm scale = edm.getTerm(new FullQualifiedName("Measures.Scale"));
+    assertNotNull(scale);
+
+    final EdmAnnotation requiresTypeInScale = edm.getAnnotation(
+            scale.getFullQualifiedName(), edm.getTerm(new FullQualifiedName("Core.RequiresType")));
+    assertNotNull(requiresTypeInScale);
+    assertEquals("Edm.Decimal", requiresTypeInScale.getExpression().asConstant().getValue().toString());
+
+    // 3. capabilities
+    final EdmTerm deleteRestrictions = edm.getTerm(new FullQualifiedName("Capabilities.DeleteRestrictions"));
+    assertNotNull(deleteRestrictions);
+    assertEquals(deleteRestrictions.getType().getFullQualifiedName(),
+            edm.getComplexType(new FullQualifiedName("Capabilities.DeleteRestrictionsType")).getFullQualifiedName());
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/Annotatable.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/Annotatable.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/Annotatable.java
index 4f5e357..d009212 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/Annotatable.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/Annotatable.java
@@ -21,6 +21,6 @@ package org.apache.olingo.client.api.edm.xml.v4;
 import java.util.List;
 
 public interface Annotatable {
-
+  
   List<Annotation> getAnnotations();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/Reference.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/Reference.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/Reference.java
index d9f2f6b..d8e2add 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/Reference.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/Reference.java
@@ -21,13 +21,11 @@ package org.apache.olingo.client.api.edm.xml.v4;
 import java.net.URI;
 import java.util.List;
 
-public interface Reference {
+public interface Reference extends Annotatable {
 
   URI getUri();
 
   List<Include> getIncludes();
 
   List<IncludeAnnotations> getIncludeAnnotations();
-
-  List<Annotation> getAnnotations();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/XMLMetadataRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/XMLMetadataRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/XMLMetadataRequestImpl.java
index 5e25a54..91b1516 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/XMLMetadataRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/XMLMetadataRequestImpl.java
@@ -51,7 +51,7 @@ public class XMLMetadataRequestImpl extends AbstractMetadataRequestImpl<List<? e
     if (!rootMetadata.getReferences().isEmpty()) {
       for (Reference reference : rootMetadata.getReferences()) {
         final SingleXMLMetadatRequestImpl includeReq = new SingleXMLMetadatRequestImpl((ODataClient) odataClient,
-                odataClient.getURIBuilder(reference.getUri().toASCIIString()).appendMetadataSegment().build());
+                odataClient.getURIBuilder(reference.getUri().toASCIIString()).build());
         final XMLMetadata includeMetadata = includeReq.execute().getBody();
         
         for (Include include : reference.getIncludes()) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java
index f95746e..686de44 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java
@@ -26,6 +26,7 @@ import org.apache.olingo.commons.api.edm.EdmAction;
 import org.apache.olingo.commons.api.edm.EdmActionImport;
 import org.apache.olingo.commons.api.edm.EdmAnnotation;
 import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
 
@@ -64,6 +65,11 @@ public class EdmActionImportImpl extends EdmOperationImportImpl implements EdmAc
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return helper.getAnnotation(term);
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return helper.getAnnotations();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationHelperImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationHelperImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationHelperImpl.java
index 6333bca..d158419 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationHelperImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationHelperImpl.java
@@ -24,6 +24,7 @@ import org.apache.olingo.client.api.edm.xml.v4.Annotatable;
 import org.apache.olingo.client.api.edm.xml.v4.Annotation;
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmAnnotation;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
 
 public class EdmAnnotationHelperImpl implements EdmAnnotationHelper {
@@ -40,6 +41,18 @@ public class EdmAnnotationHelperImpl implements EdmAnnotationHelper {
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    EdmAnnotation result = null;
+    for (EdmAnnotation annotation : getAnnotations()) {
+      if (term.getFullQualifiedName().equals(annotation.getTerm().getFullQualifiedName())) {
+        result = annotation;
+      }
+    }
+
+    return result;
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     if (annotations == null) {
       annotations = new ArrayList<EdmAnnotation>();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationImpl.java
index b219eb2..e69b794 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationImpl.java
@@ -231,6 +231,11 @@ public class EdmAnnotationImpl implements EdmAnnotation {
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return helper.getAnnotation(term);
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return helper.getAnnotations();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmBindingTargetImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmBindingTargetImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmBindingTargetImpl.java
index 9aa3485..bb23128 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmBindingTargetImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmBindingTargetImpl.java
@@ -30,6 +30,7 @@ import org.apache.olingo.commons.api.edm.EdmBindingTarget;
 import org.apache.olingo.commons.api.edm.EdmEntityContainer;
 import org.apache.olingo.commons.api.edm.EdmException;
 import org.apache.olingo.commons.api.edm.EdmNavigationPropertyBinding;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.Target;
 import org.apache.olingo.commons.core.edm.AbstractEdmBindingTarget;
@@ -102,6 +103,11 @@ public abstract class EdmBindingTargetImpl extends AbstractEdmBindingTarget {
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return helper.getAnnotation(term);
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return helper.getAnnotations();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java
index 0b40f67..3c377a0 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java
@@ -428,7 +428,7 @@ public class EdmClientImpl extends AbstractEdm {
     if (schema instanceof org.apache.olingo.client.api.edm.xml.v4.Schema) {
       final Term term = ((org.apache.olingo.client.api.edm.xml.v4.Schema) schema).getTerm(termName.getName());
       if (term != null) {
-        result = new EdmTermImpl(this, term);
+        result = new EdmTermImpl(this, schema.getNamespace(), term);
       }
     }
 
@@ -455,8 +455,11 @@ public class EdmClientImpl extends AbstractEdm {
   protected List<EdmAnnotation> createAnnotations(final FullQualifiedName annotatedName) {
     List<EdmAnnotation> result = null;
 
+    System.out.println("SSSSSSSSS1 " + annotatedName);
+    
     final Schema schema = xmlSchemaByNamespace.get(annotatedName.getNamespace());
     if (schema instanceof org.apache.olingo.client.api.edm.xml.v4.Schema) {
+    System.out.println("SSSSSSSSS2 " + ((org.apache.olingo.client.api.edm.xml.v4.Schema) schema).getAnnotatables());
       final Annotatable annotatable =
               ((org.apache.olingo.client.api.edm.xml.v4.Schema) schema).getAnnotatables().get(annotatedName.getName());
       if (annotatable != null && annotatable.getAnnotations() != null) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmComplexTypeImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmComplexTypeImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmComplexTypeImpl.java
index f770e56..970e1e3 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmComplexTypeImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmComplexTypeImpl.java
@@ -27,6 +27,7 @@ import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmAnnotation;
 import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
 import org.apache.olingo.commons.api.edm.EdmProperty;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.core.edm.AbstractEdmComplexType;
 import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
@@ -85,6 +86,11 @@ public class EdmComplexTypeImpl extends AbstractEdmComplexType {
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return annotationHelper == null ? null : annotationHelper.getAnnotation(term);
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return annotationHelper == null ? null : annotationHelper.getAnnotations();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityContainerImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityContainerImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityContainerImpl.java
index ff0938b..30127d3 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityContainerImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityContainerImpl.java
@@ -39,6 +39,7 @@ import org.apache.olingo.commons.api.edm.EdmAnnotation;
 import org.apache.olingo.commons.api.edm.EdmEntitySet;
 import org.apache.olingo.commons.api.edm.EdmFunctionImport;
 import org.apache.olingo.commons.api.edm.EdmSingleton;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.core.edm.AbstractEdmEntityContainer;
 import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
@@ -230,6 +231,11 @@ public class EdmEntityContainerImpl extends AbstractEdmEntityContainer {
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return helper == null ? null : helper.getAnnotation(term);
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return helper == null ? Collections.<EdmAnnotation>emptyList() : helper.getAnnotations();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityTypeImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityTypeImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityTypeImpl.java
index 3cd09cb..54af86f 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityTypeImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityTypeImpl.java
@@ -32,6 +32,7 @@ import org.apache.olingo.commons.api.edm.EdmEntityType;
 import org.apache.olingo.commons.api.edm.EdmKeyPropertyRef;
 import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
 import org.apache.olingo.commons.api.edm.EdmProperty;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.core.edm.AbstractEdmEntityType;
 import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
@@ -100,6 +101,11 @@ public class EdmEntityTypeImpl extends AbstractEdmEntityType {
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return annotationHelper.getAnnotation(term);
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return annotationHelper.getAnnotations();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java
index 4a68b9b..7317199 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java
@@ -27,6 +27,7 @@ import org.apache.olingo.commons.api.edm.EdmAnnotation;
 import org.apache.olingo.commons.api.edm.EdmEntityContainer;
 import org.apache.olingo.commons.api.edm.EdmFunction;
 import org.apache.olingo.commons.api.edm.EdmFunctionImport;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
 
@@ -76,6 +77,11 @@ public class EdmFunctionImportImpl extends EdmOperationImportImpl implements Edm
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return helper.getAnnotation(term);
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return helper.getAnnotations();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmMemberImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmMemberImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmMemberImpl.java
index 39806a4..389e67b 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmMemberImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmMemberImpl.java
@@ -24,6 +24,7 @@ import org.apache.olingo.client.api.edm.xml.Member;
 import org.apache.olingo.client.core.edm.xml.v4.MemberImpl;
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmAnnotation;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.core.edm.AbstractEdmMember;
 import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
@@ -40,6 +41,11 @@ public class EdmMemberImpl extends AbstractEdmMember {
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return helper == null ? null : helper.getAnnotation(term);
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return helper == null ? Collections.<EdmAnnotation>emptyList() : helper.getAnnotations();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmNavigationPropertyImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmNavigationPropertyImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmNavigationPropertyImpl.java
index 9939364..6aa3476 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmNavigationPropertyImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmNavigationPropertyImpl.java
@@ -26,6 +26,7 @@ import org.apache.olingo.client.api.edm.xml.v4.ReferentialConstraint;
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmAnnotation;
 import org.apache.olingo.commons.api.edm.EdmReferentialConstraint;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.core.edm.AbstractEdmNavigationProperty;
 import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
@@ -110,6 +111,11 @@ public class EdmNavigationPropertyImpl extends AbstractEdmNavigationProperty {
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return helper.getAnnotation(term);
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return helper.getAnnotations();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImpl.java
index c0d3471..3643dbd 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImpl.java
@@ -26,6 +26,7 @@ import org.apache.olingo.client.api.edm.xml.v4.Action;
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmAnnotation;
 import org.apache.olingo.commons.api.edm.EdmParameter;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 import org.apache.olingo.commons.core.edm.AbstractEdmOperation;
@@ -94,6 +95,11 @@ public abstract class EdmOperationImpl extends AbstractEdmOperation {
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return helper.getAnnotation(term);
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return helper.getAnnotations();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImportImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImportImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImportImpl.java
index f415246..c3ec0d2 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImportImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImportImpl.java
@@ -23,6 +23,7 @@ import java.util.List;
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmAnnotation;
 import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.Target;
 import org.apache.olingo.commons.core.edm.AbstractEdmOperationImport;
 
@@ -35,6 +36,11 @@ public abstract class EdmOperationImportImpl extends AbstractEdmOperationImport
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return null;
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return Collections.<EdmAnnotation>emptyList();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmParameterImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmParameterImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmParameterImpl.java
index 68388b3..6cef92d 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmParameterImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmParameterImpl.java
@@ -25,6 +25,7 @@ import org.apache.olingo.client.api.edm.xml.v4.Parameter;
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmAnnotation;
 import org.apache.olingo.commons.api.edm.EdmMapping;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.geo.SRID;
 import org.apache.olingo.commons.core.edm.AbstractEdmParameter;
@@ -86,6 +87,11 @@ public class EdmParameterImpl extends AbstractEdmParameter {
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return helper == null ? null : helper.getAnnotation(term);
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return helper == null ? Collections.<EdmAnnotation>emptyList() : helper.getAnnotations();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmPropertyImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmPropertyImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmPropertyImpl.java
index 3928c64..6654497 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmPropertyImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmPropertyImpl.java
@@ -26,6 +26,7 @@ import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmAnnotation;
 import org.apache.olingo.commons.api.edm.EdmMapping;
 import org.apache.olingo.commons.api.edm.EdmProperty;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.geo.SRID;
 import org.apache.olingo.commons.core.edm.AbstractEdmProperty;
@@ -111,6 +112,11 @@ public class EdmPropertyImpl extends AbstractEdmProperty implements EdmProperty
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return helper == null ? null : helper.getAnnotation(term);
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return helper == null ? Collections.<EdmAnnotation>emptyList() : helper.getAnnotations();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmReferentialConstraintImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmReferentialConstraintImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmReferentialConstraintImpl.java
index 7237854..5d179af 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmReferentialConstraintImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmReferentialConstraintImpl.java
@@ -22,6 +22,7 @@ import java.util.List;
 import org.apache.olingo.client.api.edm.xml.v4.ReferentialConstraint;
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmAnnotation;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.core.edm.AbstractEdmReferentialConstraint;
 import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
 
@@ -35,6 +36,11 @@ public class EdmReferentialConstraintImpl extends AbstractEdmReferentialConstrai
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return helper.getAnnotation(term);
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return helper.getAnnotations();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmSchemaImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmSchemaImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmSchemaImpl.java
index 17d6824..12107ba 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmSchemaImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmSchemaImpl.java
@@ -224,7 +224,7 @@ public class EdmSchemaImpl extends AbstractEdmSchema {
       final List<Term> providerTerms = ((org.apache.olingo.client.api.edm.xml.v4.Schema) schema).getTerms();
       if (providerTerms != null) {
         for (Term term : providerTerms) {
-          terms.add(new EdmTermImpl(edm, term));
+          terms.add(new EdmTermImpl(edm, getNamespace(), term));
         }
       }
     }
@@ -260,4 +260,17 @@ public class EdmSchemaImpl extends AbstractEdmSchema {
     }
     return annotations;
   }
+
+  @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    EdmAnnotation result = null;
+    for (EdmAnnotation annotation : getAnnotations()) {
+      if (term.getFullQualifiedName().equals(annotation.getTerm().getFullQualifiedName())) {
+        result = annotation;
+      }
+    }
+
+    return result;
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTermImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTermImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTermImpl.java
index a779369..8bf4be0 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTermImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTermImpl.java
@@ -42,6 +42,8 @@ public class EdmTermImpl extends EdmNamedImpl implements EdmTerm {
 
   private final Term term;
 
+  private final FullQualifiedName fqn;
+
   private final EdmTypeInfo typeInfo;
 
   private final EdmAnnotationHelper helper;
@@ -52,17 +54,18 @@ public class EdmTermImpl extends EdmNamedImpl implements EdmTerm {
 
   private List<Class<?>> appliesTo;
 
-  public EdmTermImpl(final Edm edm, final Term term) {
+  public EdmTermImpl(final Edm edm, final String namespace, final Term term) {
     super(edm, term.getName());
 
     this.term = term;
+    this.fqn = new FullQualifiedName(namespace, term.getName());
     this.typeInfo = new EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(term.getType()).build();
     this.helper = new EdmAnnotationHelperImpl(edm, term);
   }
 
   @Override
   public FullQualifiedName getFullQualifiedName() {
-    return typeInfo.getFullQualifiedName();
+    return fqn;
   }
 
   @Override
@@ -145,7 +148,7 @@ public class EdmTermImpl extends EdmNamedImpl implements EdmTerm {
 
   @Override
   public FullQualifiedName getAnnotationsTargetFQN() {
-    return typeInfo.getFullQualifiedName();
+    return getFullQualifiedName();
   }
 
   @Override
@@ -154,6 +157,11 @@ public class EdmTermImpl extends EdmNamedImpl implements EdmTerm {
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return helper.getAnnotation(term);
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return helper.getAnnotations();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTypeDefinitionImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTypeDefinitionImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTypeDefinitionImpl.java
index 1292151..8e0e05c 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTypeDefinitionImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTypeDefinitionImpl.java
@@ -25,6 +25,7 @@ import org.apache.olingo.commons.api.edm.EdmAnnotation;
 import org.apache.olingo.commons.api.edm.EdmException;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.EdmTypeDefinition;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
@@ -86,6 +87,11 @@ public class EdmTypeDefinitionImpl extends AbstractEdmTypeDefinition implements
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return helper.getAnnotation(term);
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return helper.getAnnotations();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmEntitySetProxy.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmEntitySetProxy.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmEntitySetProxy.java
index 079828f..be15323 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmEntitySetProxy.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmEntitySetProxy.java
@@ -35,6 +35,7 @@ import org.apache.olingo.commons.api.edm.EdmEntityContainer;
 import org.apache.olingo.commons.api.edm.EdmEntitySet;
 import org.apache.olingo.commons.api.edm.EdmException;
 import org.apache.olingo.commons.api.edm.EdmNavigationPropertyBinding;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.core.edm.AbstractEdmBindingTarget;
 
@@ -120,6 +121,11 @@ public class EdmEntitySetProxy extends AbstractEdmBindingTarget implements EdmEn
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return null;
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return Collections.<EdmAnnotation>emptyList();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmNavigationPropertyProxy.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmNavigationPropertyProxy.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmNavigationPropertyProxy.java
index 77e2f59..ac16e67 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmNavigationPropertyProxy.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmNavigationPropertyProxy.java
@@ -34,6 +34,7 @@ import org.apache.olingo.commons.api.edm.EdmAnnotation;
 import org.apache.olingo.commons.api.edm.EdmEntityType;
 import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
 import org.apache.olingo.commons.api.edm.EdmReferentialConstraint;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.core.edm.AbstractEdmNavigationProperty;
 
@@ -175,6 +176,11 @@ public class EdmNavigationPropertyProxy extends AbstractEdmNavigationProperty {
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return null;
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return Collections.<EdmAnnotation>emptyList();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3b366002/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmOperationProxy.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmOperationProxy.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmOperationProxy.java
index b2dfa4b..9410bb5 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmOperationProxy.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmOperationProxy.java
@@ -31,6 +31,7 @@ import org.apache.olingo.client.core.edm.EdmReturnTypeImpl;
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmAnnotation;
 import org.apache.olingo.commons.api.edm.EdmParameter;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 import org.apache.olingo.commons.core.edm.AbstractEdmOperation;
@@ -78,6 +79,11 @@ public class EdmOperationProxy extends AbstractEdmOperation {
   }
 
   @Override
+  public EdmAnnotation getAnnotation(final EdmTerm term) {
+    return null;
+  }
+
+  @Override
   public List<EdmAnnotation> getAnnotations() {
     return Collections.<EdmAnnotation>emptyList();
   }