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/21 17:21:20 UTC

[1/2] [OLINGO-260][OLINGO-261] Finishing instance annotations support

Repository: olingo-odata4
Updated Branches:
  refs/heads/master a57926bf8 -> 72d894cd3


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditCardPI.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditCardPI.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditCardPI.java
index d005712..f14dc89 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditCardPI.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditCardPI.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -59,7 +61,7 @@ import javax.xml.datatype.Duration;
         isAbstract = false,
         baseType = "Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument")
 public interface CreditCardPI 
-  extends AbstractAnnotatable,org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.PaymentInstrument {
+  extends Annotatable,org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.PaymentInstrument {
 
     
     @Key
@@ -290,4 +292,60 @@ public interface CreditCardPI
     
 
 
+
+        @Override
+        Annotations annotations();
+
+    interface Annotations            extends org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.PaymentInstrument.Annotations{
+
+            @AnnotationsForProperty(name = "PaymentInstrumentID",
+                   type = "Edm.Int32")
+        Annotatable getPaymentInstrumentIDAnnotations();
+
+            @AnnotationsForProperty(name = "FriendlyName",
+                   type = "Edm.String")
+        Annotatable getFriendlyNameAnnotations();
+
+            @AnnotationsForProperty(name = "CreatedDate",
+                   type = "Edm.DateTimeOffset")
+        Annotatable getCreatedDateAnnotations();
+
+            @AnnotationsForProperty(name = "CardNumber",
+                   type = "Edm.String")
+        Annotatable getCardNumberAnnotations();
+
+            @AnnotationsForProperty(name = "CVV",
+                   type = "Edm.String")
+        Annotatable getCVVAnnotations();
+
+            @AnnotationsForProperty(name = "HolderName",
+                   type = "Edm.String")
+        Annotatable getHolderNameAnnotations();
+
+            @AnnotationsForProperty(name = "Balance",
+                   type = "Edm.Double")
+        Annotatable getBalanceAnnotations();
+
+            @AnnotationsForProperty(name = "ExperationDate",
+                   type = "Edm.DateTimeOffset")
+        Annotatable getExperationDateAnnotations();
+
+    
+    
+        @AnnotationsForNavigationProperty(name = "TheStoredPI", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.StoredPI")
+        Annotatable getTheStoredPIAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "BillingStatements", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Statement")
+        Annotatable getBillingStatementsAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "BackupStoredPI", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.StoredPI")
+        Annotatable getBackupStoredPIAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "CreditRecords", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.CreditRecord")
+        Annotatable getCreditRecordsAnnotations();
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditRecord.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditRecord.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditRecord.java
index ca1c593..93a49c8 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditRecord.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditRecord.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +60,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface CreditRecord 
-  extends AbstractAnnotatable,Serializable {
+  extends Annotatable,Serializable {
 
     
     @Key
@@ -157,4 +159,27 @@ public interface CreditRecord
 
 
 
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "CreditRecordID",
+                   type = "Edm.Int32")
+        Annotatable getCreditRecordIDAnnotations();
+
+            @AnnotationsForProperty(name = "IsGood",
+                   type = "Edm.Boolean")
+        Annotatable getIsGoodAnnotations();
+
+            @AnnotationsForProperty(name = "Reason",
+                   type = "Edm.String")
+        Annotatable getReasonAnnotations();
+
+            @AnnotationsForProperty(name = "CreatedDate",
+                   type = "Edm.DateTimeOffset")
+        Annotatable getCreatedDateAnnotations();
+
+    
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Customer.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Customer.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Customer.java
index d545c87..2ddbd7a 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Customer.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Customer.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -59,7 +61,7 @@ import javax.xml.datatype.Duration;
         isAbstract = false,
         baseType = "Microsoft.Test.OData.Services.ODataWCFService.Person")
 public interface Customer 
-  extends AbstractAnnotatable,org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person {
+  extends Annotatable,org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person {
 
     
     @Key
@@ -364,4 +366,68 @@ public interface Customer
          org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Address newHomeAddress();
 
         }
+
+        @Override
+        Annotations annotations();
+
+    interface Annotations            extends org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person.Annotations{
+
+            @AnnotationsForProperty(name = "PersonID",
+                   type = "Edm.Int32")
+        Annotatable getPersonIDAnnotations();
+
+            @AnnotationsForProperty(name = "FirstName",
+                   type = "Edm.String")
+        Annotatable getFirstNameAnnotations();
+
+            @AnnotationsForProperty(name = "LastName",
+                   type = "Edm.String")
+        Annotatable getLastNameAnnotations();
+
+            @AnnotationsForProperty(name = "MiddleName",
+                   type = "Edm.String")
+        Annotatable getMiddleNameAnnotations();
+
+            @AnnotationsForProperty(name = "HomeAddress",
+                   type = "Microsoft.Test.OData.Services.ODataWCFService.Address")
+        Annotatable getHomeAddressAnnotations();
+
+            @AnnotationsForProperty(name = "Home",
+                   type = "Edm.GeographyPoint")
+        Annotatable getHomeAnnotations();
+
+            @AnnotationsForProperty(name = "Numbers",
+                   type = "Edm.String")
+        Annotatable getNumbersAnnotations();
+
+            @AnnotationsForProperty(name = "Emails",
+                   type = "Edm.String")
+        Annotatable getEmailsAnnotations();
+
+            @AnnotationsForProperty(name = "City",
+                   type = "Edm.String")
+        Annotatable getCityAnnotations();
+
+            @AnnotationsForProperty(name = "Birthday",
+                   type = "Edm.DateTimeOffset")
+        Annotatable getBirthdayAnnotations();
+
+            @AnnotationsForProperty(name = "TimeBetweenLastTwoOrders",
+                   type = "Edm.Duration")
+        Annotatable getTimeBetweenLastTwoOrdersAnnotations();
+
+    
+    
+        @AnnotationsForNavigationProperty(name = "Parent", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Person")
+        Annotatable getParentAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "Orders", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Order")
+        Annotatable getOrdersAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "Company", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Company")
+        Annotatable getCompanyAnnotations();
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Department.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Department.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Department.java
index 6eed1d3..f6a2531 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Department.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Department.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +60,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Department 
-  extends AbstractAnnotatable,Serializable {
+  extends Annotatable,Serializable {
 
     
     @Key
@@ -144,4 +146,27 @@ public interface Department
     
 
 
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "DepartmentID",
+                   type = "Edm.Int32")
+        Annotatable getDepartmentIDAnnotations();
+
+            @AnnotationsForProperty(name = "Name",
+                   type = "Edm.String")
+        Annotatable getNameAnnotations();
+
+            @AnnotationsForProperty(name = "DepartmentNO",
+                   type = "Edm.String")
+        Annotatable getDepartmentNOAnnotations();
+
+    
+    
+        @AnnotationsForNavigationProperty(name = "Company", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Company")
+        Annotatable getCompanyAnnotations();
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Employee.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Employee.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Employee.java
index 87c1486..16f7074 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Employee.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Employee.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -59,7 +61,7 @@ import javax.xml.datatype.Duration;
         isAbstract = false,
         baseType = "Microsoft.Test.OData.Services.ODataWCFService.Person")
 public interface Employee 
-  extends AbstractAnnotatable,org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person {
+  extends Annotatable,org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person {
 
     
     @Key
@@ -331,4 +333,60 @@ public interface Employee
          org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Address newHomeAddress();
 
         }
+
+        @Override
+        Annotations annotations();
+
+    interface Annotations            extends org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person.Annotations{
+
+            @AnnotationsForProperty(name = "PersonID",
+                   type = "Edm.Int32")
+        Annotatable getPersonIDAnnotations();
+
+            @AnnotationsForProperty(name = "FirstName",
+                   type = "Edm.String")
+        Annotatable getFirstNameAnnotations();
+
+            @AnnotationsForProperty(name = "LastName",
+                   type = "Edm.String")
+        Annotatable getLastNameAnnotations();
+
+            @AnnotationsForProperty(name = "MiddleName",
+                   type = "Edm.String")
+        Annotatable getMiddleNameAnnotations();
+
+            @AnnotationsForProperty(name = "HomeAddress",
+                   type = "Microsoft.Test.OData.Services.ODataWCFService.Address")
+        Annotatable getHomeAddressAnnotations();
+
+            @AnnotationsForProperty(name = "Home",
+                   type = "Edm.GeographyPoint")
+        Annotatable getHomeAnnotations();
+
+            @AnnotationsForProperty(name = "Numbers",
+                   type = "Edm.String")
+        Annotatable getNumbersAnnotations();
+
+            @AnnotationsForProperty(name = "Emails",
+                   type = "Edm.String")
+        Annotatable getEmailsAnnotations();
+
+            @AnnotationsForProperty(name = "DateHired",
+                   type = "Edm.DateTimeOffset")
+        Annotatable getDateHiredAnnotations();
+
+            @AnnotationsForProperty(name = "Office",
+                   type = "Edm.GeographyPoint")
+        Annotatable getOfficeAnnotations();
+
+    
+    
+        @AnnotationsForNavigationProperty(name = "Parent", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Person")
+        Annotatable getParentAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "Company", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Company")
+        Annotatable getCompanyAnnotations();
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/GiftCard.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/GiftCard.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/GiftCard.java
index e4ccfe2..4d00981 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/GiftCard.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/GiftCard.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +60,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface GiftCard 
-  extends AbstractAnnotatable,Serializable {
+  extends Annotatable,Serializable {
 
     
     @Key
@@ -193,4 +195,31 @@ public interface GiftCard
     
         }
 
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "GiftCardID",
+                   type = "Edm.Int32")
+        Annotatable getGiftCardIDAnnotations();
+
+            @AnnotationsForProperty(name = "GiftCardNO",
+                   type = "Edm.String")
+        Annotatable getGiftCardNOAnnotations();
+
+            @AnnotationsForProperty(name = "Amount",
+                   type = "Edm.Double")
+        Annotatable getAmountAnnotations();
+
+            @AnnotationsForProperty(name = "ExperationDate",
+                   type = "Edm.DateTimeOffset")
+        Annotatable getExperationDateAnnotations();
+
+            @AnnotationsForProperty(name = "OwnerName",
+                   type = "Edm.String")
+        Annotatable getOwnerNameAnnotations();
+
+    
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/HomeAddress.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/HomeAddress.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/HomeAddress.java
index 9327fe8..d67155c 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/HomeAddress.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/HomeAddress.java
@@ -18,10 +18,14 @@
  */
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.ComplexType;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
+import org.apache.olingo.ext.proxy.api.AbstractOpenType;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.*;
 import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.*;
 
@@ -48,7 +52,7 @@ import javax.xml.datatype.Duration;
         isAbstract = false,
         baseType = "Microsoft.Test.OData.Services.ODataWCFService.Address")
 public interface HomeAddress 
-    extends org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Address {
+    extends org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Address,Serializable {
 
 
     @Property(name = "Street", 
@@ -120,4 +124,28 @@ public interface HomeAddress
     
 
 
+
+        @Override
+        Annotations annotations();
+
+    interface Annotations            extends org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Address.Annotations{
+
+            @AnnotationsForProperty(name = "Street",
+                   type = "Edm.String")
+        Annotatable getStreetAnnotations();
+
+            @AnnotationsForProperty(name = "City",
+                   type = "Edm.String")
+        Annotatable getCityAnnotations();
+
+            @AnnotationsForProperty(name = "PostalCode",
+                   type = "Edm.String")
+        Annotatable getPostalCodeAnnotations();
+
+            @AnnotationsForProperty(name = "FamilyName",
+                   type = "Edm.String")
+        Annotatable getFamilyNameAnnotations();
+
+    
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/LabourUnion.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/LabourUnion.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/LabourUnion.java
index 699b417..dded85d 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/LabourUnion.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/LabourUnion.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +60,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface LabourUnion 
-  extends AbstractAnnotatable,Serializable {
+  extends Annotatable,Serializable {
 
     
     @Key
@@ -111,4 +113,19 @@ public interface LabourUnion
 
 
 
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "LabourUnionID",
+                   type = "Edm.Int32")
+        Annotatable getLabourUnionIDAnnotations();
+
+            @AnnotationsForProperty(name = "Name",
+                   type = "Edm.String")
+        Annotatable getNameAnnotations();
+
+    
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Order.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Order.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Order.java
index 2d3ea17..f1ad3dc 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Order.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Order.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +60,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Order 
-  extends AbstractAnnotatable,Serializable {
+  extends Annotatable,Serializable {
 
     
     @Key
@@ -187,4 +189,39 @@ public interface Order
     
 
 
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "OrderID",
+                   type = "Edm.Int32")
+        Annotatable getOrderIDAnnotations();
+
+            @AnnotationsForProperty(name = "OrderDate",
+                   type = "Edm.DateTimeOffset")
+        Annotatable getOrderDateAnnotations();
+
+            @AnnotationsForProperty(name = "ShelfLife",
+                   type = "Edm.Duration")
+        Annotatable getShelfLifeAnnotations();
+
+            @AnnotationsForProperty(name = "OrderShelfLifes",
+                   type = "Edm.Duration")
+        Annotatable getOrderShelfLifesAnnotations();
+
+    
+    
+        @AnnotationsForNavigationProperty(name = "LoggedInEmployee", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Employee")
+        Annotatable getLoggedInEmployeeAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "CustomerForOrder", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Customer")
+        Annotatable getCustomerForOrderAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "OrderDetails", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.OrderDetail")
+        Annotatable getOrderDetailsAnnotations();
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/OrderDetail.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/OrderDetail.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/OrderDetail.java
index f8b0ca3..865cc72 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/OrderDetail.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/OrderDetail.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +60,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface OrderDetail 
-  extends AbstractAnnotatable,Serializable {
+  extends Annotatable,Serializable {
 
         
     @Key
@@ -200,4 +202,39 @@ public interface OrderDetail
     
 
 
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "OrderID",
+                   type = "Edm.Int32")
+        Annotatable getOrderIDAnnotations();
+
+            @AnnotationsForProperty(name = "ProductID",
+                   type = "Edm.Int32")
+        Annotatable getProductIDAnnotations();
+
+            @AnnotationsForProperty(name = "OrderPlaced",
+                   type = "Edm.DateTimeOffset")
+        Annotatable getOrderPlacedAnnotations();
+
+            @AnnotationsForProperty(name = "Quantity",
+                   type = "Edm.Int32")
+        Annotatable getQuantityAnnotations();
+
+            @AnnotationsForProperty(name = "UnitPrice",
+                   type = "Edm.Single")
+        Annotatable getUnitPriceAnnotations();
+
+    
+    
+        @AnnotationsForNavigationProperty(name = "ProductOrdered", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Product")
+        Annotatable getProductOrderedAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "AssociatedOrder", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Order")
+        Annotatable getAssociatedOrderAnnotations();
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PaymentInstrument.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PaymentInstrument.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PaymentInstrument.java
index 2915a94..1e982b5 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PaymentInstrument.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PaymentInstrument.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +60,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface PaymentInstrument 
-  extends AbstractAnnotatable,Serializable {
+  extends Annotatable,Serializable {
 
     
     @Key
@@ -164,4 +166,35 @@ public interface PaymentInstrument
     
 
 
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "PaymentInstrumentID",
+                   type = "Edm.Int32")
+        Annotatable getPaymentInstrumentIDAnnotations();
+
+            @AnnotationsForProperty(name = "FriendlyName",
+                   type = "Edm.String")
+        Annotatable getFriendlyNameAnnotations();
+
+            @AnnotationsForProperty(name = "CreatedDate",
+                   type = "Edm.DateTimeOffset")
+        Annotatable getCreatedDateAnnotations();
+
+    
+    
+        @AnnotationsForNavigationProperty(name = "TheStoredPI", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.StoredPI")
+        Annotatable getTheStoredPIAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "BillingStatements", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Statement")
+        Annotatable getBillingStatementsAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "BackupStoredPI", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.StoredPI")
+        Annotatable getBackupStoredPIAnnotations();
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Person.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Person.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Person.java
index ec17476..fcd58ff 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Person.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Person.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +60,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Person 
-  extends AbstractAnnotatable,Serializable {
+  extends Annotatable,Serializable {
 
     
     @Key
@@ -287,4 +289,47 @@ public interface Person
          org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Address newHomeAddress();
 
         }
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "PersonID",
+                   type = "Edm.Int32")
+        Annotatable getPersonIDAnnotations();
+
+            @AnnotationsForProperty(name = "FirstName",
+                   type = "Edm.String")
+        Annotatable getFirstNameAnnotations();
+
+            @AnnotationsForProperty(name = "LastName",
+                   type = "Edm.String")
+        Annotatable getLastNameAnnotations();
+
+            @AnnotationsForProperty(name = "MiddleName",
+                   type = "Edm.String")
+        Annotatable getMiddleNameAnnotations();
+
+            @AnnotationsForProperty(name = "HomeAddress",
+                   type = "Microsoft.Test.OData.Services.ODataWCFService.Address")
+        Annotatable getHomeAddressAnnotations();
+
+            @AnnotationsForProperty(name = "Home",
+                   type = "Edm.GeographyPoint")
+        Annotatable getHomeAnnotations();
+
+            @AnnotationsForProperty(name = "Numbers",
+                   type = "Edm.String")
+        Annotatable getNumbersAnnotations();
+
+            @AnnotationsForProperty(name = "Emails",
+                   type = "Edm.String")
+        Annotatable getEmailsAnnotations();
+
+    
+    
+        @AnnotationsForNavigationProperty(name = "Parent", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Person")
+        Annotatable getParentAnnotations();
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Product.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Product.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Product.java
index 88e84bc..8d60324 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Product.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Product.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +60,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Product 
-  extends AbstractAnnotatable,Serializable {
+  extends Annotatable,Serializable {
 
     
     @Key
@@ -302,4 +304,51 @@ public interface Product
 
         }
 
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "ProductID",
+                   type = "Edm.Int32")
+        Annotatable getProductIDAnnotations();
+
+            @AnnotationsForProperty(name = "Name",
+                   type = "Edm.String")
+        Annotatable getNameAnnotations();
+
+            @AnnotationsForProperty(name = "QuantityPerUnit",
+                   type = "Edm.String")
+        Annotatable getQuantityPerUnitAnnotations();
+
+            @AnnotationsForProperty(name = "UnitPrice",
+                   type = "Edm.Single")
+        Annotatable getUnitPriceAnnotations();
+
+            @AnnotationsForProperty(name = "QuantityInStock",
+                   type = "Edm.Int32")
+        Annotatable getQuantityInStockAnnotations();
+
+            @AnnotationsForProperty(name = "Discontinued",
+                   type = "Edm.Boolean")
+        Annotatable getDiscontinuedAnnotations();
+
+            @AnnotationsForProperty(name = "UserAccess",
+                   type = "Microsoft.Test.OData.Services.ODataWCFService.AccessLevel")
+        Annotatable getUserAccessAnnotations();
+
+            @AnnotationsForProperty(name = "SkinColor",
+                   type = "Microsoft.Test.OData.Services.ODataWCFService.Color")
+        Annotatable getSkinColorAnnotations();
+
+            @AnnotationsForProperty(name = "CoverColors",
+                   type = "Microsoft.Test.OData.Services.ODataWCFService.Color")
+        Annotatable getCoverColorsAnnotations();
+
+    
+    
+        @AnnotationsForNavigationProperty(name = "Details", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.ProductDetail")
+        Annotatable getDetailsAnnotations();
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductDetail.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductDetail.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductDetail.java
index adb1b84..154d2c0 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductDetail.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductDetail.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +60,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface ProductDetail 
-  extends AbstractAnnotatable,Serializable {
+  extends Annotatable,Serializable {
 
         
     @Key
@@ -189,4 +191,35 @@ public interface ProductDetail
     
         }
 
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "ProductID",
+                   type = "Edm.Int32")
+        Annotatable getProductIDAnnotations();
+
+            @AnnotationsForProperty(name = "ProductDetailID",
+                   type = "Edm.Int32")
+        Annotatable getProductDetailIDAnnotations();
+
+            @AnnotationsForProperty(name = "ProductName",
+                   type = "Edm.String")
+        Annotatable getProductNameAnnotations();
+
+            @AnnotationsForProperty(name = "Description",
+                   type = "Edm.String")
+        Annotatable getDescriptionAnnotations();
+
+    
+    
+        @AnnotationsForNavigationProperty(name = "RelatedProduct", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Product")
+        Annotatable getRelatedProductAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "Reviews", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.ProductReview")
+        Annotatable getReviewsAnnotations();
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductReview.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductReview.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductReview.java
index 5c982a7..fcee35c 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductReview.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductReview.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +60,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface ProductReview 
-  extends AbstractAnnotatable,Serializable {
+  extends Annotatable,Serializable {
 
                 
     @Key
@@ -203,4 +205,35 @@ public interface ProductReview
 
 
 
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "ProductID",
+                   type = "Edm.Int32")
+        Annotatable getProductIDAnnotations();
+
+            @AnnotationsForProperty(name = "ProductDetailID",
+                   type = "Edm.Int32")
+        Annotatable getProductDetailIDAnnotations();
+
+            @AnnotationsForProperty(name = "ReviewTitle",
+                   type = "Edm.String")
+        Annotatable getReviewTitleAnnotations();
+
+            @AnnotationsForProperty(name = "RevisionID",
+                   type = "Edm.Int32")
+        Annotatable getRevisionIDAnnotations();
+
+            @AnnotationsForProperty(name = "Comment",
+                   type = "Edm.String")
+        Annotatable getCommentAnnotations();
+
+            @AnnotationsForProperty(name = "Author",
+                   type = "Edm.String")
+        Annotatable getAuthorAnnotations();
+
+    
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PublicCompany.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PublicCompany.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PublicCompany.java
index 31aa470..d856468 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PublicCompany.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PublicCompany.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -59,7 +61,7 @@ import javax.xml.datatype.Duration;
         isAbstract = false,
         baseType = "Microsoft.Test.OData.Services.ODataWCFService.Company")
 public interface PublicCompany 
-  extends AbstractAnnotatable,org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Company {
+  extends Annotatable,org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Company {
 
     
     @Key
@@ -289,4 +291,64 @@ public interface PublicCompany
          org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Address newAddress();
 
         }
+
+        @Override
+        Annotations annotations();
+
+    interface Annotations            extends org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Company.Annotations{
+
+            @AnnotationsForProperty(name = "CompanyID",
+                   type = "Edm.Int32")
+        Annotatable getCompanyIDAnnotations();
+
+            @AnnotationsForProperty(name = "CompanyCategory",
+                   type = "Microsoft.Test.OData.Services.ODataWCFService.CompanyCategory")
+        Annotatable getCompanyCategoryAnnotations();
+
+            @AnnotationsForProperty(name = "Revenue",
+                   type = "Edm.Int64")
+        Annotatable getRevenueAnnotations();
+
+            @AnnotationsForProperty(name = "Name",
+                   type = "Edm.String")
+        Annotatable getNameAnnotations();
+
+            @AnnotationsForProperty(name = "Address",
+                   type = "Microsoft.Test.OData.Services.ODataWCFService.Address")
+        Annotatable getAddressAnnotations();
+
+            @AnnotationsForProperty(name = "StockExchange",
+                   type = "Edm.String")
+        Annotatable getStockExchangeAnnotations();
+
+    
+    
+        @AnnotationsForNavigationProperty(name = "Employees", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Employee")
+        Annotatable getEmployeesAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "VipCustomer", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Customer")
+        Annotatable getVipCustomerAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "Departments", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Department")
+        Annotatable getDepartmentsAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "CoreDepartment", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Department")
+        Annotatable getCoreDepartmentAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "Assets", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Asset")
+        Annotatable getAssetsAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "Club", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Club")
+        Annotatable getClubAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "LabourUnion", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.LabourUnion")
+        Annotatable getLabourUnionAnnotations();
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Statement.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Statement.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Statement.java
index e12c0f1..fb86a38 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Statement.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Statement.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +60,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Statement 
-  extends AbstractAnnotatable,Serializable {
+  extends Annotatable,Serializable {
 
     
     @Key
@@ -157,4 +159,27 @@ public interface Statement
 
 
 
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "StatementID",
+                   type = "Edm.Int32")
+        Annotatable getStatementIDAnnotations();
+
+            @AnnotationsForProperty(name = "TransactionType",
+                   type = "Edm.String")
+        Annotatable getTransactionTypeAnnotations();
+
+            @AnnotationsForProperty(name = "TransactionDescription",
+                   type = "Edm.String")
+        Annotatable getTransactionDescriptionAnnotations();
+
+            @AnnotationsForProperty(name = "Amount",
+                   type = "Edm.Double")
+        Annotatable getAmountAnnotations();
+
+    
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/StoredPI.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/StoredPI.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/StoredPI.java
index 0a31c18..bad03e4 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/StoredPI.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/StoredPI.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +60,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface StoredPI 
-  extends AbstractAnnotatable,Serializable {
+  extends Annotatable,Serializable {
 
     
     @Key
@@ -157,4 +159,27 @@ public interface StoredPI
 
 
 
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "StoredPIID",
+                   type = "Edm.Int32")
+        Annotatable getStoredPIIDAnnotations();
+
+            @AnnotationsForProperty(name = "PIName",
+                   type = "Edm.String")
+        Annotatable getPINameAnnotations();
+
+            @AnnotationsForProperty(name = "PIType",
+                   type = "Edm.String")
+        Annotatable getPITypeAnnotations();
+
+            @AnnotationsForProperty(name = "CreatedDate",
+                   type = "Edm.DateTimeOffset")
+        Annotatable getCreatedDateAnnotations();
+
+    
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Subscription.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Subscription.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Subscription.java
index 17dd865..e72bdfd 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Subscription.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Subscription.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +60,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Subscription 
-  extends AbstractAnnotatable,Serializable {
+  extends Annotatable,Serializable {
 
     
     @Key
@@ -180,4 +182,31 @@ public interface Subscription
 
 
 
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "SubscriptionID",
+                   type = "Edm.Int32")
+        Annotatable getSubscriptionIDAnnotations();
+
+            @AnnotationsForProperty(name = "TemplateGuid",
+                   type = "Edm.String")
+        Annotatable getTemplateGuidAnnotations();
+
+            @AnnotationsForProperty(name = "Title",
+                   type = "Edm.String")
+        Annotatable getTitleAnnotations();
+
+            @AnnotationsForProperty(name = "Category",
+                   type = "Edm.String")
+        Annotatable getCategoryAnnotations();
+
+            @AnnotationsForProperty(name = "CreatedDate",
+                   type = "Edm.DateTimeOffset")
+        Annotatable getCreatedDateAnnotations();
+
+    
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java
index ddf84fc..324e053 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java
@@ -50,7 +50,7 @@ import org.apache.olingo.commons.api.domain.ODataInlineEntitySet;
 import org.apache.olingo.commons.api.domain.ODataLinked;
 import org.apache.olingo.commons.api.domain.ODataServiceDocument;
 import org.apache.olingo.commons.api.domain.ODataValue;
-import org.apache.olingo.commons.api.domain.v4.ODataAnnotatatable;
+import org.apache.olingo.commons.api.domain.v4.ODataAnnotatable;
 import org.apache.olingo.commons.api.domain.v4.ODataAnnotation;
 import org.apache.olingo.commons.api.domain.v4.ODataDeletedEntity.Reason;
 import org.apache.olingo.commons.api.domain.v4.ODataDelta;
@@ -138,7 +138,7 @@ public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder
     }
   }
 
-  private void annotations(final ODataAnnotatatable odataAnnotatable, final Annotatable annotatable,
+  private void annotations(final ODataAnnotatable odataAnnotatable, final Annotatable annotatable,
           final Class<? extends Entity> reference) {
 
     for (ODataAnnotation odataAnnotation : odataAnnotatable.getAnnotations()) {
@@ -220,7 +220,7 @@ public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder
     return valueResource;
   }
 
-  private void odataAnnotations(final Annotatable annotatable, final ODataAnnotatatable odataAnnotatable) {
+  private void odataAnnotations(final Annotatable annotatable, final ODataAnnotatable odataAnnotatable) {
     for (Annotation annotation : annotatable.getAnnotations()) {
       FullQualifiedName fqn = null;
       if (client instanceof EdmEnabledODataClient) {
@@ -265,7 +265,7 @@ public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder
     super.odataNavigationLinks(edmType, linked, odataLinked, metadataETag, base);
     for (org.apache.olingo.commons.api.domain.ODataLink link : odataLinked.getNavigationLinks()) {
       if (!(link instanceof ODataInlineEntity) && !(link instanceof ODataInlineEntitySet)) {
-        odataAnnotations(linked.getNavigationLink(link.getName()), (ODataAnnotatatable) link);
+        odataAnnotations(linked.getNavigationLink(link.getName()), (ODataAnnotatable) link);
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataAnnotatable.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataAnnotatable.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataAnnotatable.java
new file mode 100644
index 0000000..be4c6e8
--- /dev/null
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataAnnotatable.java
@@ -0,0 +1,26 @@
+/*
+ * 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.commons.api.domain.v4;
+
+import java.util.List;
+
+public interface ODataAnnotatable {
+
+  List<ODataAnnotation> getAnnotations();
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataAnnotatatable.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataAnnotatatable.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataAnnotatatable.java
deleted file mode 100644
index 7481efc..0000000
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataAnnotatatable.java
+++ /dev/null
@@ -1,26 +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.commons.api.domain.v4;
-
-import java.util.List;
-
-public interface ODataAnnotatatable {
-
-  List<ODataAnnotation> getAnnotations();
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataDeltaLink.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataDeltaLink.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataDeltaLink.java
index ff9e088..c9b54e6 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataDeltaLink.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataDeltaLink.java
@@ -20,7 +20,7 @@ package org.apache.olingo.commons.api.domain.v4;
 
 import java.net.URI;
 
-public interface ODataDeltaLink extends ODataAnnotatatable {
+public interface ODataDeltaLink extends ODataAnnotatable {
 
   URI getSource();
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataEntity.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataEntity.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataEntity.java
index fb24dda..2c1111b 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataEntity.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataEntity.java
@@ -21,7 +21,7 @@ package org.apache.olingo.commons.api.domain.v4;
 import java.util.List;
 import org.apache.olingo.commons.api.domain.CommonODataEntity;
 
-public interface ODataEntity extends CommonODataEntity, ODataAnnotatatable {
+public interface ODataEntity extends CommonODataEntity, ODataAnnotatable {
 
   @Override
   ODataProperty getProperty(String name);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataEntitySet.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataEntitySet.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataEntitySet.java
index ca25b0b..683375a 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataEntitySet.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataEntitySet.java
@@ -22,7 +22,7 @@ import java.net.URI;
 import java.util.List;
 import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
 
-public interface ODataEntitySet extends CommonODataEntitySet, ODataAnnotatatable {
+public interface ODataEntitySet extends CommonODataEntitySet, ODataAnnotatable {
 
   @Override
   List<ODataEntity> getEntities();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataLink.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataLink.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataLink.java
index 5ff76a8..5c14386 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataLink.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataLink.java
@@ -24,7 +24,7 @@ import java.util.List;
 import org.apache.olingo.commons.api.domain.ODataLinkType;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 
-public class ODataLink extends org.apache.olingo.commons.api.domain.ODataLink implements ODataAnnotatatable {
+public class ODataLink extends org.apache.olingo.commons.api.domain.ODataLink implements ODataAnnotatable {
 
   private static final long serialVersionUID = 8953805653775734101L;
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataLinkedComplexValue.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataLinkedComplexValue.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataLinkedComplexValue.java
index 6717510..c50c9a8 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataLinkedComplexValue.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataLinkedComplexValue.java
@@ -22,6 +22,6 @@ import org.apache.olingo.commons.api.domain.ODataComplexValue;
 import org.apache.olingo.commons.api.domain.ODataLinked;
 
 public interface ODataLinkedComplexValue
-        extends ODataValue, ODataLinked, ODataComplexValue<ODataProperty>, ODataAnnotatatable {
+        extends ODataValue, ODataLinked, ODataComplexValue<ODataProperty>, ODataAnnotatable {
 
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataProperty.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataProperty.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataProperty.java
index 09507ba..f809681 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataProperty.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataProperty.java
@@ -20,5 +20,5 @@ package org.apache.olingo.commons.api.domain.v4;
 
 import org.apache.olingo.commons.api.domain.CommonODataProperty;
 
-public interface ODataProperty extends CommonODataProperty, ODataAnnotatatable, ODataValuable {
+public interface ODataProperty extends CommonODataProperty, ODataAnnotatable, ODataValuable {
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractJsonSerializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractJsonSerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractJsonSerializer.java
index 78f05a7..1713a7c 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractJsonSerializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractJsonSerializer.java
@@ -121,7 +121,7 @@ abstract class AbstractJsonSerializer<T> extends ODataJacksonSerializer<T> {
         if (StringUtils.isNotBlank(link.getHref())) {
           jgen.writeStringField(
                   link.getTitle() + StringUtils.prependIfMissing(
-                  version.getJSONMap().get(ODataServiceVersion.JSON_MEDIAEDIT_LINK), "@"),
+                          version.getJSONMap().get(ODataServiceVersion.JSON_MEDIAEDIT_LINK), "@"),
                   link.getHref());
         }
       }
@@ -136,6 +136,10 @@ abstract class AbstractJsonSerializer<T> extends ODataJacksonSerializer<T> {
     }
 
     for (Link link : linked.getNavigationLinks()) {
+      for (Annotation annotation : link.getAnnotations()) {
+        valuable(jgen, annotation, link.getTitle() + "@" + annotation.getTerm());
+      }
+
       if (StringUtils.isNotBlank(link.getHref())) {
         jgen.writeStringField(
                 link.getTitle() + version.getJSONMap().get(ODataServiceVersion.JSON_NAVIGATION_LINK),

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java
index dad1bfa..9e1b22d 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java
@@ -637,6 +637,7 @@ public class AtomDeserializer extends AbstractAtomDealer {
               }
             } else if (link.getRel().startsWith(
                     version.getNamespaceMap().get(ODataServiceVersion.NAVIGATION_LINK_REL))) {
+              
               entity.getNavigationLinks().add(link);
               inline(reader, event.asStartElement(), link);
             } else if (link.getRel().startsWith(


[2/2] git commit: [OLINGO-260][OLINGO-261] Finishing instance annotations support

Posted by il...@apache.org.
[OLINGO-260][OLINGO-261] Finishing instance annotations support


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

Branch: refs/heads/master
Commit: 72d894cd3a22686fdc57d60af3bf59755d35956a
Parents: a57926b
Author: Francesco Chicchiriccò <--global>
Authored: Wed May 21 17:21:06 2014 +0200
Committer: Francesco Chicchiriccò <--global>
Committed: Wed May 21 17:21:06 2014 +0200

----------------------------------------------------------------------
 .../ext/proxy/api/AbstractAnnotatable.java      |  34 ----
 .../olingo/ext/proxy/api/Annotatable.java       |  34 ++++
 .../AnnotationsForNavigationProperty.java       |  34 ++++
 .../api/annotations/AnnotationsForProperty.java |  34 ++++
 .../AbstractStructuredInvocationHandler.java    |  35 ++++
 .../commons/AnnotatableInvocationHandler.java   | 180 +++++++++++++++++++
 .../commons/AnnotatationsInvocationHandler.java |  91 ++++++++++
 .../ComplexFactoryInvocationHandler.java        |   1 +
 .../olingo/ext/proxy/commons/ContainerImpl.java |  29 ++-
 .../proxy/commons/EntityInvocationHandler.java  |   9 +-
 .../commons/OperationInvocationHandler.java     |   2 +-
 .../olingo/ext/proxy/utils/CoreUtils.java       |   5 +-
 .../src/main/resources/complexType.vm           |   3 +
 .../src/main/resources/entityType.vm            |  34 +++-
 .../src/main/resources/v40/complexType.vm       |  26 +++
 .../org/apache/olingo/fit/utils/DataBinder.java |  48 ++---
 .../main/resources/V40/Boss/entity.full.json    |   2 +
 fit/src/main/resources/V40/Boss/entity.xml      |   5 +-
 .../fit/proxy/v4/SingletonTestITCase.java       |  20 ++-
 .../opentypesservicev4/types/IndexedRow.java    |   4 +-
 .../services/opentypesservicev4/types/Row.java  |   4 +-
 .../opentypesservicev4/types/RowIndex.java      |   4 +-
 .../services/odatawcfservice/types/Account.java |  41 ++++-
 .../odatawcfservice/types/AccountInfo.java      |  21 ++-
 .../services/odatawcfservice/types/Address.java |  23 +++
 .../services/odatawcfservice/types/Asset.java   |  25 ++-
 .../services/odatawcfservice/types/Club.java    |  21 ++-
 .../services/odatawcfservice/types/Company.java |  49 ++++-
 .../odatawcfservice/types/CompanyAddress.java   |  30 +++-
 .../odatawcfservice/types/CreditCardPI.java     |  62 ++++++-
 .../odatawcfservice/types/CreditRecord.java     |  29 ++-
 .../odatawcfservice/types/Customer.java         |  70 +++++++-
 .../odatawcfservice/types/Department.java       |  29 ++-
 .../odatawcfservice/types/Employee.java         |  62 ++++++-
 .../odatawcfservice/types/GiftCard.java         |  33 +++-
 .../odatawcfservice/types/HomeAddress.java      |  30 +++-
 .../odatawcfservice/types/LabourUnion.java      |  21 ++-
 .../services/odatawcfservice/types/Order.java   |  41 ++++-
 .../odatawcfservice/types/OrderDetail.java      |  41 ++++-
 .../types/PaymentInstrument.java                |  37 +++-
 .../services/odatawcfservice/types/Person.java  |  49 ++++-
 .../services/odatawcfservice/types/Product.java |  53 +++++-
 .../odatawcfservice/types/ProductDetail.java    |  37 +++-
 .../odatawcfservice/types/ProductReview.java    |  37 +++-
 .../odatawcfservice/types/PublicCompany.java    |  66 ++++++-
 .../odatawcfservice/types/Statement.java        |  29 ++-
 .../odatawcfservice/types/StoredPI.java         |  29 ++-
 .../odatawcfservice/types/Subscription.java     |  33 +++-
 .../client/core/op/impl/v4/ODataBinderImpl.java |   8 +-
 .../commons/api/domain/v4/ODataAnnotatable.java |  26 +++
 .../api/domain/v4/ODataAnnotatatable.java       |  26 ---
 .../commons/api/domain/v4/ODataDeltaLink.java   |   2 +-
 .../commons/api/domain/v4/ODataEntity.java      |   2 +-
 .../commons/api/domain/v4/ODataEntitySet.java   |   2 +-
 .../olingo/commons/api/domain/v4/ODataLink.java |   2 +-
 .../api/domain/v4/ODataLinkedComplexValue.java  |   2 +-
 .../commons/api/domain/v4/ODataProperty.java    |   2 +-
 .../core/data/AbstractJsonSerializer.java       |   6 +-
 .../commons/core/data/AtomDeserializer.java     |   1 +
 59 files changed, 1551 insertions(+), 164 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractAnnotatable.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractAnnotatable.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractAnnotatable.java
deleted file mode 100644
index b0a1f4f..0000000
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractAnnotatable.java
+++ /dev/null
@@ -1,34 +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.ext.proxy.api;
-
-import java.io.Serializable;
-import java.util.Collection;
-
-public interface AbstractAnnotatable extends Serializable {
-
-  void addAnnotation(Class<? extends AbstractTerm> term, Object value);
-
-  void removeAnnotation(Class<? extends AbstractTerm> term);
-
-  Object getAnnotation(Class<? extends AbstractTerm> term);
-
-  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
-
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Annotatable.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Annotatable.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Annotatable.java
new file mode 100644
index 0000000..08af72b
--- /dev/null
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Annotatable.java
@@ -0,0 +1,34 @@
+/*
+ * 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.ext.proxy.api;
+
+import java.io.Serializable;
+import java.util.Collection;
+
+public interface Annotatable extends Serializable {
+
+  void addAnnotation(Class<? extends AbstractTerm> term, Object value);
+
+  void removeAnnotation(Class<? extends AbstractTerm> term);
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
+
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/annotations/AnnotationsForNavigationProperty.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/annotations/AnnotationsForNavigationProperty.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/annotations/AnnotationsForNavigationProperty.java
new file mode 100644
index 0000000..ac57ee9
--- /dev/null
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/annotations/AnnotationsForNavigationProperty.java
@@ -0,0 +1,34 @@
+/*
+ * 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.ext.proxy.api.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+public @interface AnnotationsForNavigationProperty {
+
+  String name();
+
+  String type();
+
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/annotations/AnnotationsForProperty.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/annotations/AnnotationsForProperty.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/annotations/AnnotationsForProperty.java
new file mode 100644
index 0000000..1e317b2
--- /dev/null
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/annotations/AnnotationsForProperty.java
@@ -0,0 +1,34 @@
+/*
+ * 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.ext.proxy.api.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+public @interface AnnotationsForProperty {
+
+  String name();
+
+  String type();
+
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractStructuredInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractStructuredInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractStructuredInvocationHandler.java
index 45befde..5f04408 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractStructuredInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractStructuredInvocationHandler.java
@@ -26,6 +26,8 @@ import java.lang.reflect.Type;
 import java.net.URI;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.olingo.client.api.CommonEdmEnabledODataClient;
 import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
@@ -66,6 +68,12 @@ public abstract class AbstractStructuredInvocationHandler extends AbstractInvoca
 
   protected Object internal;
 
+  private final Map<String, AnnotatableInvocationHandler> propAnnotatableHandlers =
+          new HashMap<String, AnnotatableInvocationHandler>();
+
+  private final Map<String, AnnotatableInvocationHandler> navPropAnnotatableHandlers =
+          new HashMap<String, AnnotatableInvocationHandler>();
+
   protected AbstractStructuredInvocationHandler(
           final CommonEdmEnabledODataClient<?> client,
           final Class<?> typeRef,
@@ -91,6 +99,10 @@ public abstract class AbstractStructuredInvocationHandler extends AbstractInvoca
     this.entityHandler = entityHandler == this ? null : entityHandler;
   }
 
+  public Object getInternal() {
+    return internal;
+  }
+
   public EntityInvocationHandler getEntityHandler() {
     return entityHandler == null
             ? this instanceof EntityInvocationHandler
@@ -126,6 +138,13 @@ public abstract class AbstractStructuredInvocationHandler extends AbstractInvoca
               Thread.currentThread().getContextClassLoader(),
               new Class<?>[] {returnType},
               ComplexFactoryInvocationHandler.getInstance(getEntityHandler(), this));
+    } else if ("annotations".equals(method.getName()) && ArrayUtils.isEmpty(args)) {
+      final Class<?> returnType = method.getReturnType();
+
+      return Proxy.newProxyInstance(
+              Thread.currentThread().getContextClassLoader(),
+              new Class<?>[] {returnType},
+              AnnotatationsInvocationHandler.getInstance(getEntityHandler(), this));
     } else if (method.getName().startsWith("get")) {
       // Assumption: for each getter will always exist a setter and viceversa.
       // get method annotation and check if it exists as expected
@@ -304,6 +323,22 @@ public abstract class AbstractStructuredInvocationHandler extends AbstractInvoca
     addLinkChanges(property, value);
   }
 
+  public Map<String, AnnotatableInvocationHandler> getPropAnnotatableHandlers() {
+    return propAnnotatableHandlers;
+  }
+
+  public void putPropAnnotatableHandler(final String propName, final AnnotatableInvocationHandler handler) {
+    propAnnotatableHandlers.put(propName, handler);
+  }
+
+  public Map<String, AnnotatableInvocationHandler> getNavPropAnnotatableHandlers() {
+    return navPropAnnotatableHandlers;
+  }
+
+  public void putNavPropAnnotatableHandler(final String navPropName, final AnnotatableInvocationHandler handler) {
+    navPropAnnotatableHandlers.put(navPropName, handler);
+  }
+
   protected abstract void setPropertyValue(final Property property, final Object value);
 
   protected abstract void addLinkChanges(final NavigationProperty navProp, final Object value);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AnnotatableInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AnnotatableInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AnnotatableInvocationHandler.java
new file mode 100644
index 0000000..c0a4e53
--- /dev/null
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AnnotatableInvocationHandler.java
@@ -0,0 +1,180 @@
+/*
+ * 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.ext.proxy.commons;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.olingo.client.api.CommonEdmEnabledODataClient;
+import org.apache.olingo.commons.api.domain.v4.ODataAnnotation;
+import org.apache.olingo.commons.api.domain.v4.ODataEntity;
+import org.apache.olingo.commons.api.domain.v4.ODataLinkedComplexValue;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
+import org.apache.olingo.ext.proxy.api.Annotatable;
+import org.apache.olingo.ext.proxy.api.annotations.Namespace;
+import org.apache.olingo.ext.proxy.api.annotations.Term;
+import org.apache.olingo.ext.proxy.context.AttachedEntityStatus;
+import org.apache.olingo.ext.proxy.utils.CoreUtils;
+
+public class AnnotatableInvocationHandler extends AbstractInvocationHandler implements Annotatable {
+
+  private static final long serialVersionUID = 3111228269617223332L;
+
+  private final String propName;
+
+  private final String navPropName;
+
+  private final EntityInvocationHandler entityHandler;
+
+  private final AbstractStructuredInvocationHandler targetHandler;
+
+  private final Map<Class<? extends AbstractTerm>, Object> annotations =
+          new HashMap<Class<? extends AbstractTerm>, Object>();
+
+  public AnnotatableInvocationHandler(
+          final CommonEdmEnabledODataClient<?> client,
+          final EntityContainerInvocationHandler containerHandler,
+          final String propName,
+          final String navPropName,
+          final EntityInvocationHandler entityHandler,
+          final AbstractStructuredInvocationHandler targetHandler) {
+
+    super(client, containerHandler);
+
+    this.propName = propName;
+    this.navPropName = navPropName;
+    this.entityHandler = entityHandler;
+    this.targetHandler = targetHandler;
+  }
+
+  @Override
+  public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {
+    return invokeSelfMethod(method, args);
+  }
+
+  public Map<Class<? extends AbstractTerm>, Object> getAnnotations() {
+    return annotations;
+  }
+
+  private List<ODataAnnotation> internalAnnotations() {
+    List<ODataAnnotation> result = Collections.<ODataAnnotation>emptyList();
+
+    if (entityHandler.getEntity() instanceof ODataEntity) {
+      if (targetHandler.getInternal() instanceof ODataEntity) {
+        result = propName == null
+                ? ((org.apache.olingo.commons.api.domain.v4.ODataLink) ((ODataEntity) targetHandler.getInternal()).
+                getNavigationLink(navPropName)).getAnnotations()
+                : ((ODataEntity) targetHandler.getInternal()).getProperty(propName).getAnnotations();
+      } else if (targetHandler.getInternal() instanceof ODataLinkedComplexValue) {
+        result = propName == null
+                ? ((org.apache.olingo.commons.api.domain.v4.ODataLink) ((ODataLinkedComplexValue) targetHandler.
+                getInternal()).getNavigationLink(navPropName)).getAnnotations()
+                : ((ODataLinkedComplexValue) targetHandler.getInternal()).get(propName).getAnnotations();
+      }
+    }
+
+    return result;
+  }
+
+  @Override
+  public void addAnnotation(final Class<? extends AbstractTerm> term, final Object value) {
+    this.annotations.put(term, value);
+
+    if (value != null) {
+      Collection<?> coll;
+      if (Collection.class.isAssignableFrom(value.getClass())) {
+        coll = Collection.class.cast(value);
+      } else {
+        coll = Collections.singleton(value);
+      }
+
+      for (Object item : coll) {
+        if (item instanceof Proxy) {
+          final InvocationHandler handler = Proxy.getInvocationHandler(item);
+          if ((handler instanceof ComplexInvocationHandler)
+                  && ((ComplexInvocationHandler) handler).getEntityHandler() == null) {
+            ((ComplexInvocationHandler) handler).setEntityHandler(entityHandler);
+          }
+        }
+      }
+    }
+
+    entityHandler.attach(AttachedEntityStatus.CHANGED);
+    if (navPropName == null) {
+      targetHandler.putPropAnnotatableHandler(propName, this);
+    } else {
+      targetHandler.putNavPropAnnotatableHandler(navPropName, this);
+    }
+  }
+
+  @Override
+  public void removeAnnotation(final Class<? extends AbstractTerm> term) {
+    this.annotations.remove(term);
+
+    entityHandler.attach(AttachedEntityStatus.CHANGED);
+    if (navPropName == null) {
+      targetHandler.putPropAnnotatableHandler(propName, this);
+    } else {
+      targetHandler.putNavPropAnnotatableHandler(navPropName, this);
+    }
+  }
+
+  @Override
+  public Object getAnnotation(final Class<? extends AbstractTerm> term) {
+    Object res = null;
+
+    if (annotations.containsKey(term)) {
+      res = annotations.get(term);
+    } else if (entityHandler.getEntity() instanceof ODataEntity) {
+      try {
+        final Term termAnn = term.getAnnotation(Term.class);
+        final Namespace namespaceAnn = term.getAnnotation(Namespace.class);
+        ODataAnnotation annotation = null;
+        for (ODataAnnotation _annotation : internalAnnotations()) {
+          if ((namespaceAnn.value() + "." + termAnn.name()).equals(_annotation.getTerm())) {
+            annotation = _annotation;
+          }
+        }
+        res = annotation == null || annotation.hasNullValue()
+                ? null
+                : CoreUtils.getObjectFromODataValue(
+                        client, annotation.getValue(), null, targetHandler.getEntityHandler());
+        if (res != null) {
+          annotations.put(term, res);
+        }
+      } catch (Exception e) {
+        throw new IllegalArgumentException("Error getting annotation for term '" + term.getName() + "'", e);
+      }
+    }
+
+    return res;
+  }
+
+  @Override
+  public Collection<Class<? extends AbstractTerm>> getAnnotationTerms() {
+    return entityHandler.getEntity() instanceof ODataEntity
+            ? CoreUtils.getAnnotationTerms(internalAnnotations())
+            : Collections.<Class<? extends AbstractTerm>>emptyList();
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AnnotatationsInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AnnotatationsInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AnnotatationsInvocationHandler.java
new file mode 100644
index 0000000..d9ef3ea
--- /dev/null
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AnnotatationsInvocationHandler.java
@@ -0,0 +1,91 @@
+/*
+ * 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.ext.proxy.commons;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import org.apache.olingo.client.api.CommonEdmEnabledODataClient;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.utils.ClassUtils;
+
+public class AnnotatationsInvocationHandler extends AbstractInvocationHandler {
+
+  private static final long serialVersionUID = -1993362719908718985L;
+
+  private final EntityInvocationHandler entityHandler;
+
+  private final AbstractStructuredInvocationHandler targetHandler;
+
+  static AnnotatationsInvocationHandler getInstance(
+          final EntityInvocationHandler entityHandler,
+          final AbstractStructuredInvocationHandler targetHandler) {
+
+    return new AnnotatationsInvocationHandler(
+            entityHandler == null ? null : entityHandler.containerHandler.client,
+            targetHandler == null
+            ? entityHandler == null ? null : entityHandler.containerHandler : targetHandler.containerHandler,
+            entityHandler,
+            targetHandler);
+  }
+
+  private AnnotatationsInvocationHandler(
+          final CommonEdmEnabledODataClient<?> client,
+          final EntityContainerInvocationHandler containerHandler,
+          final EntityInvocationHandler entityHandler,
+          final AbstractStructuredInvocationHandler targetHandler) {
+
+    super(client, containerHandler);
+    this.targetHandler = targetHandler;
+    this.entityHandler = entityHandler;
+  }
+
+  @Override
+  public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {
+    if (isSelfMethod(method, args)) {
+      return invokeSelfMethod(method, args);
+    } else if (method.getName().startsWith("get") && method.getName().endsWith("Annotations")) {
+      final Method getter = proxy.getClass().getInterfaces()[0].getMethod(method.getName());
+
+      String propName = null;
+      String navPropName = null;
+
+      final AnnotationsForProperty annForProp = ClassUtils.getAnnotation(AnnotationsForProperty.class, getter);
+      if (annForProp == null) {
+        final AnnotationsForNavigationProperty annForNavProp =
+                ClassUtils.getAnnotation(AnnotationsForNavigationProperty.class, getter);
+        if (annForNavProp == null) {
+          throw new UnsupportedOperationException("Unsupported method " + method.getName());
+        }
+
+        navPropName = annForNavProp.name();
+      } else {
+        propName = annForProp.name();
+      }
+
+      return Proxy.newProxyInstance(
+              Thread.currentThread().getContextClassLoader(),
+              new Class<?>[] {method.getReturnType()},
+              new AnnotatableInvocationHandler(
+                      client, containerHandler, propName, navPropName, entityHandler, targetHandler));
+    } else {
+      throw new NoSuchMethodException(method.getName());
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ComplexFactoryInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ComplexFactoryInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ComplexFactoryInvocationHandler.java
index 74ea465..2429a02 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ComplexFactoryInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ComplexFactoryInvocationHandler.java
@@ -45,6 +45,7 @@ class ComplexFactoryInvocationHandler extends AbstractInvocationHandler implemen
   static ComplexFactoryInvocationHandler getInstance(
           final EntityInvocationHandler entityHandler,
           final AbstractStructuredInvocationHandler targetHandler) {
+    
     return new ComplexFactoryInvocationHandler(
             entityHandler == null ? null : entityHandler.containerHandler.client,
             targetHandler == null

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ContainerImpl.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ContainerImpl.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ContainerImpl.java
index 86a30b0..1a6e6d9 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ContainerImpl.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ContainerImpl.java
@@ -242,10 +242,10 @@ class ContainerImpl implements Container {
             client.getServiceVersion().compareTo(ODataServiceVersion.V30) <= 0
             ? ((org.apache.olingo.client.api.v3.EdmEnabledODataClient) client).getCUDRequestFactory().
             getEntityUpdateRequest(handler.getEntityURI(),
-            org.apache.olingo.client.api.communication.request.cud.v3.UpdateType.PATCH, changes)
+                    org.apache.olingo.client.api.communication.request.cud.v3.UpdateType.PATCH, changes)
             : ((org.apache.olingo.client.api.v4.EdmEnabledODataClient) client).getCUDRequestFactory().
             getEntityUpdateRequest(handler.getEntityURI(),
-            org.apache.olingo.client.api.communication.request.cud.v4.UpdateType.PATCH, changes);
+                    org.apache.olingo.client.api.communication.request.cud.v4.UpdateType.PATCH, changes);
 
     req.setPrefer(new ODataPreferences(client.getServiceVersion()).returnContent());
 
@@ -268,10 +268,10 @@ class ContainerImpl implements Container {
             client.getServiceVersion().compareTo(ODataServiceVersion.V30) <= 0
             ? ((org.apache.olingo.client.api.v3.EdmEnabledODataClient) client).getCUDRequestFactory().
             getEntityUpdateRequest(uri,
-            org.apache.olingo.client.api.communication.request.cud.v3.UpdateType.PATCH, changes)
+                    org.apache.olingo.client.api.communication.request.cud.v3.UpdateType.PATCH, changes)
             : ((org.apache.olingo.client.api.v4.EdmEnabledODataClient) client).getCUDRequestFactory().
             getEntityUpdateRequest(uri,
-            org.apache.olingo.client.api.communication.request.cud.v4.UpdateType.PATCH, changes);
+                    org.apache.olingo.client.api.communication.request.cud.v4.UpdateType.PATCH, changes);
 
     req.setPrefer(new ODataPreferences(client.getServiceVersion()).returnContent());
 
@@ -322,6 +322,11 @@ class ContainerImpl implements Container {
       if (entity instanceof ODataEntity) {
         ((ODataEntity) entity).getAnnotations().clear();
         CoreUtils.addAnnotations(client, handler.getAnnotations(), (ODataEntity) entity);
+
+        for (Map.Entry<String, AnnotatableInvocationHandler> entry : handler.getPropAnnotatableHandlers().entrySet()) {
+          CoreUtils.addAnnotations(client,
+                  entry.getValue().getAnnotations(), ((ODataEntity) entity).getProperty(entry.getKey()));
+        }
       }
     }
 
@@ -377,6 +382,16 @@ class ContainerImpl implements Container {
       }
     }
 
+    if (entity instanceof ODataEntity) {
+      for (Map.Entry<String, AnnotatableInvocationHandler> entry
+              : handler.getNavPropAnnotatableHandlers().entrySet()) {
+
+        CoreUtils.addAnnotations(client,
+                entry.getValue().getAnnotations(),
+                (org.apache.olingo.commons.api.domain.v4.ODataLink) entity.getNavigationLink(entry.getKey()));
+      }
+    }
+
     // insert into the batch
     LOG.debug("{}: Insert '{}' into the batch", pos, handler);
     final AttachedEntityStatus processedStatus = batch(handler, entity, changeset);
@@ -402,7 +417,7 @@ class ContainerImpl implements Container {
           final URI targetURI = currentStatus == AttachedEntityStatus.NEW
                   ? URI.create("$" + startingPos + "/$value")
                   : URIUtils.getURI(
-                  factory.getServiceRoot(), handler.getEntity().getEditLink().toASCIIString() + "/$value");
+                          factory.getServiceRoot(), handler.getEntity().getEditLink().toASCIIString() + "/$value");
 
           batchUpdateMediaEntity(handler, targetURI, handler.getStreamChanges(), changeset);
 
@@ -415,8 +430,8 @@ class ContainerImpl implements Container {
       for (Map.Entry<String, InputStream> streamedChanges : handler.getStreamedPropertyChanges().entrySet()) {
         final URI targetURI = currentStatus == AttachedEntityStatus.NEW
                 ? URI.create("$" + startingPos) : URIUtils.getURI(
-                factory.getServiceRoot(),
-                CoreUtils.getMediaEditLink(streamedChanges.getKey(), entity).toASCIIString());
+                        factory.getServiceRoot(),
+                        CoreUtils.getMediaEditLink(streamedChanges.getKey(), entity).toASCIIString());
 
         batchUpdateMediaResource(handler, targetURI, streamedChanges.getValue(), changeset);
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityInvocationHandler.java
index 5be9bb8..2d9065a 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityInvocationHandler.java
@@ -44,6 +44,7 @@ import org.apache.olingo.commons.api.domain.v4.ODataEntity;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.format.ODataMediaFormat;
 import org.apache.olingo.ext.proxy.api.AbstractTerm;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
@@ -53,7 +54,7 @@ import org.apache.olingo.ext.proxy.context.AttachedEntityStatus;
 import org.apache.olingo.ext.proxy.context.EntityUUID;
 import org.apache.olingo.ext.proxy.utils.CoreUtils;
 
-public class EntityInvocationHandler extends AbstractStructuredInvocationHandler {
+public class EntityInvocationHandler extends AbstractStructuredInvocationHandler implements Annotatable {
 
   private static final long serialVersionUID = 2629912294765040037L;
 
@@ -332,7 +333,6 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
   }
 
   public Object getStreamedProperty(final String name) {
-
     InputStream res = streamedPropertyChanges.get(name);
 
     try {
@@ -402,6 +402,7 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
     updateLinksTag(checkpoint);
   }
 
+  @Override
   public void addAnnotation(final Class<? extends AbstractTerm> term, final Object value) {
     this.annotations.put(term, value);
 
@@ -427,10 +428,13 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
     attach(AttachedEntityStatus.CHANGED);
   }
 
+  @Override
   public void removeAnnotation(final Class<? extends AbstractTerm> term) {
     this.annotations.remove(term);
+    attach(AttachedEntityStatus.CHANGED);
   }
 
+  @Override
   public Object getAnnotation(final Class<? extends AbstractTerm> term) {
     Object res = null;
 
@@ -460,6 +464,7 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
     return res;
   }
 
+  @Override
   public Collection<Class<? extends AbstractTerm>> getAnnotationTerms() {
     return getEntity() instanceof ODataEntity
             ? CoreUtils.getAnnotationTerms(((ODataEntity) getEntity()).getAnnotations())

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java
index d2f5bfc..d28a319 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java
@@ -40,7 +40,7 @@ import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
 import org.apache.olingo.ext.proxy.utils.ClassUtils;
 
-class OperationInvocationHandler extends AbstractInvocationHandler implements OperationExecutor {
+final class OperationInvocationHandler extends AbstractInvocationHandler implements OperationExecutor {
 
   private static final long serialVersionUID = 2629912294765040027L;
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java
index 5fbdc69..b32e80e 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java
@@ -43,6 +43,7 @@ import org.apache.olingo.commons.api.domain.CommonODataProperty;
 import org.apache.olingo.commons.api.domain.ODataLink;
 import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
 import org.apache.olingo.commons.api.domain.ODataValue;
+import org.apache.olingo.commons.api.domain.v4.ODataAnnotatable;
 import org.apache.olingo.commons.api.domain.v4.ODataAnnotation;
 import org.apache.olingo.commons.api.domain.v4.ODataEntity;
 import org.apache.olingo.commons.api.domain.v4.ODataEnumValue;
@@ -312,7 +313,7 @@ public final class CoreUtils {
   public static void addAnnotations(
           final CommonEdmEnabledODataClient<?> client,
           final Map<Class<? extends AbstractTerm>, Object> annotations,
-          final ODataEntity entity) {
+          final ODataAnnotatable annotatable) {
 
     for (Map.Entry<Class<? extends AbstractTerm>, Object> entry : annotations.entrySet()) {
       final Namespace nsAnn = entry.getKey().getAnnotation(Namespace.class);
@@ -322,7 +323,7 @@ public final class CoreUtils {
       if (term == null) {
         LOG.error("Could not find term for class {}", entry.getKey().getName());
       } else {
-        entity.getAnnotations().add(getODataAnnotation(
+        annotatable.getAnnotations().add(getODataAnnotation(
                 client, term.getFullQualifiedName().toString(), term.getType(), entry.getValue()));
       }
     }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/ext/pojogen-maven-plugin/src/main/resources/complexType.vm
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/resources/complexType.vm b/ext/pojogen-maven-plugin/src/main/resources/complexType.vm
index f5881f6..d7acbff 100644
--- a/ext/pojogen-maven-plugin/src/main/resources/complexType.vm
+++ b/ext/pojogen-maven-plugin/src/main/resources/complexType.vm
@@ -18,11 +18,14 @@
  *#
 package ${package};
 
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.ComplexType;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 #foreach($ns in $namespaces)
 import ${basePackage}.${ns}.*;
 import ${basePackage}.${ns}.types.*;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/ext/pojogen-maven-plugin/src/main/resources/entityType.vm
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/resources/entityType.vm b/ext/pojogen-maven-plugin/src/main/resources/entityType.vm
index e66f936..5c54e5f 100644
--- a/ext/pojogen-maven-plugin/src/main/resources/entityType.vm
+++ b/ext/pojogen-maven-plugin/src/main/resources/entityType.vm
@@ -20,6 +20,8 @@
 package ${package};
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -28,7 +30,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -63,7 +65,7 @@ import javax.xml.datatype.Duration;
         isAbstract = $entityType.Abstract#if($entityType.getBaseType()),
         baseType = "$entityType.getBaseType().getFullQualifiedName().toString()"#end)
 public interface $utility.capitalize($entityType.Name) 
-  extends AbstractAnnotatable,#if( $entityType.getBaseType() )$utility.getJavaType($entityType.getBaseType())#{elseif}( $entityType.isOpenType() )AbstractOpenType#{else}Serializable#end {
+  extends Annotatable,#if( $entityType.getBaseType() )$utility.getJavaType($entityType.getBaseType())#{elseif}( $entityType.isOpenType() )AbstractOpenType#{else}Serializable#end {
 
 #set( $keys = [] )
 #foreach($key in $entityType.KeyPropertyRefs)
@@ -198,5 +200,31 @@ public interface $utility.capitalize($entityType.Name)
 
     #end
     }
-#end   
+#end
+
+    #if( $entityType.baseType )
+    @Override
+    #end
+    Annotations annotations();
+
+    interface Annotations #if( $entityType.baseType )
+           extends ${utility.getJavaType($entityType.getBaseType())}.Annotations#end{
+
+    #foreach($propertyName in $entityType.PropertyNames)
+    #set($property = $entityType.getProperty($propertyName))
+        @AnnotationsForProperty(name = "$property.Name",
+                   type = "$property.Type.FullQualifiedName.toString()")
+        Annotatable get$utility.capitalize($property.Name)Annotations();
+
+    #end
+
+    #foreach($propertyName in $entityType.NavigationPropertyNames)
+    #set($property = $entityType.getNavigationProperty($propertyName))
+    #set($type = $utility.getNavigationType($property))
+
+        @AnnotationsForNavigationProperty(name = "$property.Name", 
+                  type = "$type")
+        Annotatable get$utility.capitalize($property.Name)Annotations();
+    #end
+    }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/ext/pojogen-maven-plugin/src/main/resources/v40/complexType.vm
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/resources/v40/complexType.vm b/ext/pojogen-maven-plugin/src/main/resources/v40/complexType.vm
index 5ee61e7..caba995 100644
--- a/ext/pojogen-maven-plugin/src/main/resources/v40/complexType.vm
+++ b/ext/pojogen-maven-plugin/src/main/resources/v40/complexType.vm
@@ -81,3 +81,29 @@ public interface $utility.capitalize($complexType.Name)
     #end
     }
 #end
+
+    #if( $complexType.baseType )
+    @Override
+    #end
+    Annotations annotations();
+
+    interface Annotations #if( $complexType.baseType )
+           extends ${utility.getJavaType($complexType.getBaseType())}.Annotations#end{
+
+    #foreach($propertyName in $complexType.PropertyNames)
+    #set($property = $complexType.getProperty($propertyName))
+        @AnnotationsForProperty(name = "$property.Name",
+                   type = "$property.Type.FullQualifiedName.toString()")
+        Annotatable get$utility.capitalize($property.Name)Annotations();
+
+    #end
+
+    #foreach($propertyName in $complexType.NavigationPropertyNames)
+    #set($property = $complexType.getNavigationProperty($propertyName))
+    #set($type = $utility.getNavigationType($property))
+
+        @AnnotationsForNavigationProperty(name = "$property.Name", 
+                  type = "$type")
+        Annotatable get$utility.capitalize($property.Name)Annotations();
+    #end
+    }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/main/java/org/apache/olingo/fit/utils/DataBinder.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/DataBinder.java b/fit/src/main/java/org/apache/olingo/fit/utils/DataBinder.java
index f79b221..4dbd725 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/DataBinder.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/DataBinder.java
@@ -89,6 +89,7 @@ public class DataBinder {
 
   public JSONEntityImpl toJSONEntity(final AtomEntityImpl atomEntity) {
     final JSONEntityImpl jsonEntity = new JSONEntityImpl();
+    jsonEntity.getAnnotations().addAll(atomEntity.getAnnotations());
 
     BeanUtils.copyProperties(atomEntity, jsonEntity, "baseURI", "properties", "links");
     // This shouldn't ever happen, but...
@@ -126,6 +127,7 @@ public class DataBinder {
       jlink.setTitle(link.getTitle());
       jlink.setType(link.getType());
       jlink.setRel(link.getRel());
+      jlink.getAnnotations().addAll(link.getAnnotations());
 
       if (link.getInlineEntity() instanceof AtomEntityImpl) {
         final Entity inlineEntity = link.getInlineEntity();
@@ -184,6 +186,7 @@ public class DataBinder {
       final Link alink = new LinkImpl();
       alink.setHref(link.getHref());
       alink.setTitle(link.getTitle());
+      alink.getAnnotations().addAll(link.getAnnotations());
 
       final NavigationProperty navPropDetails =
               metadata.getEntityOrComplexType(jsonEntity.getType()).getNavigationProperty(link.getTitle());
@@ -218,6 +221,7 @@ public class DataBinder {
       if (navProperties.containsKey(property.getName())) {
         final Link alink = new LinkImpl();
         alink.setTitle(property.getName());
+        alink.getAnnotations().addAll(property.getAnnotations());
 
         alink.setType(navProperties.get(property.getName()).isEntitySet()
                 ? Constants.get(version, ConstantKey.ATOM_LINK_FEED)
@@ -256,22 +260,23 @@ public class DataBinder {
     return atomEntity;
   }
 
-  public JSONPropertyImpl toJSONProperty(final AtomPropertyImpl atomproperty) {
-    final JSONPropertyImpl jsonproperty = new JSONPropertyImpl();
-    BeanUtils.copyProperties(atomproperty, jsonproperty, "value");
+  public JSONPropertyImpl toJSONProperty(final AtomPropertyImpl atomProperty) {
+    final JSONPropertyImpl jsonProperty = new JSONPropertyImpl();
+    BeanUtils.copyProperties(atomProperty, jsonProperty, "value");
+    jsonProperty.getAnnotations().addAll(atomProperty.getAnnotations());
 
-    if (atomproperty.getValue().isComplex()) {
+    if (atomProperty.getValue().isComplex()) {
       final ComplexValueImpl complex = new ComplexValueImpl();
-      jsonproperty.setValue(complex);
+      jsonProperty.setValue(complex);
 
-      for (Property field : atomproperty.getValue().asComplex().get()) {
+      for (Property field : atomProperty.getValue().asComplex().get()) {
         complex.get().add(toJSONProperty((AtomPropertyImpl) field));
       }
-    } else if (atomproperty.getValue().isCollection()) {
+    } else if (atomProperty.getValue().isCollection()) {
       final CollectionValueImpl collection = new CollectionValueImpl();
-      jsonproperty.setValue(collection);
+      jsonProperty.setValue(collection);
 
-      for (Value element : atomproperty.getValue().asCollection().get()) {
+      for (Value element : atomProperty.getValue().asCollection().get()) {
         if (element.isComplex()) {
           final ComplexValueImpl complex = new ComplexValueImpl();
           collection.get().add(complex);
@@ -284,15 +289,16 @@ public class DataBinder {
         }
       }
     } else {
-      jsonproperty.setValue(atomproperty.getValue());
+      jsonProperty.setValue(atomProperty.getValue());
     }
 
-    return jsonproperty;
+    return jsonProperty;
   }
 
   public AtomPropertyImpl toAtomProperty(final JSONPropertyImpl jsonProperty, final String entryType) {
-    final AtomPropertyImpl atomproperty = new AtomPropertyImpl();
-    atomproperty.setName(jsonProperty.getName());
+    final AtomPropertyImpl atomProperty = new AtomPropertyImpl();
+    atomProperty.setName(jsonProperty.getName());
+    atomProperty.getAnnotations().addAll(jsonProperty.getAnnotations());
 
     final EntityType entityType = entryType == null
             ? null
@@ -304,21 +310,21 @@ public class DataBinder {
             || jsonProperty.getName() == null
             || !jsonProperty.getType().startsWith(EdmPrimitiveType.EDM_NAMESPACE))) {
 
-      atomproperty.setType(jsonProperty.getType());
+      atomProperty.setType(jsonProperty.getType());
     } else if (entityType != null) {
-      atomproperty.setType(entityType.getProperty(jsonProperty.getName()).getType());
+      atomProperty.setType(entityType.getProperty(jsonProperty.getName()).getType());
     }
 
     if (jsonProperty.getValue().isComplex()) {
       final ComplexValueImpl complex = new ComplexValueImpl();
-      atomproperty.setValue(complex);
+      atomProperty.setValue(complex);
 
       for (Property field : jsonProperty.getValue().asComplex().get()) {
-        complex.get().add(toAtomProperty((JSONPropertyImpl) field, atomproperty.getType()));
+        complex.get().add(toAtomProperty((JSONPropertyImpl) field, atomProperty.getType()));
       }
     } else if (jsonProperty.getValue().isCollection()) {
       final CollectionValueImpl collection = new CollectionValueImpl();
-      atomproperty.setValue(collection);
+      atomProperty.setValue(collection);
 
       for (Value element : jsonProperty.getValue().asCollection().get()) {
         if (element instanceof ComplexValueImpl) {
@@ -326,16 +332,16 @@ public class DataBinder {
           collection.get().add(complex);
 
           for (Property field : element.asComplex().get()) {
-            complex.get().add(toAtomProperty((JSONPropertyImpl) field, atomproperty.getType()));
+            complex.get().add(toAtomProperty((JSONPropertyImpl) field, atomProperty.getType()));
           }
         } else {
           collection.get().add(element);
         }
       }
     } else {
-      atomproperty.setValue(jsonProperty.getValue());
+      atomProperty.setValue(jsonProperty.getValue());
     }
 
-    return atomproperty;
+    return atomProperty;
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/main/resources/V40/Boss/entity.full.json
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Boss/entity.full.json b/fit/src/main/resources/V40/Boss/entity.full.json
index d89b4a5..5444c2c 100644
--- a/fit/src/main/resources/V40/Boss/entity.full.json
+++ b/fit/src/main/resources/V40/Boss/entity.full.json
@@ -6,6 +6,7 @@
   "@Microsoft.Test.OData.Services.ODataWCFService.IsBoss": true,
   "PersonID": 2,
   "FirstName": "Jill",
+  "LastName@Microsoft.Test.OData.Services.ODataWCFService.IsBoss": false,
   "LastName": "Jones",
   "MiddleName": null,
   "HomeAddress": null,
@@ -31,6 +32,7 @@
   "TimeBetweenLastTwoOrders": "PT0.0000002S",
   "Parent@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Boss/Microsoft.Test.OData.Services.ODataWCFService.Customer/Parent/$ref",
   "Parent@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Boss/Microsoft.Test.OData.Services.ODataWCFService.Customer/Parent",
+  "Orders@Microsoft.Test.OData.Services.ODataWCFService.IsBoss": false,
   "Orders@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Boss/Microsoft.Test.OData.Services.ODataWCFService.Customer/Orders/$ref",
   "Orders@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Boss/Microsoft.Test.OData.Services.ODataWCFService.Customer/Orders",
   "Company@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Boss/Microsoft.Test.OData.Services.ODataWCFService.Customer/Company/$ref",

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/main/resources/V40/Boss/entity.xml
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Boss/entity.xml b/fit/src/main/resources/V40/Boss/entity.xml
index 72ccb4c..41c2248 100644
--- a/fit/src/main/resources/V40/Boss/entity.xml
+++ b/fit/src/main/resources/V40/Boss/entity.xml
@@ -25,7 +25,9 @@
   <link rel="http://docs.oasis-open.org/odata/ns/relatedlinks/Parent" title="Parent" href="http://localhost:9080/stub/StaticService/V40/Static.svc/Boss/Microsoft.Test.OData.Services.ODataWCFService.Customer/Parent/$ref" type="application/xml"/>
   <link rel="http://docs.oasis-open.org/odata/ns/relatedlinks/Orders" title="Orders" href="http://localhost:9080/stub/StaticService/V40/Static.svc/Boss/Microsoft.Test.OData.Services.ODataWCFService.Customer/Orders/$ref" type="application/xml"/>
   <link rel="http://docs.oasis-open.org/odata/ns/relatedlinks/Company" title="Company" href="http://localhost:9080/stub/StaticService/V40/Static.svc/Boss/Microsoft.Test.OData.Services.ODataWCFService.Customer/Company/$ref" type="application/xml"/>
-  <link rel="http://docs.oasis-open.org/odata/ns/related/Parent" title="Parent" href="http://localhost:9080/stub/StaticService/V40/Static.svc/Boss/Microsoft.Test.OData.Services.ODataWCFService.Customer/Parent" type="application/atom+xml;type=entry"/>
+  <link rel="http://docs.oasis-open.org/odata/ns/related/Parent" title="Parent" href="http://localhost:9080/stub/StaticService/V40/Static.svc/Boss/Microsoft.Test.OData.Services.ODataWCFService.Customer/Parent" type="application/atom+xml;type=entry">
+    <m:annotation term="Microsoft.Test.OData.Services.ODataWCFService.IsBoss" m:type="Boolean">false</m:annotation>
+  </link>
   <link rel="http://docs.oasis-open.org/odata/ns/related/Orders" title="Orders" href="http://localhost:9080/stub/StaticService/V40/Static.svc/Boss/Microsoft.Test.OData.Services.ODataWCFService.Customer/Orders" type="application/atom+xml;type=entry"/>
   <link rel="http://docs.oasis-open.org/odata/ns/related/Company" title="Company" href="http://localhost:9080/stub/StaticService/V40/Static.svc/Boss/Microsoft.Test.OData.Services.ODataWCFService.Customer/Company" type="application/atom+xml;type=entry"/>
   <content type="application/xml">
@@ -33,6 +35,7 @@
       <d:PersonID m:type="Int32">2</d:PersonID>
       <d:FirstName>Jill</d:FirstName>
       <d:LastName>Jones</d:LastName>
+      <m:annotation term="Microsoft.Test.OData.Services.ODataWCFService.IsBoss" target="LastName" m:type="Boolean">false</m:annotation>
       <d:MiddleName m:null="true"/>
       <d:HomeAddress m:null="true"/>
       <d:Home m:type="GeographyPoint">

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/SingletonTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/SingletonTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/SingletonTestITCase.java
index 9460297..ae1ef53 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/SingletonTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/SingletonTestITCase.java
@@ -19,9 +19,10 @@
 package org.apache.olingo.fit.proxy.v4;
 
 import static org.junit.Assert.assertEquals;
-
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Company;
 import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.CompanyCategory;
 import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.IsBoss;
@@ -51,13 +52,26 @@ public class SingletonTestITCase extends AbstractTestITCase {
   public void readWithAnnotations() {
     final Company company = container.getCompany().get();
     assertTrue(company.getAnnotationTerms().isEmpty());
-    
+
     final Person boss = container.getBoss().get();
     assertEquals(2, boss.getPersonID(), 0);
 
     assertEquals(1, boss.getAnnotationTerms().size());
-    final Object isBoss = boss.getAnnotation(IsBoss.class);
+    Object isBoss = boss.getAnnotation(IsBoss.class);
     assertTrue(isBoss instanceof Boolean);
     assertTrue((Boolean) isBoss);
+
+    Annotatable annotations = boss.annotations().getFirstNameAnnotations();
+    assertTrue(annotations.getAnnotationTerms().isEmpty());
+
+    annotations = boss.annotations().getLastNameAnnotations();
+    isBoss = annotations.getAnnotation(IsBoss.class);
+    assertTrue(isBoss instanceof Boolean);
+    assertFalse((Boolean) isBoss);
+
+    annotations = boss.annotations().getParentAnnotations();
+    isBoss = annotations.getAnnotation(IsBoss.class);
+    assertTrue(isBoss instanceof Boolean);
+    assertFalse((Boolean) isBoss);
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/opentype/microsoft/test/odata/services/opentypesservicev4/types/IndexedRow.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/opentype/microsoft/test/odata/services/opentypesservicev4/types/IndexedRow.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/opentype/microsoft/test/odata/services/opentypesservicev4/types/IndexedRow.java
index 18ed704..e7ec3e6 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/opentype/microsoft/test/odata/services/opentypesservicev4/types/IndexedRow.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/opentype/microsoft/test/odata/services/opentypesservicev4/types/IndexedRow.java
@@ -28,7 +28,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -60,7 +60,7 @@ import javax.xml.datatype.Duration;
         isAbstract = false,
         baseType = "Microsoft.Test.OData.Services.OpenTypesServiceV4.Row")
 public interface IndexedRow 
-  extends AbstractAnnotatable,org.apache.olingo.fit.proxy.v4.opentype.microsoft.test.odata.services.opentypesservicev4.types.Row {
+  extends Annotatable,org.apache.olingo.fit.proxy.v4.opentype.microsoft.test.odata.services.opentypesservicev4.types.Row {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/opentype/microsoft/test/odata/services/opentypesservicev4/types/Row.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/opentype/microsoft/test/odata/services/opentypesservicev4/types/Row.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/opentype/microsoft/test/odata/services/opentypesservicev4/types/Row.java
index b9b1ff8..d655cee 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/opentype/microsoft/test/odata/services/opentypesservicev4/types/Row.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/opentype/microsoft/test/odata/services/opentypesservicev4/types/Row.java
@@ -28,7 +28,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -59,7 +59,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Row 
-  extends AbstractAnnotatable,AbstractOpenType {
+  extends Annotatable,AbstractOpenType {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/opentype/microsoft/test/odata/services/opentypesservicev4/types/RowIndex.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/opentype/microsoft/test/odata/services/opentypesservicev4/types/RowIndex.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/opentype/microsoft/test/odata/services/opentypesservicev4/types/RowIndex.java
index 0397a65..213bcc7 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/opentype/microsoft/test/odata/services/opentypesservicev4/types/RowIndex.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/opentype/microsoft/test/odata/services/opentypesservicev4/types/RowIndex.java
@@ -28,7 +28,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -59,7 +59,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface RowIndex 
-  extends AbstractAnnotatable,AbstractOpenType {
+  extends Annotatable,AbstractOpenType {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Account.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Account.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Account.java
index 82d6107..12402e3 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Account.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Account.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +60,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Account 
-  extends AbstractAnnotatable,Serializable {
+  extends Annotatable,Serializable {
 
     
     @Key
@@ -208,4 +210,39 @@ public interface Account
          org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.AccountInfo newAccountInfo();
 
         }
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "AccountID",
+                   type = "Edm.Int32")
+        Annotatable getAccountIDAnnotations();
+
+            @AnnotationsForProperty(name = "Country",
+                   type = "Edm.String")
+        Annotatable getCountryAnnotations();
+
+            @AnnotationsForProperty(name = "AccountInfo",
+                   type = "Microsoft.Test.OData.Services.ODataWCFService.AccountInfo")
+        Annotatable getAccountInfoAnnotations();
+
+    
+    
+        @AnnotationsForNavigationProperty(name = "MyGiftCard", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.GiftCard")
+        Annotatable getMyGiftCardAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "MyPaymentInstruments", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument")
+        Annotatable getMyPaymentInstrumentsAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "ActiveSubscriptions", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Subscription")
+        Annotatable getActiveSubscriptionsAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "AvailableSubscriptionTemplatess", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Subscription")
+        Annotatable getAvailableSubscriptionTemplatessAnnotations();
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/AccountInfo.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/AccountInfo.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/AccountInfo.java
index 597de70..da20faa 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/AccountInfo.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/AccountInfo.java
@@ -18,10 +18,14 @@
  */
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.ComplexType;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
+import org.apache.olingo.ext.proxy.api.AbstractOpenType;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.*;
 import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.*;
 
@@ -47,7 +51,7 @@ import javax.xml.datatype.Duration;
         isOpenType = true,
         isAbstract = false)
 public interface AccountInfo 
-    extends Serializable {
+    extends AbstractOpenType,Serializable {
 
 
     @Property(name = "FirstName", 
@@ -85,4 +89,19 @@ public interface AccountInfo
     
 
 
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "FirstName",
+                   type = "Edm.String")
+        Annotatable getFirstNameAnnotations();
+
+            @AnnotationsForProperty(name = "LastName",
+                   type = "Edm.String")
+        Annotatable getLastNameAnnotations();
+
+    
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Address.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Address.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Address.java
index 2a64ec3..40ce1f2 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Address.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Address.java
@@ -18,10 +18,14 @@
  */
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.ComplexType;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
+import org.apache.olingo.ext.proxy.api.AbstractOpenType;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.*;
 import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.*;
 
@@ -102,4 +106,23 @@ public interface Address
     
 
 
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "Street",
+                   type = "Edm.String")
+        Annotatable getStreetAnnotations();
+
+            @AnnotationsForProperty(name = "City",
+                   type = "Edm.String")
+        Annotatable getCityAnnotations();
+
+            @AnnotationsForProperty(name = "PostalCode",
+                   type = "Edm.String")
+        Annotatable getPostalCodeAnnotations();
+
+    
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Asset.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Asset.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Asset.java
index ba5be31..aad3273 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Asset.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Asset.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +60,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Asset 
-  extends AbstractAnnotatable,Serializable {
+  extends Annotatable,Serializable {
 
     
     @Key
@@ -134,4 +136,23 @@ public interface Asset
 
 
 
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "AssetID",
+                   type = "Edm.Int32")
+        Annotatable getAssetIDAnnotations();
+
+            @AnnotationsForProperty(name = "Name",
+                   type = "Edm.String")
+        Annotatable getNameAnnotations();
+
+            @AnnotationsForProperty(name = "Number",
+                   type = "Edm.Int32")
+        Annotatable getNumberAnnotations();
+
+    
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Club.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Club.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Club.java
index 6016e77..79d5c41 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Club.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Club.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +60,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Club 
-  extends AbstractAnnotatable,Serializable {
+  extends Annotatable,Serializable {
 
     
     @Key
@@ -111,4 +113,19 @@ public interface Club
 
 
 
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "ClubID",
+                   type = "Edm.Int32")
+        Annotatable getClubIDAnnotations();
+
+            @AnnotationsForProperty(name = "Name",
+                   type = "Edm.String")
+        Annotatable getNameAnnotations();
+
+    
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Company.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Company.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Company.java
index 1b16a5a..cc27967 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Company.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/Company.java
@@ -19,6 +19,8 @@
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.EntityType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
@@ -27,7 +29,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
-import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.ext.proxy.api.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +60,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Company 
-  extends AbstractAnnotatable,AbstractOpenType {
+  extends Annotatable,AbstractOpenType {
 
     
     @Key
@@ -247,4 +249,47 @@ public interface Company
          org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Address newAddress();
 
         }
+
+        Annotations annotations();
+
+    interface Annotations {
+
+            @AnnotationsForProperty(name = "CompanyID",
+                   type = "Edm.Int32")
+        Annotatable getCompanyIDAnnotations();
+
+            @AnnotationsForProperty(name = "CompanyCategory",
+                   type = "Microsoft.Test.OData.Services.ODataWCFService.CompanyCategory")
+        Annotatable getCompanyCategoryAnnotations();
+
+            @AnnotationsForProperty(name = "Revenue",
+                   type = "Edm.Int64")
+        Annotatable getRevenueAnnotations();
+
+            @AnnotationsForProperty(name = "Name",
+                   type = "Edm.String")
+        Annotatable getNameAnnotations();
+
+            @AnnotationsForProperty(name = "Address",
+                   type = "Microsoft.Test.OData.Services.ODataWCFService.Address")
+        Annotatable getAddressAnnotations();
+
+    
+    
+        @AnnotationsForNavigationProperty(name = "Employees", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Employee")
+        Annotatable getEmployeesAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "VipCustomer", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Customer")
+        Annotatable getVipCustomerAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "Departments", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Department")
+        Annotatable getDepartmentsAnnotations();
+    
+        @AnnotationsForNavigationProperty(name = "CoreDepartment", 
+                  type = "Microsoft.Test.OData.Services.ODataWCFService.Department")
+        Annotatable getCoreDepartmentAnnotations();
+        }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/72d894cd/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CompanyAddress.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CompanyAddress.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CompanyAddress.java
index 35c82e0..d4916dd 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CompanyAddress.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CompanyAddress.java
@@ -18,10 +18,14 @@
  */
 package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
 
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForProperty;
+import org.apache.olingo.ext.proxy.api.annotations.AnnotationsForNavigationProperty;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.ComplexType;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
 import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
+import org.apache.olingo.ext.proxy.api.AbstractOpenType;
+import org.apache.olingo.ext.proxy.api.Annotatable;
 import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.*;
 import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.*;
 
@@ -48,7 +52,7 @@ import javax.xml.datatype.Duration;
         isAbstract = false,
         baseType = "Microsoft.Test.OData.Services.ODataWCFService.Address")
 public interface CompanyAddress 
-    extends org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Address {
+    extends org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Address,Serializable {
 
 
     @Property(name = "Street", 
@@ -120,4 +124,28 @@ public interface CompanyAddress
     
 
 
+
+        @Override
+        Annotations annotations();
+
+    interface Annotations            extends org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Address.Annotations{
+
+            @AnnotationsForProperty(name = "Street",
+                   type = "Edm.String")
+        Annotatable getStreetAnnotations();
+
+            @AnnotationsForProperty(name = "City",
+                   type = "Edm.String")
+        Annotatable getCityAnnotations();
+
+            @AnnotationsForProperty(name = "PostalCode",
+                   type = "Edm.String")
+        Annotatable getPostalCodeAnnotations();
+
+            @AnnotationsForProperty(name = "CompanyName",
+                   type = "Edm.String")
+        Annotatable getCompanyNameAnnotations();
+
+    
+        }
 }