You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2013/12/10 17:07:44 UTC

git commit: [OLINGO-79] EdmAnnotationInterfaces now available

Updated Branches:
  refs/heads/master 355513037 -> a6fcc8427


[OLINGO-79] EdmAnnotationInterfaces now available


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

Branch: refs/heads/master
Commit: a6fcc8427cf87b598ba4cd27d271dd8114b49514
Parents: 3555130
Author: Christian Amend <ch...@apache.org>
Authored: Tue Dec 10 17:05:15 2013 +0100
Committer: Christian Amend <ch...@apache.org>
Committed: Tue Dec 10 17:07:27 2013 +0100

----------------------------------------------------------------------
 .../odata2/api/edm/EdmAnnotationElement.java    |   7 +-
 .../olingo/odata2/api/edm/EdmAnnotations.java   |   4 +-
 .../olingo/odata2/api/edm/EdmAssociation.java   |   2 +-
 .../odata2/api/edm/EdmAssociationEnd.java       |   2 +-
 .../odata2/api/edm/EdmAssociationSet.java       |   2 +-
 .../odata2/api/edm/EdmAssociationSetEnd.java    |   2 +-
 .../odata2/api/edm/EdmEntityContainer.java      |   2 +-
 .../olingo/odata2/api/edm/EdmEntitySet.java     |   2 +-
 .../odata2/api/edm/EdmFunctionImport.java       |   2 +-
 .../odata2/api/edm/EdmNavigationProperty.java   |   2 +-
 .../olingo/odata2/api/edm/EdmParameter.java     |   2 +-
 .../olingo/odata2/api/edm/EdmProperty.java      |   2 +-
 .../api/edm/EdmReferentialConstraint.java       |   2 +-
 .../odata2/api/edm/EdmStructuralType.java       |   2 +-
 .../odata2/api/edm/provider/AliasInfo.java      |   4 +-
 .../api/edm/provider/AnnotationElement.java     |  10 +-
 .../olingo/odata2/api/edm/provider/Mapping.java |   9 +-
 .../provider/EdmAnnotationElementImplProv.java  |  59 +++++++++
 .../edm/provider/EdmAnnotationsImplProv.java    |  43 ++++---
 .../edm/provider/EdmAssociationEndImplProv.java |   8 +-
 .../edm/provider/EdmAssociationImplProv.java    |   7 +-
 .../provider/EdmAssociationSetEndImplProv.java  |   6 +-
 .../edm/provider/EdmAssociationSetImplProv.java |   8 +-
 .../edm/provider/EdmComplexTypeImplProv.java    |   7 --
 .../provider/EdmEntityContainerImplProv.java    |   8 +-
 .../core/edm/provider/EdmEntitySetImplProv.java |   6 +-
 .../edm/provider/EdmEntityTypeImplProv.java     |   6 -
 .../edm/provider/EdmFunctionImportImplProv.java |   7 +-
 .../provider/EdmNavigationPropertyImplProv.java |   8 +-
 .../core/edm/provider/EdmParameterImplProv.java |   6 +-
 .../core/edm/provider/EdmPropertyImplProv.java  |   6 +-
 .../EdmReferentialConstraintImplProv.java       |  15 ++-
 .../EdmReferentialConstraintRoleImplProv.java   |  12 +-
 .../edm/provider/EdmStructuralTypeImplProv.java |  11 ++
 .../odata2/core/edm/provider/EdmxProvider.java  |  10 +-
 .../core/ep/consumer/XmlMetadataConsumer.java   |  87 +++++++++----
 .../provider/EdmAnnotationsImplProvTest.java    |  20 ++-
 .../core/edm/provider/EdmImplProvTest.java      |   8 +-
 .../core/edm/provider/EdmxProviderTest.java     | 123 +++++++++++++++++++
 39 files changed, 409 insertions(+), 120 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAnnotationElement.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAnnotationElement.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAnnotationElement.java
index 5dabffd..b45b8d6 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAnnotationElement.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAnnotationElement.java
@@ -20,9 +20,6 @@ package org.apache.olingo.odata2.api.edm;
 
 import java.util.List;
 
-import org.apache.olingo.odata2.api.edm.provider.AnnotationAttribute;
-import org.apache.olingo.odata2.api.edm.provider.AnnotationElement;
-
 /**
  * @org.apache.olingo.odata2.DoNotImplement
  * A CSDL AnnotationElement element
@@ -64,13 +61,13 @@ public interface EdmAnnotationElement {
    * 
    * @return child elements of this {@link EdmAnnotationElement}
    */
-  List<AnnotationElement> getChildElements();
+  List<EdmAnnotationElement> getChildElements();
 
   /**
    * Get the attributes of this custom element
    * 
    * @return the attributes of this {@link EdmAnnotationElement}
    */
-  List<AnnotationAttribute> getAttributes();
+  List<EdmAnnotationAttribute> getAttributes();
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAnnotations.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAnnotations.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAnnotations.java
index bb0b96b..ca18f38 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAnnotations.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAnnotations.java
@@ -32,7 +32,7 @@ public interface EdmAnnotations {
    * 
    * @return List of {@link EdmAnnotationElement}
    */
-  List<? extends EdmAnnotationElement> getAnnotationElements();
+  List<EdmAnnotationElement> getAnnotationElements();
 
   /**
    * Get annotation element by full qualified name
@@ -49,7 +49,7 @@ public interface EdmAnnotations {
    * 
    * @return List of {@link EdmAnnotationAttribute}
    */
-  List<? extends EdmAnnotationAttribute> getAnnotationAttributes();
+  List<EdmAnnotationAttribute> getAnnotationAttributes();
 
   /**
    * Get annotation attribute by full qualified name

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociation.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociation.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociation.java
index 5f7c1bc..7c09779 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociation.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociation.java
@@ -25,7 +25,7 @@ package org.apache.olingo.odata2.api.edm;
  * <p>EdmAssociation defines the relationship of two entity types.
  * 
  */
-public interface EdmAssociation extends EdmType {
+public interface EdmAssociation extends EdmType, EdmAnnotatable {
 
   /**
    * Get the {@link EdmAssociationEnd} by role

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociationEnd.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociationEnd.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociationEnd.java
index 8dc439c..d228f2f 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociationEnd.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociationEnd.java
@@ -25,7 +25,7 @@ package org.apache.olingo.odata2.api.edm;
  * <p>EdmAssociationEnd defines one side of the relationship of two entity types.
  * 
  */
-public interface EdmAssociationEnd {
+public interface EdmAssociationEnd extends EdmAnnotatable {
 
   /**
    * @return the role of this {@link EdmAssociationEnd} as a String.

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociationSet.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociationSet.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociationSet.java
index 0dd20ca..9eb408a 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociationSet.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociationSet.java
@@ -25,7 +25,7 @@ package org.apache.olingo.odata2.api.edm;
  * <p>EdmAssociationSet defines the relationship of two entity sets.
  * 
  */
-public interface EdmAssociationSet extends EdmNamed {
+public interface EdmAssociationSet extends EdmNamed, EdmAnnotatable {
 
   /**
    * Get the association

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociationSetEnd.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociationSetEnd.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociationSetEnd.java
index 3acb0a1..84b4fea 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociationSetEnd.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmAssociationSetEnd.java
@@ -25,7 +25,7 @@ package org.apache.olingo.odata2.api.edm;
  * <p>EdmAssociationSetEnd defines one side of the relationship of two entity sets.
  * 
  */
-public interface EdmAssociationSetEnd {
+public interface EdmAssociationSetEnd extends EdmAnnotatable {
 
   /**
    * Get the role name

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmEntityContainer.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmEntityContainer.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmEntityContainer.java
index b953680..899bccb 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmEntityContainer.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmEntityContainer.java
@@ -25,7 +25,7 @@ package org.apache.olingo.odata2.api.edm;
  * <p>EdmEntityContainer hold the information of EntitySets, FunctionImports and AssociationSets contained
  * 
  */
-public interface EdmEntityContainer extends EdmNamed {
+public interface EdmEntityContainer extends EdmNamed, EdmAnnotatable {
 
   /**
    * @return <b>boolean</b> true if this is the default container

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmEntitySet.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmEntitySet.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmEntitySet.java
index f097be5..4bc5f76 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmEntitySet.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmEntitySet.java
@@ -24,7 +24,7 @@ package org.apache.olingo.odata2.api.edm;
  * <p>EdmEntitySet is the container for entity type instances as described in the OData protocol.
  * 
  */
-public interface EdmEntitySet extends EdmMappable, EdmNamed {
+public interface EdmEntitySet extends EdmMappable, EdmNamed, EdmAnnotatable {
 
   /**
    * Get the entity type

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmFunctionImport.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmFunctionImport.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmFunctionImport.java
index 6b5fa4f..2e9090f 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmFunctionImport.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmFunctionImport.java
@@ -32,7 +32,7 @@ import java.util.Collection;
  * <li>{@link EdmEntitySet}
  * 
  */
-public interface EdmFunctionImport extends EdmMappable, EdmNamed {
+public interface EdmFunctionImport extends EdmMappable, EdmNamed, EdmAnnotatable {
 
   /**
    * Get the parameter by name

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmNavigationProperty.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmNavigationProperty.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmNavigationProperty.java
index 293c009..1d718ab 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmNavigationProperty.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmNavigationProperty.java
@@ -25,7 +25,7 @@ package org.apache.olingo.odata2.api.edm;
  * <p>EdmNavigationProperty allows navigation from one entity type to another via a relationship.
  * 
  */
-public interface EdmNavigationProperty extends EdmTyped, EdmMappable {
+public interface EdmNavigationProperty extends EdmTyped, EdmMappable, EdmAnnotatable {
 
   /**
    * Get the relationship of the navigation property

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmParameter.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmParameter.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmParameter.java
index fc1d6b2..4a85a77 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmParameter.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmParameter.java
@@ -25,6 +25,6 @@ package org.apache.olingo.odata2.api.edm;
  * in {@link org.apache.olingo.odata2.api.edm.provider.FunctionImport} or in the OData protocol.
  * 
  */
-public interface EdmParameter extends EdmElement {
+public interface EdmParameter extends EdmElement, EdmAnnotatable {
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmProperty.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmProperty.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmProperty.java
index a81367b..4dd42b1 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmProperty.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmProperty.java
@@ -24,7 +24,7 @@ package org.apache.olingo.odata2.api.edm;
  * @org.apache.olingo.odata2.DoNotImplement
  * 
  */
-public interface EdmProperty extends EdmElement {
+public interface EdmProperty extends EdmElement, EdmAnnotatable {
 
   /**
    * Get customizable feed mappings for this property

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmReferentialConstraint.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmReferentialConstraint.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmReferentialConstraint.java
index ffe51c6..8198616 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmReferentialConstraint.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmReferentialConstraint.java
@@ -23,7 +23,7 @@ package org.apache.olingo.odata2.api.edm;
  * A CSDL ReferentialConstraint element
  * 
  */
-public interface EdmReferentialConstraint {
+public interface EdmReferentialConstraint extends EdmAnnotatable {
 
   /**
    * Get the principal end element

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmStructuralType.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmStructuralType.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmStructuralType.java
index 9b92c5e..1752f67 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmStructuralType.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmStructuralType.java
@@ -26,7 +26,7 @@ import java.util.List;
  * <p>Complex types and entity types are described in the Conceptual Schema Definition of the OData protocol.
  * 
  */
-public interface EdmStructuralType extends EdmMappable, EdmType {
+public interface EdmStructuralType extends EdmMappable, EdmType, EdmAnnotatable {
 
   /**
    * Get property by name

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/AliasInfo.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/AliasInfo.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/AliasInfo.java
index 5bf09ca..20e57e1 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/AliasInfo.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/AliasInfo.java
@@ -37,7 +37,7 @@ public class AliasInfo {
    * @param alias
    * @return {@link AliasInfo} for method chaining
    */
-  public AliasInfo setAlias(String alias) {
+  public AliasInfo setAlias(final String alias) {
     this.alias = alias;
     return this;
   }
@@ -53,7 +53,7 @@ public class AliasInfo {
    * @param namespace
    * @return {@link AliasInfo} for method chaining
    */
-  public AliasInfo setNamespace(String namespace) {
+  public AliasInfo setNamespace(final String namespace) {
     this.namespace = namespace;
     return this;
   }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/AnnotationElement.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/AnnotationElement.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/AnnotationElement.java
index d1e0e4e..719d67f 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/AnnotationElement.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/AnnotationElement.java
@@ -20,13 +20,11 @@ package org.apache.olingo.odata2.api.edm.provider;
 
 import java.util.List;
 
-import org.apache.olingo.odata2.api.edm.EdmAnnotationElement;
-
 /**
  * Objects of this class represent an annotation element.
  * 
  */
-public class AnnotationElement implements EdmAnnotationElement {
+public class AnnotationElement {
 
   private String namespace;
   private String prefix;
@@ -35,32 +33,26 @@ public class AnnotationElement implements EdmAnnotationElement {
   private List<AnnotationElement> childElements;
   private List<AnnotationAttribute> attributes;
 
-  @Override
   public String getNamespace() {
     return namespace;
   }
 
-  @Override
   public String getPrefix() {
     return prefix;
   }
 
-  @Override
   public String getName() {
     return name;
   }
 
-  @Override
   public String getText() {
     return text;
   }
 
-  @Override
   public List<AnnotationElement> getChildElements() {
     return childElements;
   }
 
-  @Override
   public List<AnnotationAttribute> getAttributes() {
     return attributes;
   }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/Mapping.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/Mapping.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/Mapping.java
index 12a6166..d9e3453 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/Mapping.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/Mapping.java
@@ -46,7 +46,7 @@ public class Mapping implements EdmMapping {
   public Object getObject() {
     return object;
   }
-  
+
   @Override
   public String getMediaResourceSourceKey() {
     return mediaResourceSourceKey;
@@ -88,13 +88,13 @@ public class Mapping implements EdmMapping {
     this.object = object;
     return this;
   }
-  
+
   /**
    * Sets the key for the resource source key which is used for the lookup in the data map
    * @param mediaResourceSourceKey under which the source can be found in the data map
    * @return {@link Mapping} for method chaining
    */
-  public Mapping setMediaResourceSourceKey(String mediaResourceSourceKey) {
+  public Mapping setMediaResourceSourceKey(final String mediaResourceSourceKey) {
     this.mediaResourceSourceKey = mediaResourceSourceKey;
     return this;
   }
@@ -104,10 +104,9 @@ public class Mapping implements EdmMapping {
    * @param mediaResourceMimeTypeKey under which the mime type can be found in the data map
    * @return {@link Mapping} for method chaining
    */
-  public Mapping setMediaResourceMimeTypeKey(String mediaResourceMimeTypeKey) {
+  public Mapping setMediaResourceMimeTypeKey(final String mediaResourceMimeTypeKey) {
     this.mediaResourceMimeTypeKey = mediaResourceMimeTypeKey;
     return this;
   }
 
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAnnotationElementImplProv.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAnnotationElementImplProv.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAnnotationElementImplProv.java
new file mode 100644
index 0000000..fa01c0f
--- /dev/null
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAnnotationElementImplProv.java
@@ -0,0 +1,59 @@
+package org.apache.olingo.odata2.core.edm.provider;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.olingo.odata2.api.edm.EdmAnnotationAttribute;
+import org.apache.olingo.odata2.api.edm.EdmAnnotationElement;
+import org.apache.olingo.odata2.api.edm.provider.AnnotationElement;
+
+public class EdmAnnotationElementImplProv implements EdmAnnotationElement {
+
+  private AnnotationElement element;
+  ArrayList<EdmAnnotationElement> childElements;
+  List<EdmAnnotationAttribute> attributes;
+
+  public EdmAnnotationElementImplProv(final AnnotationElement element) {
+    this.element = element;
+  }
+
+  @Override
+  public String getName() {
+    return element.getName();
+  }
+
+  @Override
+  public String getNamespace() {
+    return element.getNamespace();
+  }
+
+  @Override
+  public String getPrefix() {
+    return element.getPrefix();
+  }
+
+  @Override
+  public String getText() {
+    return element.getText();
+  }
+
+  @Override
+  public List<EdmAnnotationElement> getChildElements() {
+    if (childElements == null && element.getChildElements() != null) {
+      childElements = new ArrayList<EdmAnnotationElement>();
+      for (AnnotationElement childElement : element.getChildElements()) {
+        childElements.add(new EdmAnnotationElementImplProv(childElement));
+      }
+    }
+    return childElements;
+  }
+
+  @Override
+  public List<EdmAnnotationAttribute> getAttributes() {
+    if (attributes == null && element.getAttributes() != null) {
+      attributes = new ArrayList<EdmAnnotationAttribute>();
+      attributes.addAll(element.getAttributes());
+    }
+    return attributes;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAnnotationsImplProv.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAnnotationsImplProv.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAnnotationsImplProv.java
index c4e7905..0b16828 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAnnotationsImplProv.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAnnotationsImplProv.java
@@ -18,7 +18,7 @@
  ******************************************************************************/
 package org.apache.olingo.odata2.core.edm.provider;
 
-import java.util.Iterator;
+import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.olingo.odata2.api.edm.EdmAnnotationAttribute;
@@ -29,29 +29,35 @@ import org.apache.olingo.odata2.api.edm.provider.AnnotationElement;
 
 public class EdmAnnotationsImplProv implements EdmAnnotations {
 
-  private List<AnnotationAttribute> annotationAttributes;
-  private List<? extends EdmAnnotationElement> annotationElements;
+  private List<EdmAnnotationAttribute> annotationAttributes;
+  private List<EdmAnnotationElement> annotationElements;
 
   public EdmAnnotationsImplProv(final List<AnnotationAttribute> annotationAttributes,
       final List<AnnotationElement> annotationElements) {
-    this.annotationAttributes = annotationAttributes;
-    this.annotationElements = annotationElements;
+    if (annotationAttributes != null) {
+      this.annotationAttributes = new ArrayList<EdmAnnotationAttribute>();
+      this.annotationAttributes.addAll(annotationAttributes);
+    }
+    if (annotationElements != null) {
+      this.annotationElements = new ArrayList<EdmAnnotationElement>();
+      for (AnnotationElement element : annotationElements) {
+        EdmAnnotationElement edmElement = new EdmAnnotationElementImplProv(element);
+        this.annotationElements.add(edmElement);
+      }
+    }
   }
 
   @Override
-  public List<? extends EdmAnnotationElement> getAnnotationElements() {
+  public List<EdmAnnotationElement> getAnnotationElements() {
     return annotationElements;
   }
 
   @Override
   public EdmAnnotationElement getAnnotationElement(final String name, final String namespace) {
     if (annotationElements != null) {
-      Iterator<? extends EdmAnnotationElement> annotationElementIterator = annotationElements.iterator();
-
-      while (annotationElementIterator.hasNext()) {
-        EdmAnnotationElement annotationElement = annotationElementIterator.next();
-        if (annotationElement.getName().equals(name) && annotationElement.getNamespace().equals(namespace)) {
-          return annotationElement;
+      for (EdmAnnotationElement element : annotationElements) {
+        if (element.getName().equals(name) && element.getNamespace().equals(namespace)) {
+          return element;
         }
       }
     }
@@ -59,19 +65,16 @@ public class EdmAnnotationsImplProv implements EdmAnnotations {
   }
 
   @Override
-  public List<? extends EdmAnnotationAttribute> getAnnotationAttributes() {
+  public List<EdmAnnotationAttribute> getAnnotationAttributes() {
     return annotationAttributes;
   }
 
   @Override
   public EdmAnnotationAttribute getAnnotationAttribute(final String name, final String namespace) {
-    if (annotationElements != null) {
-      Iterator<? extends EdmAnnotationAttribute> annotationAttributesIterator = annotationAttributes.iterator();
-
-      while (annotationAttributesIterator.hasNext()) {
-        EdmAnnotationAttribute annotationAttribute = annotationAttributesIterator.next();
-        if (annotationAttribute.getName().equals(name) && annotationAttribute.getNamespace().equals(namespace)) {
-          return annotationAttribute;
+    if (annotationAttributes != null) {
+      for (EdmAnnotationAttribute attribute : annotationAttributes) {
+        if (attribute.getName().equals(name) && attribute.getNamespace().equals(namespace)) {
+          return attribute;
         }
       }
     }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationEndImplProv.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationEndImplProv.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationEndImplProv.java
index 1abd033..b0d0fbd 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationEndImplProv.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationEndImplProv.java
@@ -31,6 +31,7 @@ public class EdmAssociationEndImplProv implements EdmAssociationEnd, EdmAnnotata
 
   private EdmImplProv edm;
   private AssociationEnd associationEnd;
+  private EdmAnnotations annotations;
 
   public EdmAssociationEndImplProv(final EdmImplProv edm, final AssociationEnd associationEnd) throws EdmException {
     this.edm = edm;
@@ -59,7 +60,10 @@ public class EdmAssociationEndImplProv implements EdmAssociationEnd, EdmAnnotata
 
   @Override
   public EdmAnnotations getAnnotations() throws EdmException {
-    return new EdmAnnotationsImplProv(associationEnd.getAnnotationAttributes(), associationEnd.getAnnotationElements());
+    if (annotations == null) {
+      annotations =
+          new EdmAnnotationsImplProv(associationEnd.getAnnotationAttributes(), associationEnd.getAnnotationElements());
+    }
+    return annotations;
   }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationImplProv.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationImplProv.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationImplProv.java
index 54942df..01579e6 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationImplProv.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationImplProv.java
@@ -34,6 +34,7 @@ public class EdmAssociationImplProv extends EdmNamedImplProv implements EdmAssoc
 
   private Association association;
   private String namespace;
+  private EdmAnnotations annotations;
 
   public EdmAssociationImplProv(final EdmImplProv edm, final Association association, final String namespace)
       throws EdmException {
@@ -68,7 +69,11 @@ public class EdmAssociationImplProv extends EdmNamedImplProv implements EdmAssoc
 
   @Override
   public EdmAnnotations getAnnotations() throws EdmException {
-    return new EdmAnnotationsImplProv(association.getAnnotationAttributes(), association.getAnnotationElements());
+    if (annotations == null) {
+      annotations =
+          new EdmAnnotationsImplProv(association.getAnnotationAttributes(), association.getAnnotationElements());
+    }
+    return annotations;
   }
 
   public EdmMultiplicity getEndMultiplicity(final String role) {

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationSetEndImplProv.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationSetEndImplProv.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationSetEndImplProv.java
index 58d07c4..43e559b 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationSetEndImplProv.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationSetEndImplProv.java
@@ -30,6 +30,7 @@ public class EdmAssociationSetEndImplProv implements EdmAssociationSetEnd, EdmAn
   private EdmEntitySet entitySet;
   private String role;
   private AssociationSetEnd end;
+  private EdmAnnotations annotations;
 
   public EdmAssociationSetEndImplProv(final AssociationSetEnd end, final EdmEntitySet entitySet) throws EdmException {
     this.end = end;
@@ -49,6 +50,9 @@ public class EdmAssociationSetEndImplProv implements EdmAssociationSetEnd, EdmAn
 
   @Override
   public EdmAnnotations getAnnotations() throws EdmException {
-    return new EdmAnnotationsImplProv(end.getAnnotationAttributes(), end.getAnnotationElements());
+    if (annotations == null) {
+      annotations = new EdmAnnotationsImplProv(end.getAnnotationAttributes(), end.getAnnotationElements());
+    }
+    return annotations;
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationSetImplProv.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationSetImplProv.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationSetImplProv.java
index 88ef9da..38fe549 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationSetImplProv.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmAssociationSetImplProv.java
@@ -33,6 +33,7 @@ public class EdmAssociationSetImplProv extends EdmNamedImplProv implements EdmAs
 
   private AssociationSet associationSet;
   private EdmEntityContainer edmEntityContainer;
+  private EdmAnnotations annotations;
 
   public EdmAssociationSetImplProv(final EdmImplProv edm, final AssociationSet associationSet,
       final EdmEntityContainer edmEntityContainer) throws EdmException {
@@ -78,7 +79,10 @@ public class EdmAssociationSetImplProv extends EdmNamedImplProv implements EdmAs
 
   @Override
   public EdmAnnotations getAnnotations() throws EdmException {
-    return new EdmAnnotationsImplProv(associationSet.getAnnotationAttributes(), associationSet.getAnnotationElements());
+    if (annotations == null) {
+      annotations =
+          new EdmAnnotationsImplProv(associationSet.getAnnotationAttributes(), associationSet.getAnnotationElements());
+    }
+    return annotations;
   }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmComplexTypeImplProv.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmComplexTypeImplProv.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmComplexTypeImplProv.java
index 718047d..ad795ab 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmComplexTypeImplProv.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmComplexTypeImplProv.java
@@ -18,7 +18,6 @@
  ******************************************************************************/
 package org.apache.olingo.odata2.core.edm.provider;
 
-import org.apache.olingo.odata2.api.edm.EdmAnnotations;
 import org.apache.olingo.odata2.api.edm.EdmComplexType;
 import org.apache.olingo.odata2.api.edm.EdmException;
 import org.apache.olingo.odata2.api.edm.EdmTypeKind;
@@ -35,10 +34,4 @@ public class EdmComplexTypeImplProv extends EdmStructuralTypeImplProv implements
   public EdmComplexType getBaseType() throws EdmException {
     return (EdmComplexType) edmBaseType;
   }
-
-  @Override
-  public EdmAnnotations getAnnotations() throws EdmException {
-    return new EdmAnnotationsImplProv(structuralType.getAnnotationAttributes(), structuralType.getAnnotationElements());
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmEntityContainerImplProv.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmEntityContainerImplProv.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmEntityContainerImplProv.java
index 6df353a..be42b03 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmEntityContainerImplProv.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmEntityContainerImplProv.java
@@ -49,6 +49,7 @@ public class EdmEntityContainerImplProv implements EdmEntityContainer, EdmAnnota
   private Map<String, EdmFunctionImport> edmFunctionImports;
   private EdmEntityContainer edmExtendedEntityContainer;
   private boolean isDefaultContainer;
+  private EdmAnnotations annotations;
 
   public EdmEntityContainerImplProv(final EdmImplProv edm, final EntityContainerInfo entityContainer)
       throws EdmException {
@@ -184,7 +185,10 @@ public class EdmEntityContainerImplProv implements EdmEntityContainer, EdmAnnota
 
   @Override
   public EdmAnnotations getAnnotations() throws EdmException {
-    return new EdmAnnotationsImplProv(entityContainer.getAnnotationAttributes(), entityContainer
-        .getAnnotationElements());
+    if (annotations == null) {
+      annotations = new EdmAnnotationsImplProv(entityContainer.getAnnotationAttributes(),
+          entityContainer.getAnnotationElements());
+    }
+    return annotations;
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmEntitySetImplProv.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmEntitySetImplProv.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmEntitySetImplProv.java
index fda8fe8..f3b9970 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmEntitySetImplProv.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmEntitySetImplProv.java
@@ -36,6 +36,7 @@ public class EdmEntitySetImplProv extends EdmNamedImplProv implements EdmEntityS
   private EntitySet entitySet;
   private EdmEntityContainer edmEntityContainer;
   private EdmEntityType edmEntityType;
+  private EdmAnnotationsImplProv annotations;
 
   public EdmEntitySetImplProv(final EdmImplProv edm, final EntitySet entitySet,
       final EdmEntityContainer edmEntityContainer) throws EdmException {
@@ -78,7 +79,10 @@ public class EdmEntitySetImplProv extends EdmNamedImplProv implements EdmEntityS
 
   @Override
   public EdmAnnotations getAnnotations() throws EdmException {
-    return new EdmAnnotationsImplProv(entitySet.getAnnotationAttributes(), entitySet.getAnnotationElements());
+    if (annotations == null) {
+      annotations = new EdmAnnotationsImplProv(entitySet.getAnnotationAttributes(), entitySet.getAnnotationElements());
+    }
+    return annotations;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmEntityTypeImplProv.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmEntityTypeImplProv.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmEntityTypeImplProv.java
index 90b273b..3747371 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmEntityTypeImplProv.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmEntityTypeImplProv.java
@@ -23,7 +23,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.olingo.odata2.api.edm.EdmAnnotations;
 import org.apache.olingo.odata2.api.edm.EdmCustomizableFeedMappings;
 import org.apache.olingo.odata2.api.edm.EdmEntityType;
 import org.apache.olingo.odata2.api.edm.EdmException;
@@ -166,9 +165,4 @@ public class EdmEntityTypeImplProv extends EdmStructuralTypeImplProv implements
   protected EdmTyped createNavigationProperty(final NavigationProperty property) throws EdmException {
     return new EdmNavigationPropertyImplProv(edm, property);
   }
-
-  @Override
-  public EdmAnnotations getAnnotations() throws EdmException {
-    return new EdmAnnotationsImplProv(entityType.getAnnotationAttributes(), entityType.getAnnotationElements());
-  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmFunctionImportImplProv.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmFunctionImportImplProv.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmFunctionImportImplProv.java
index 9ec2f34..43997aa 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmFunctionImportImplProv.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmFunctionImportImplProv.java
@@ -48,6 +48,7 @@ public class EdmFunctionImportImplProv extends EdmNamedImplProv implements EdmFu
   private Map<String, EdmParameter> edmParameters;
   private Map<String, FunctionImportParameter> parameters;
   private List<String> parametersList;
+  private EdmAnnotations annotations;
 
   public EdmFunctionImportImplProv(final EdmImplProv edm, final FunctionImport functionImport,
       final EdmEntityContainer edmEntityContainer) throws EdmException {
@@ -133,7 +134,11 @@ public class EdmFunctionImportImplProv extends EdmNamedImplProv implements EdmFu
 
   @Override
   public EdmAnnotations getAnnotations() throws EdmException {
-    return new EdmAnnotationsImplProv(functionImport.getAnnotationAttributes(), functionImport.getAnnotationElements());
+    if (annotations == null) {
+      annotations =
+          new EdmAnnotationsImplProv(functionImport.getAnnotationAttributes(), functionImport.getAnnotationElements());
+    }
+    return annotations;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmNavigationPropertyImplProv.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmNavigationPropertyImplProv.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmNavigationPropertyImplProv.java
index 0e5f474..0235711 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmNavigationPropertyImplProv.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmNavigationPropertyImplProv.java
@@ -32,6 +32,7 @@ import org.apache.olingo.odata2.api.edm.provider.NavigationProperty;
 public class EdmNavigationPropertyImplProv extends EdmTypedImplProv implements EdmNavigationProperty, EdmAnnotatable {
 
   private NavigationProperty navigationProperty;
+  private EdmAnnotations annotations;
 
   public EdmNavigationPropertyImplProv(final EdmImplProv edm, final NavigationProperty property) throws EdmException {
     super(edm, property.getName(), null, null);
@@ -66,8 +67,11 @@ public class EdmNavigationPropertyImplProv extends EdmTypedImplProv implements E
 
   @Override
   public EdmAnnotations getAnnotations() throws EdmException {
-    return new EdmAnnotationsImplProv(navigationProperty.getAnnotationAttributes(), navigationProperty
-        .getAnnotationElements());
+    if (annotations == null) {
+      annotations = new EdmAnnotationsImplProv(navigationProperty.getAnnotationAttributes(),
+          navigationProperty.getAnnotationElements());
+    }
+    return annotations;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmParameterImplProv.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmParameterImplProv.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmParameterImplProv.java
index f92febc..4213856 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmParameterImplProv.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmParameterImplProv.java
@@ -32,6 +32,7 @@ import org.apache.olingo.odata2.core.edm.EdmSimpleTypeFacadeImpl;
 public class EdmParameterImplProv extends EdmElementImplProv implements EdmParameter, EdmAnnotatable {
 
   FunctionImportParameter parameter;
+  private EdmAnnotations annotations;
 
   public EdmParameterImplProv(final EdmImplProv edm, final FunctionImportParameter parameter) throws EdmException {
     super(edm, parameter.getName(), parameter.getType().getFullQualifiedName(), parameter.getFacets(), parameter
@@ -52,6 +53,9 @@ public class EdmParameterImplProv extends EdmElementImplProv implements EdmParam
 
   @Override
   public EdmAnnotations getAnnotations() throws EdmException {
-    return new EdmAnnotationsImplProv(parameter.getAnnotationAttributes(), parameter.getAnnotationElements());
+    if (annotations == null) {
+      annotations = new EdmAnnotationsImplProv(parameter.getAnnotationAttributes(), parameter.getAnnotationElements());
+    }
+    return annotations;
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmPropertyImplProv.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmPropertyImplProv.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmPropertyImplProv.java
index 8dcf075..be21316 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmPropertyImplProv.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmPropertyImplProv.java
@@ -29,6 +29,7 @@ import org.apache.olingo.odata2.api.edm.provider.Property;
 public abstract class EdmPropertyImplProv extends EdmElementImplProv implements EdmProperty, EdmAnnotatable {
 
   private Property property;
+  private EdmAnnotations annotations;
 
   public EdmPropertyImplProv(final EdmImplProv edm, final FullQualifiedName propertyName, final Property property)
       throws EdmException {
@@ -48,6 +49,9 @@ public abstract class EdmPropertyImplProv extends EdmElementImplProv implements
 
   @Override
   public EdmAnnotations getAnnotations() throws EdmException {
-    return new EdmAnnotationsImplProv(property.getAnnotationAttributes(), property.getAnnotationElements());
+    if (annotations == null) {
+      annotations = new EdmAnnotationsImplProv(property.getAnnotationAttributes(), property.getAnnotationElements());
+    }
+    return annotations;
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmReferentialConstraintImplProv.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmReferentialConstraintImplProv.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmReferentialConstraintImplProv.java
index a6a8286..68fdb9b 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmReferentialConstraintImplProv.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmReferentialConstraintImplProv.java
@@ -18,14 +18,17 @@
  ******************************************************************************/
 package org.apache.olingo.odata2.core.edm.provider;
 
+import org.apache.olingo.odata2.api.edm.EdmAnnotatable;
+import org.apache.olingo.odata2.api.edm.EdmAnnotations;
 import org.apache.olingo.odata2.api.edm.EdmException;
 import org.apache.olingo.odata2.api.edm.EdmReferentialConstraint;
 import org.apache.olingo.odata2.api.edm.EdmReferentialConstraintRole;
 import org.apache.olingo.odata2.api.edm.provider.ReferentialConstraint;
 import org.apache.olingo.odata2.api.edm.provider.ReferentialConstraintRole;
 
-public class EdmReferentialConstraintImplProv implements EdmReferentialConstraint {
+public class EdmReferentialConstraintImplProv implements EdmReferentialConstraint, EdmAnnotatable {
   private ReferentialConstraint referentialConstraint;
+  private EdmAnnotations annotations;
 
   public EdmReferentialConstraintImplProv(final ReferentialConstraint referentialConstraint) throws EdmException {
     this.referentialConstraint = referentialConstraint;
@@ -43,4 +46,14 @@ public class EdmReferentialConstraintImplProv implements EdmReferentialConstrain
     return new EdmReferentialConstraintRoleImplProv(dependent);
   }
 
+  @Override
+  public EdmAnnotations getAnnotations() throws EdmException {
+    if (annotations == null) {
+      annotations =
+          new EdmAnnotationsImplProv(referentialConstraint.getAnnotationAttributes(), referentialConstraint
+              .getAnnotationElements());
+    }
+    return annotations;
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmReferentialConstraintRoleImplProv.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmReferentialConstraintRoleImplProv.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmReferentialConstraintRoleImplProv.java
index d4def53..cd228ae 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmReferentialConstraintRoleImplProv.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmReferentialConstraintRoleImplProv.java
@@ -21,14 +21,17 @@ package org.apache.olingo.odata2.core.edm.provider;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.olingo.odata2.api.edm.EdmAnnotatable;
+import org.apache.olingo.odata2.api.edm.EdmAnnotations;
 import org.apache.olingo.odata2.api.edm.EdmException;
 import org.apache.olingo.odata2.api.edm.EdmReferentialConstraintRole;
 import org.apache.olingo.odata2.api.edm.provider.PropertyRef;
 import org.apache.olingo.odata2.api.edm.provider.ReferentialConstraintRole;
 
-public class EdmReferentialConstraintRoleImplProv implements EdmReferentialConstraintRole {
+public class EdmReferentialConstraintRoleImplProv implements EdmReferentialConstraintRole, EdmAnnotatable {
   private ReferentialConstraintRole role;
   private List<String> refNames;
+  private EdmAnnotations annotations;
 
   public EdmReferentialConstraintRoleImplProv(final ReferentialConstraintRole role) throws EdmException {
     this.role = role;
@@ -50,4 +53,11 @@ public class EdmReferentialConstraintRoleImplProv implements EdmReferentialConst
     return refNames;
   }
 
+  @Override
+  public EdmAnnotations getAnnotations() throws EdmException {
+    if (annotations == null) {
+      annotations = new EdmAnnotationsImplProv(role.getAnnotationAttributes(), role.getAnnotationElements());
+    }
+    return annotations;
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmStructuralTypeImplProv.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmStructuralTypeImplProv.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmStructuralTypeImplProv.java
index 08cb5af..8a8bcf5 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmStructuralTypeImplProv.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmStructuralTypeImplProv.java
@@ -25,6 +25,7 @@ import java.util.Map;
 
 import org.apache.olingo.odata2.api.edm.Edm;
 import org.apache.olingo.odata2.api.edm.EdmAnnotatable;
+import org.apache.olingo.odata2.api.edm.EdmAnnotations;
 import org.apache.olingo.odata2.api.edm.EdmException;
 import org.apache.olingo.odata2.api.edm.EdmMapping;
 import org.apache.olingo.odata2.api.edm.EdmStructuralType;
@@ -48,6 +49,7 @@ public abstract class EdmStructuralTypeImplProv extends EdmNamedImplProv impleme
   protected Map<String, EdmTyped> edmProperties;
   private Map<String, Property> properties;
   private List<String> edmPropertyNames;
+  private EdmAnnotations annotations;
 
   public EdmStructuralTypeImplProv(final EdmImplProv edm, final ComplexType structuralType,
       final EdmTypeKind edmTypeKind, final String namespace) throws EdmException {
@@ -170,4 +172,13 @@ public abstract class EdmStructuralTypeImplProv extends EdmNamedImplProv impleme
       return null;
     }
   }
+
+  @Override
+  public EdmAnnotations getAnnotations() throws EdmException {
+    if (annotations == null) {
+      annotations =
+          new EdmAnnotationsImplProv(structuralType.getAnnotationAttributes(), structuralType.getAnnotationElements());
+    }
+    return annotations;
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmxProvider.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmxProvider.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmxProvider.java
index dc11eff..f7aba8f 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmxProvider.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/provider/EdmxProvider.java
@@ -173,16 +173,16 @@ public class EdmxProvider extends EdmProvider {
   public List<Schema> getSchemas() throws ODataException {
     return dataServices.getSchemas();
   }
-  
+
   @Override
-  public List<AliasInfo> getAliasInfos(){
+  public List<AliasInfo> getAliasInfos() {
     List<AliasInfo> aliasInfos = new ArrayList<AliasInfo>();
-    for(Schema schema : dataServices.getSchemas()){
-      if(schema.getAlias() != null){
+    for (Schema schema : dataServices.getSchemas()) {
+      if (schema.getAlias() != null) {
         aliasInfos.add(new AliasInfo().setAlias(schema.getAlias()).setNamespace(schema.getNamespace()));
       }
     }
-    
+
     return aliasInfos;
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumer.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumer.java
index 7e893c4..f51bf33 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumer.java
@@ -160,8 +160,11 @@ public class XmlMetadataConsumer {
     if (schema.getAlias() != null) {
       aliasNamespaceMap.put(schema.getAlias(), schema.getNamespace());
     }
+    if (!annotationElements.isEmpty()) {
+      schema.setAnnotationElements(annotationElements);
+    }
     schema.setUsings(usings).setEntityTypes(entityTypes).setComplexTypes(complexTypes).setAssociations(associations)
-        .setEntityContainers(entityContainers).setAnnotationElements(annotationElements);
+        .setEntityContainers(entityContainers);
     return schema;
   }
 
@@ -187,7 +190,9 @@ public class XmlMetadataConsumer {
         annotationElements.add(readAnnotationElement(reader));
       }
     }
-    using.setAnnotationElements(annotationElements);
+    if (!annotationElements.isEmpty()) {
+      using.setAnnotationElements(annotationElements);
+    }
 
     if (using.getAlias() != null) {
       aliasNamespaceMap.put(using.getAlias(), using.getNamespace());
@@ -231,8 +236,10 @@ public class XmlMetadataConsumer {
         }
       }
     }
-    container.setEntitySets(entitySets).setAssociationSets(associationSets).setFunctionImports(functionImports)
-        .setAnnotationElements(annotationElements);
+    if (!annotationElements.isEmpty()) {
+      container.setAnnotationElements(annotationElements);
+    }
+    container.setEntitySets(entitySets).setAssociationSets(associationSets).setFunctionImports(functionImports);
 
     containerMap.put(new FullQualifiedName(currentNamespace, container.getName()), container);
     return container;
@@ -275,7 +282,10 @@ public class XmlMetadataConsumer {
         }
       }
     }
-    function.setParameters(functionParameters).setAnnotationElements(annotationElements);
+    if (!annotationElements.isEmpty()) {
+      function.setAnnotationElements(annotationElements);
+    }
+    function.setParameters(functionParameters);
     return function;
   }
 
@@ -303,7 +313,9 @@ public class XmlMetadataConsumer {
         annotationElements.add(readAnnotationElement(reader));
       }
     }
-    functionParameter.setAnnotationElements(annotationElements);
+    if (!annotationElements.isEmpty()) {
+      functionParameter.setAnnotationElements(annotationElements);
+    }
     return functionParameter;
   }
 
@@ -346,7 +358,9 @@ public class XmlMetadataConsumer {
     } else {
       associationSet.setEnd1(ends.get(0)).setEnd2(ends.get(1));
     }
-    associationSet.setAnnotationElements(annotationElements);
+    if (!annotationElements.isEmpty()) {
+      associationSet.setAnnotationElements(annotationElements);
+    }
     return associationSet;
   }
 
@@ -373,7 +387,9 @@ public class XmlMetadataConsumer {
         annotationElements.add(readAnnotationElement(reader));
       }
     }
-    entitySet.setAnnotationElements(annotationElements);
+    if (!annotationElements.isEmpty()) {
+      entitySet.setAnnotationElements(annotationElements);
+    }
     return entitySet;
   }
 
@@ -405,9 +421,10 @@ public class XmlMetadataConsumer {
       throw new EntityProviderException(EntityProviderException.ILLEGAL_ARGUMENT
           .addContent("Count of association ends should be 2"));
     }
-
-    association.setEnd1(associationEnds.get(0)).setEnd2(associationEnds.get(1)).setAnnotationElements(
-        annotationElements);
+    if (!annotationElements.isEmpty()) {
+      association.setAnnotationElements(annotationElements);
+    }
+    association.setEnd1(associationEnds.get(0)).setEnd2(associationEnds.get(1));
     associationsMap.put(new FullQualifiedName(currentNamespace, association.getName()), association);
     return association;
   }
@@ -438,7 +455,9 @@ public class XmlMetadataConsumer {
         }
       }
     }
-    refConstraint.setAnnotationElements(annotationElements);
+    if (!annotationElements.isEmpty()) {
+      refConstraint.setAnnotationElements(annotationElements);
+    }
     return refConstraint;
   }
 
@@ -463,7 +482,10 @@ public class XmlMetadataConsumer {
         }
       }
     }
-    rcRole.setPropertyRefs(propertyRefs).setAnnotationElements(annotationElements);
+    if (!annotationElements.isEmpty()) {
+      rcRole.setAnnotationElements(annotationElements);
+    }
+    rcRole.setPropertyRefs(propertyRefs);
     return rcRole;
   }
 
@@ -497,7 +519,10 @@ public class XmlMetadataConsumer {
         }
       }
     }
-    complexType.setProperties(properties).setAnnotationElements(annotationElements);
+    if (!annotationElements.isEmpty()) {
+      complexType.setAnnotationElements(annotationElements);
+    }
+    complexType.setProperties(properties);
     if (complexType.getName() != null) {
       FullQualifiedName fqName = new FullQualifiedName(currentNamespace, complexType.getName());
       complexTypesMap.put(fqName, complexType);
@@ -550,8 +575,10 @@ public class XmlMetadataConsumer {
         extractNamespaces(reader);
       }
     }
-    entityType.setKey(key).setProperties(properties).setNavigationProperties(navProperties).setAnnotationElements(
-        annotationElements);
+    if (!annotationElements.isEmpty()) {
+      entityType.setAnnotationElements(annotationElements);
+    }
+    entityType.setKey(key).setProperties(properties).setNavigationProperties(navProperties);
     if (entityType.getName() != null) {
       FullQualifiedName fqName = new FullQualifiedName(currentNamespace, entityType.getName());
       entityTypesMap.put(fqName, entityType);
@@ -581,8 +608,11 @@ public class XmlMetadataConsumer {
         }
       }
     }
-    return new Key().setKeys(keys).setAnnotationElements(annotationElements).setAnnotationAttributes(
-        annotationAttributes);
+    Key key = new Key().setKeys(keys).setAnnotationAttributes(annotationAttributes);
+    if (!annotationElements.isEmpty()) {
+      key.setAnnotationElements(annotationElements);
+    }
+    return key;
   }
 
   private PropertyRef readPropertyRef(final XMLStreamReader reader) throws XMLStreamException, EntityProviderException {
@@ -599,7 +629,10 @@ public class XmlMetadataConsumer {
         annotationElements.add(readAnnotationElement(reader));
       }
     }
-    return propertyRef.setAnnotationElements(annotationElements);
+    if (!annotationElements.isEmpty()) {
+      propertyRef.setAnnotationElements(annotationElements);
+    }
+    return propertyRef;
   }
 
   private NavigationProperty readNavigationProperty(final XMLStreamReader reader) throws XMLStreamException,
@@ -631,7 +664,9 @@ public class XmlMetadataConsumer {
         annotationElements.add(readAnnotationElement(reader));
       }
     }
-    navProperty.setAnnotationElements(annotationElements);
+    if (!annotationElements.isEmpty()) {
+      navProperty.setAnnotationElements(annotationElements);
+    }
     navProperties.add(navProperty);
     return navProperty;
   }
@@ -664,7 +699,9 @@ public class XmlMetadataConsumer {
         annotationElements.add(readAnnotationElement(reader));
       }
     }
-    property.setAnnotationElements(annotationElements);
+    if (!annotationElements.isEmpty()) {
+      property.setAnnotationElements(annotationElements);
+    }
     return property;
   }
 
@@ -796,7 +833,9 @@ public class XmlMetadataConsumer {
         }
       }
     }
-    associationEnd.setAnnotationElements(annotationElements);
+    if (!annotationElements.isEmpty()) {
+      associationEnd.setAnnotationElements(annotationElements);
+    }
     return associationEnd;
   }
 
@@ -821,7 +860,9 @@ public class XmlMetadataConsumer {
       }
       annotationAttributes.add(annotationAttribute);
     }
-    aElement.setAttributes(annotationAttributes);
+    if (!annotationAttributes.isEmpty()) {
+      aElement.setAttributes(annotationAttributes);
+    }
     while (reader.hasNext() && !(reader.isEndElement() && aElement.getName() != null
         && aElement.getName().equals(reader.getLocalName()))) {
       reader.next();

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmAnnotationsImplProvTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmAnnotationsImplProvTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmAnnotationsImplProvTest.java
index a79ae2c..e94832b 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmAnnotationsImplProvTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmAnnotationsImplProvTest.java
@@ -30,15 +30,16 @@ import org.apache.olingo.odata2.api.edm.EdmAnnotationElement;
 import org.apache.olingo.odata2.api.edm.provider.AnnotationAttribute;
 import org.apache.olingo.odata2.api.edm.provider.AnnotationElement;
 import org.apache.olingo.odata2.testutil.fit.BaseTest;
-import org.junit.BeforeClass;
+import org.junit.Before;
 import org.junit.Test;
 
 public class EdmAnnotationsImplProvTest extends BaseTest {
 
-  private static EdmAnnotationsImplProv annotationsProvider;
+  private EdmAnnotationsImplProv annotationsProvider;
+  private EdmAnnotationsImplProv annotationsProviderWithNullEementAndAttributes;
 
-  @BeforeClass
-  public static void getEdmEntityContainerImpl() throws Exception {
+  @Before
+  public void getEdmEntityContainerImpl() throws Exception {
 
     List<AnnotationAttribute> annotationAttributes = new ArrayList<AnnotationAttribute>();
     AnnotationAttribute attribute =
@@ -53,6 +54,15 @@ public class EdmAnnotationsImplProvTest extends BaseTest {
 
     annotationsProvider = new EdmAnnotationsImplProv(annotationAttributes, annotationElements);
 
+    annotationsProviderWithNullEementAndAttributes = new EdmAnnotationsImplProv(null, null);
+  }
+
+  @Test
+  public void nullElmentsAndAttributes() {
+    assertNull(annotationsProviderWithNullEementAndAttributes.getAnnotationAttributes());
+    assertNull(annotationsProviderWithNullEementAndAttributes.getAnnotationElements());
+    assertNull(annotationsProviderWithNullEementAndAttributes.getAnnotationAttribute("name", "namespace"));
+    assertNull(annotationsProviderWithNullEementAndAttributes.getAnnotationElement("name", "namespace"));
   }
 
   @Test
@@ -108,6 +118,8 @@ public class EdmAnnotationsImplProvTest extends BaseTest {
     assertEquals("namespace", element.getNamespace());
     assertEquals("prefix", element.getPrefix());
     assertEquals("xmlData", element.getText());
+
+    assertNull(element.getChildElements());
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmImplProvTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmImplProvTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmImplProvTest.java
index d479bcd..28035c1 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmImplProvTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmImplProvTest.java
@@ -75,26 +75,26 @@ public class EdmImplProvTest extends BaseTest {
   }
 
   @Test
-  public void assertCallWithAliasResultsInRightCaching() throws Exception{
+  public void assertCallWithAliasResultsInRightCaching() throws Exception {
     EdmEntityType entityTypeWithAlias = edm.getEntityType("et1", "EntityType1");
     assertEquals("EntityType1", entityTypeWithAlias.getName());
     EdmEntityType entityType = edm.getEntityType("EntityType1Ns", "EntityType1");
     assertEquals("EntityType1", entityType.getName());
     assertEquals(entityType, entityTypeWithAlias);
-    
+
     EdmComplexType complexTypeWithAlias = edm.getComplexType("ct1", "ComplexType1");
     assertEquals("ComplexType1", complexTypeWithAlias.getName());
     EdmComplexType complexType = edm.getComplexType("ComplexType1Ns", "ComplexType1");
     assertEquals("ComplexType1", complexType.getName());
     assertEquals(complexType, complexTypeWithAlias);
-    
+
     EdmAssociation associationWithAlias = edm.getAssociation("at1", "Association1");
     assertEquals("Association1", associationWithAlias.getName());
     EdmAssociation association = edm.getAssociation("Association1Ns", "Association1");
     assertEquals("Association1", association.getName());
     assertEquals(association, associationWithAlias);
   }
-  
+
   @Test
   public void testEntityType() throws EdmException {
     EdmEntityType entityType = edm.getEntityType("EntityType1Ns", "EntityType1");

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a6fcc842/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmxProviderTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmxProviderTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmxProviderTest.java
index 22e4f4e..6a534c7 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmxProviderTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/provider/EdmxProviderTest.java
@@ -20,13 +20,19 @@ package org.apache.olingo.odata2.core.edm.provider;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 
 import java.io.InputStream;
 import java.util.List;
 
 import org.apache.olingo.odata2.api.edm.Edm;
+import org.apache.olingo.odata2.api.edm.EdmAnnotationAttribute;
+import org.apache.olingo.odata2.api.edm.EdmAnnotationElement;
+import org.apache.olingo.odata2.api.edm.EdmAnnotations;
 import org.apache.olingo.odata2.api.edm.EdmEntitySet;
 import org.apache.olingo.odata2.api.edm.EdmFunctionImport;
+import org.apache.olingo.odata2.api.edm.EdmNavigationProperty;
+import org.apache.olingo.odata2.api.edm.EdmProperty;
 import org.apache.olingo.odata2.api.edm.FullQualifiedName;
 import org.apache.olingo.odata2.api.edm.provider.Association;
 import org.apache.olingo.odata2.api.edm.provider.AssociationSet;
@@ -62,6 +68,123 @@ public class EdmxProviderTest {
   }
 
   @Test
+  public void annotationsAtSimpleProperty() throws Exception {
+    Edm edm = createEdm();
+    assertNotNull(edm);
+    EdmProperty property = (EdmProperty) edm.getEntityType("Self", "Employee").getProperty("EmployeeName");
+    assertNotNull(property);
+
+    EdmAnnotations annotations = property.getAnnotations();
+    assertNotNull(annotations);
+    List<EdmAnnotationAttribute> annotationAttributes = annotations.getAnnotationAttributes();
+    assertNotNull(annotationAttributes);
+
+    List<EdmAnnotationElement> annotationElements = annotations.getAnnotationElements();
+    assertNotNull(annotationElements);
+    assertEquals(2, annotationElements.size());
+
+    assertNull(annotationElements.get(0).getChildElements());
+  }
+
+  @Test
+  public void nullAnnotationsAtEntityType() throws Exception {
+    Edm edm = createEdm();
+    assertNotNull(edm);
+    EdmAnnotations annotations = edm.getEntityType("Self", "Employee").getAnnotations();
+    checkNullAnnotations(annotations);
+  }
+
+  @Test
+  public void nullAnnotationsAtComplexType() throws Exception {
+    Edm edm = createEdm();
+    assertNotNull(edm);
+    EdmAnnotations annotations = edm.getComplexType("Self", "c_Location").getAnnotations();
+    checkNullAnnotations(annotations);
+  }
+
+  @Test
+  public void nullAnnotationsAtSimpleProperty() throws Exception {
+    Edm edm = createEdm();
+    assertNotNull(edm);
+    EdmProperty property = (EdmProperty) edm.getEntityType("Self", "Employee").getProperty("RoomId");
+    EdmAnnotations annotations = property.getAnnotations();
+    checkNullAnnotations(annotations);
+  }
+
+  @Test
+  public void nullAnnotationsAtComplexProperty() throws Exception {
+    Edm edm = createEdm();
+    assertNotNull(edm);
+    EdmProperty property = (EdmProperty) edm.getEntityType("Self", "Employee").getProperty("Location");
+    EdmAnnotations annotations = property.getAnnotations();
+    checkNullAnnotations(annotations);
+  }
+
+  @Test
+  public void nullAnnotationsAtAssociation() throws Exception {
+    Edm edm = createEdm();
+    assertNotNull(edm);
+    EdmAnnotations annotations = edm.getAssociation("Self", "BuildingRooms").getAnnotations();
+    checkNullAnnotations(annotations);
+  }
+
+  @Test
+  public void nullAnnotationsAtAssociationSet() throws Exception {
+    Edm edm = createEdm();
+    assertNotNull(edm);
+    EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Employees");
+    EdmAnnotations annotations =
+        edm.getDefaultEntityContainer().getAssociationSet(entitySet,
+            (EdmNavigationProperty) entitySet.getEntityType().getProperty("ne_Manager")).getAnnotations();
+    checkNullAnnotations(annotations);
+  }
+
+  @Test
+  public void nullAnnotationsAtEdmContainer() throws Exception {
+    Edm edm = createEdm();
+    assertNotNull(edm);
+    EdmAnnotations annotations = edm.getDefaultEntityContainer().getAnnotations();
+    checkNullAnnotations(annotations);
+  }
+
+  @Test
+  public void nullAnnotationsAtFunctionImport() throws Exception {
+    Edm edm = createEdm();
+    assertNotNull(edm);
+    EdmAnnotations annotations = edm.getDefaultEntityContainer().getFunctionImport("EmployeeSearch").getAnnotations();
+    checkNullAnnotations(annotations);
+  }
+
+  @Test
+  public void nullAnnotationsAtFunctionImportParameter() throws Exception {
+    Edm edm = createEdm();
+    assertNotNull(edm);
+    EdmAnnotations annotations =
+        edm.getDefaultEntityContainer().getFunctionImport("EmployeeSearch").getParameter("q").getAnnotations();
+    checkNullAnnotations(annotations);
+  }
+
+  @Test
+  public void nullAnnotationsAtNavigationProperty() throws Exception {
+    Edm edm = createEdm();
+    assertNotNull(edm);
+    EdmNavigationProperty property =
+        (EdmNavigationProperty) edm.getEntityType("Self", "Employee").getProperty("ne_Manager");
+    EdmAnnotations annotations = property.getAnnotations();
+    checkNullAnnotations(annotations);
+  }
+
+  private void checkNullAnnotations(final EdmAnnotations annotations) {
+    assertNotNull(annotations);
+
+    List<EdmAnnotationAttribute> annotationAttributes = annotations.getAnnotationAttributes();
+    assertNull(annotationAttributes);
+
+    List<EdmAnnotationElement> annotationElements = annotations.getAnnotationElements();
+    assertNull(annotationElements);
+  }
+
+  @Test
   public void testEntityType() throws Exception {
     Edm edm = createEdm();