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

[1/7] git commit: [OLINGO-267] Implement getContainer correctly

Repository: olingo-odata4
Updated Branches:
  refs/heads/olingo-266-tecsvc 6e66fc155 -> 5fb2b80e4


[OLINGO-267] Implement getContainer correctly


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

Branch: refs/heads/olingo-266-tecsvc
Commit: 002161cd4c54d13ab8a03b279d4959409ac9b4b6
Parents: 6e66fc1
Author: Christian Amend <ch...@apache.org>
Authored: Mon May 19 16:32:17 2014 +0200
Committer: Christian Amend <ch...@apache.org>
Committed: Mon May 19 16:32:17 2014 +0200

----------------------------------------------------------------------
 .../server/api/edm/provider/EntitySet.java      |  2 +-
 .../tecsvc/provider/ContainerProvider.java      | 80 +++++++++++++++++++-
 .../server/tecsvc/provider/EdmTechProvider.java |  2 +-
 .../server/tecsvc/provider/SchemaProvider.java  | 76 +------------------
 .../serializer/xml/MetadataDocumentTest.java    |  3 +-
 5 files changed, 83 insertions(+), 80 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/002161cd/lib/server-api/src/main/java/org/apache/olingo/server/api/edm/provider/EntitySet.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/edm/provider/EntitySet.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/edm/provider/EntitySet.java
index 889bc6c..74aa183 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/edm/provider/EntitySet.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/edm/provider/EntitySet.java
@@ -24,7 +24,7 @@ import org.apache.olingo.commons.api.edm.FullQualifiedName;
 
 public class EntitySet extends BindingTarget {
 
-  private boolean includeInServiceDocument;
+  private boolean includeInServiceDocument = true;
 
   @Override
   public EntitySet setName(final String name) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/002161cd/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
index 24fe6bc..1a6a462 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
@@ -18,7 +18,9 @@
  */
 package org.apache.olingo.server.tecsvc.provider;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 
 import org.apache.olingo.commons.api.ODataException;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
@@ -38,6 +40,12 @@ public class ContainerProvider {
   EntityContainerInfo entityContainerInfoTest1 =
       new EntityContainerInfo().setContainerName(nameContainer);
 
+  private EdmTechProvider prov;
+
+  public ContainerProvider(EdmTechProvider edmTechProvider) {
+    this.prov = edmTechProvider;
+  }
+
   public EntityContainerInfo getEntityContainerInfo(final FullQualifiedName entityContainerName) throws ODataException {
     if (entityContainerName == null) {
       return entityContainerInfoTest1;
@@ -49,7 +57,77 @@ public class ContainerProvider {
   }
 
   public EntityContainer getEntityContainer() throws ODataException {
-    return null;
+    EntityContainer container = new EntityContainer();
+    container.setName(ContainerProvider.nameContainer.getName());
+
+    // EntitySets
+    List<EntitySet> entitySets = new ArrayList<EntitySet>();
+    container.setEntitySets(entitySets);
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESAllPrim"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCollAllPrim"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESTwoPrim"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESMixPrimCollComp"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESBase"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESTwoBase"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESTwoKeyTwoPrim"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESBaseTwoKeyTwoPrim"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESTwoBaseTwoKeyTwoPrim"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESAllKey"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCompAllPrim"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCompCollAllPrim"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCompComp"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCompCollComp"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESMedia"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESKeyTwoKeyComp"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESInvisible"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESServerSidePaging"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESAllNullable"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESKeyNav"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESTwoKeyNav"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESBaseTwoKeyNav"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCompMixPrimCollComp"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESFourKeyAlias"));
+
+    // Singletons
+    List<Singleton> singletons = new ArrayList<Singleton>();
+    container.setSingletons(singletons);
+    singletons.add(prov.getSingleton(ContainerProvider.nameContainer, "SI"));
+    singletons.add(prov.getSingleton(ContainerProvider.nameContainer, "SINav"));
+    singletons.add(prov.getSingleton(ContainerProvider.nameContainer, "SIMedia"));
+
+    // ActionImports
+    List<ActionImport> actionImports = new ArrayList<ActionImport>();
+    container.setActionImports(actionImports);
+    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, "AIRTPrimParam"));
+    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, "AIRTPrimCollParam"));
+    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, "AIRTCompParam"));
+    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, "AIRTCompCollParam"));
+    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, "AIRTETParam"));
+    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, "AIRTETCollAllPrimParam"));
+
+    // FunctionImports
+    List<FunctionImport> functionImports = new ArrayList<FunctionImport>();
+    container.setFunctionImports(functionImports);
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FINRTInt16"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FINInvisibleRTInt16"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FINInvisible2RTInt16"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTETKeyNav"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTETTwoKeyNavParam"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTStringTwoParam"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCollStringTwoParam"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCTAllPrimTwoParam"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTESMixPrimCollCompTwoParam"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FINRTESMixPrimCollCompTwoParam"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCollCTTwoPrim"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTETMedia"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCTTwoPrimParam"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCTTwoPrim"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCollString"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTString"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTESTwoKeyNavParam"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCollCTTwoPrimParam"));
+
+    return container;
   }
 
   public EntitySet getEntitySet(final FullQualifiedName entityContainer, final String name) throws ODataException {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/002161cd/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EdmTechProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EdmTechProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EdmTechProvider.java
index fd9980a..1b14d88 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EdmTechProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EdmTechProvider.java
@@ -54,7 +54,7 @@ public class EdmTechProvider extends EdmProvider {
   private final TypeDefinitionProvider typeDefinitionProvider;
 
   public EdmTechProvider() {
-    containerProvider = new ContainerProvider();
+    containerProvider = new ContainerProvider(this);
     entityTypeProvider = new EntityTypeProvider();
     complexTypeProvider = new ComplexTypeProvider();
     enumTypeProvider = new EnumTypeProvider();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/002161cd/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/SchemaProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/SchemaProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/SchemaProvider.java
index c941c70..59f0f43 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/SchemaProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/SchemaProvider.java
@@ -23,16 +23,11 @@ import java.util.List;
 
 import org.apache.olingo.commons.api.ODataException;
 import org.apache.olingo.server.api.edm.provider.Action;
-import org.apache.olingo.server.api.edm.provider.ActionImport;
 import org.apache.olingo.server.api.edm.provider.ComplexType;
-import org.apache.olingo.server.api.edm.provider.EntityContainer;
-import org.apache.olingo.server.api.edm.provider.EntitySet;
 import org.apache.olingo.server.api.edm.provider.EntityType;
 import org.apache.olingo.server.api.edm.provider.EnumType;
 import org.apache.olingo.server.api.edm.provider.Function;
-import org.apache.olingo.server.api.edm.provider.FunctionImport;
 import org.apache.olingo.server.api.edm.provider.Schema;
-import org.apache.olingo.server.api.edm.provider.Singleton;
 
 public class SchemaProvider {
 
@@ -173,76 +168,7 @@ public class SchemaProvider {
     // functions.addAll(prov.getFunctions(FunctionProvider.nameBFCCTPrimCompRTESTwoKeyNavParam));
 
     // EntityContainer
-    EntityContainer container = new EntityContainer();
-    schema.setEntityContainer(container);
-    container.setName(ContainerProvider.nameContainer.getName());
-
-    // EntitySets
-    List<EntitySet> entitySets = new ArrayList<EntitySet>();
-    container.setEntitySets(entitySets);
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESAllPrim"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCollAllPrim"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESTwoPrim"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESMixPrimCollComp"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESBase"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESTwoBase"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESTwoKeyTwoPrim"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESBaseTwoKeyTwoPrim"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESTwoBaseTwoKeyTwoPrim"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESAllKey"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCompAllPrim"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCompCollAllPrim"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCompComp"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCompCollComp"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESMedia"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESKeyTwoKeyComp"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESInvisible"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESServerSidePaging"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESAllNullable"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESKeyNav"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESTwoKeyNav"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESBaseTwoKeyNav"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCompMixPrimCollComp"));
-    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESFourKeyAlias"));
-
-    // Singletons
-    List<Singleton> singletons = new ArrayList<Singleton>();
-    container.setSingletons(singletons);
-    singletons.add(prov.getSingleton(ContainerProvider.nameContainer, "SI"));
-    singletons.add(prov.getSingleton(ContainerProvider.nameContainer, "SINav"));
-    singletons.add(prov.getSingleton(ContainerProvider.nameContainer, "SIMedia"));
-
-    // ActionImports
-    List<ActionImport> actionImports = new ArrayList<ActionImport>();
-    container.setActionImports(actionImports);
-    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, "AIRTPrimParam"));
-    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, "AIRTPrimCollParam"));
-    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, "AIRTCompParam"));
-    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, "AIRTCompCollParam"));
-    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, "AIRTETParam"));
-    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, "AIRTETCollAllPrimParam"));
-
-    // FunctionImports
-    List<FunctionImport> functionImports = new ArrayList<FunctionImport>();
-    container.setFunctionImports(functionImports);
-    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FINRTInt16"));
-    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FINInvisibleRTInt16"));
-    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FINInvisible2RTInt16"));
-    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTETKeyNav"));
-    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTETTwoKeyNavParam"));
-    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTStringTwoParam"));
-    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCollStringTwoParam"));
-    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCTAllPrimTwoParam"));
-    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTESMixPrimCollCompTwoParam"));
-    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FINRTESMixPrimCollCompTwoParam"));
-    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCollCTTwoPrim"));
-    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTETMedia"));
-    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCTTwoPrimParam"));
-    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCTTwoPrim"));
-    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCollString"));
-    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTString"));
-    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTESTwoKeyNavParam"));
-    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCollCTTwoPrimParam"));
+    schema.setEntityContainer(prov.getEntityContainer());
 
     return schemas;
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/002161cd/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java
index 475dff1..5721d42 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java
@@ -22,7 +22,6 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 
-import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -82,7 +81,7 @@ public class MetadataDocumentTest {
     Edm edm = new EdmProviderImpl(new TestMetadataProvider());
     InputStream metadata = serializer.metadataDocument(edm);
     assertNotNull(metadata);
-    
+
     String metadataString = IOUtils.toString(metadata);
     assertTrue(metadataString
         .contains("<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"));


[6/7] git commit: IT: server-side paging

Posted by sk...@apache.org.
IT: server-side paging


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

Branch: refs/heads/olingo-266-tecsvc
Commit: 5c28df507150ed5573d9ce4a395ec8d2218a6cca
Parents: beae479
Author: Francesco Chicchiriccò <--global>
Authored: Mon May 19 18:02:47 2014 +0200
Committer: Francesco Chicchiriccò <--global>
Committed: Mon May 19 18:02:47 2014 +0200

----------------------------------------------------------------------
 .../org/apache/olingo/fit/v4/EntitySetTestITCase.java    | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5c28df50/fit/src/test/java/org/apache/olingo/fit/v4/EntitySetTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/EntitySetTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/EntitySetTestITCase.java
index c0449cc..cca2b3b 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/EntitySetTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/EntitySetTestITCase.java
@@ -142,12 +142,13 @@ public class EntitySetTestITCase extends AbstractTestITCase {
     readODataEntitySetIterator(ODataPubFormat.JSON_NO_METADATA);
   }
 
-  private void readEntitySetWithNextLink(final ODataPubFormat format) {
+  private void readWithNext(final ODataPubFormat format) {
     final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("People");
 
     final ODataEntitySetRequest<ODataEntitySet> req = client.getRetrieveRequestFactory().
             getEntitySetRequest(uriBuilder.build());
     req.setFormat(format);
+    req.setPrefer(client.newPreferences().maxPageSize(5));
 
     final ODataRetrieveResponse<ODataEntitySet> res = req.execute();
     final ODataEntitySet feed = res.getBody();
@@ -164,13 +165,13 @@ public class EntitySetTestITCase extends AbstractTestITCase {
   }
 
   @Test
-  public void readODataEntitySetWithNextFromAtom() {
-    readEntitySetWithNextLink(ODataPubFormat.ATOM);
+  public void readWithNextFromAtom() {
+    readWithNext(ODataPubFormat.ATOM);
   }
 
   @Test
-  public void readODataEntitySetWithNextFromJSON() {
-    readEntitySetWithNextLink(ODataPubFormat.JSON_FULL_METADATA);
+  public void readWithNextFromJSON() {
+    readWithNext(ODataPubFormat.JSON_FULL_METADATA);
   }
 
 }


[7/7] git commit: Enhancing the FunctionImport invoke API enhancement

Posted by sk...@apache.org.
Enhancing the FunctionImport invoke API enhancement


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

Branch: refs/heads/olingo-266-tecsvc
Commit: 5fb2b80e404e6a65ff1d0dcfabaefbbdd182b0c6
Parents: 5c28df5
Author: Francesco Chicchiriccò <--global>
Authored: Tue May 20 08:37:40 2014 +0200
Committer: Francesco Chicchiriccò <--global>
Committed: Tue May 20 08:37:40 2014 +0200

----------------------------------------------------------------------
 .../request/invoke/EdmEnabledInvokeRequestFactory.java   |  4 ++--
 .../invoke/v3/EdmEnabledInvokeRequestFactoryImpl.java    | 11 ++++++++++-
 .../invoke/v4/EdmEnabledInvokeRequestFactoryImpl.java    | 11 ++++++++++-
 3 files changed, 22 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5fb2b80e/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/invoke/EdmEnabledInvokeRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/invoke/EdmEnabledInvokeRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/invoke/EdmEnabledInvokeRequestFactory.java
index a29d124..d8d2538 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/invoke/EdmEnabledInvokeRequestFactory.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/invoke/EdmEnabledInvokeRequestFactory.java
@@ -25,7 +25,7 @@ import org.apache.olingo.commons.api.domain.ODataValue;
 public interface EdmEnabledInvokeRequestFactory extends InvokeRequestFactory {
 
   /**
-   * Gets an invoke request instance for the first function import with the given name (no overloading supported).
+   * Gets an invoke request instance for the function import with the given name and no parameters.
    *
    * @param <RES> OData domain object result, derived from return type defined in the function import
    * @param functionImportName operation to be invoked
@@ -35,7 +35,7 @@ public interface EdmEnabledInvokeRequestFactory extends InvokeRequestFactory {
           String functionImportName);
 
   /**
-   * Gets an invoke request instance for the first function import with the given name (no overloading supported).
+   * Gets an invoke request instance for the function import with the given name and matching parameter names.
    *
    * @param <RES> OData domain object result, derived from return type defined in the function import
    * @param functionImportName operation to be invoked

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5fb2b80e/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/EdmEnabledInvokeRequestFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/EdmEnabledInvokeRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/EdmEnabledInvokeRequestFactoryImpl.java
index c6a6fd3..de22c30 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/EdmEnabledInvokeRequestFactoryImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/EdmEnabledInvokeRequestFactoryImpl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.olingo.client.core.communication.request.invoke.v3;
 
+import java.util.ArrayList;
 import java.util.Map;
 import org.apache.olingo.client.api.communication.request.invoke.EdmEnabledInvokeRequestFactory;
 import org.apache.olingo.client.api.communication.request.invoke.ODataInvokeRequest;
@@ -26,6 +27,7 @@ import org.apache.olingo.commons.api.domain.ODataInvokeResult;
 import org.apache.olingo.commons.api.domain.ODataValue;
 import org.apache.olingo.commons.api.edm.EdmActionImport;
 import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+import org.apache.olingo.commons.api.edm.EdmFunction;
 import org.apache.olingo.commons.api.edm.EdmFunctionImport;
 import org.apache.olingo.commons.api.edm.EdmSchema;
 
@@ -63,9 +65,16 @@ public class EdmEnabledInvokeRequestFactoryImpl
       throw new IllegalArgumentException("Could not find FunctionImport for name " + functionImportName);
     }
 
+    final EdmFunction function = edmClient.getCachedEdm().
+            getUnboundFunction(efi.getFunctionFqn(),
+                    parameters == null ? null : new ArrayList<String>(parameters.keySet()));
+    if (function == null) {
+      throw new IllegalArgumentException("Could not find Function " + efi.getFunctionFqn());
+    }
+
     return getInvokeRequest(
             edmClient.getURIBuilder().appendOperationCallSegment(functionImportName).build(),
-            efi.getUnboundFunctions().get(0),
+            function,
             parameters);
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5fb2b80e/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/EdmEnabledInvokeRequestFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/EdmEnabledInvokeRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/EdmEnabledInvokeRequestFactoryImpl.java
index b33e225..4df6c3f 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/EdmEnabledInvokeRequestFactoryImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/EdmEnabledInvokeRequestFactoryImpl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.olingo.client.core.communication.request.invoke.v4;
 
+import java.util.ArrayList;
 import java.util.Map;
 import org.apache.olingo.client.api.communication.request.invoke.EdmEnabledInvokeRequestFactory;
 import org.apache.olingo.client.api.communication.request.invoke.ODataInvokeRequest;
@@ -26,6 +27,7 @@ import org.apache.olingo.commons.api.domain.ODataInvokeResult;
 import org.apache.olingo.commons.api.domain.ODataValue;
 import org.apache.olingo.commons.api.edm.EdmActionImport;
 import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+import org.apache.olingo.commons.api.edm.EdmFunction;
 import org.apache.olingo.commons.api.edm.EdmFunctionImport;
 import org.apache.olingo.commons.api.edm.EdmSchema;
 
@@ -63,9 +65,16 @@ public class EdmEnabledInvokeRequestFactoryImpl
       throw new IllegalArgumentException("Could not find FunctionImport for name " + functionImportName);
     }
 
+    final EdmFunction function = edmClient.getCachedEdm().
+            getUnboundFunction(efi.getFunctionFqn(),
+                    parameters == null ? null : new ArrayList<String>(parameters.keySet()));
+    if (function == null) {
+      throw new IllegalArgumentException("Could not find Function " + efi.getFunctionFqn());
+    }
+
     return getInvokeRequest(
             edmClient.getURIBuilder().appendOperationCallSegment(functionImportName).build(),
-            efi.getUnboundFunctions().get(0),
+            function,
             parameters);
   }
 


[4/7] git commit: [OLINGO-260] Instance annotations test

Posted by sk...@apache.org.
[OLINGO-260] Instance annotations test


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

Branch: refs/heads/olingo-266-tecsvc
Commit: f59a8fb30ce347a91612c5753f7d90810a3d4f01
Parents: 4a1d5ab
Author: Francesco Chicchiriccò <--global>
Authored: Mon May 19 17:47:46 2014 +0200
Committer: Francesco Chicchiriccò <--global>
Committed: Mon May 19 17:47:46 2014 +0200

----------------------------------------------------------------------
 .../ext/proxy/EntityContainerFactory.java       |   2 +-
 .../ext/proxy/api/AbstractAnnotatable.java      |  34 ++++
 .../olingo/ext/proxy/api/AbstractOpenType.java  |   2 +
 .../olingo/ext/proxy/api/AbstractTerm.java      |  24 +++
 .../olingo/ext/proxy/api/annotations/Term.java  |  40 ++++
 .../commons/AbstractInvocationHandler.java      |   5 +-
 .../AbstractStructuredInvocationHandler.java    |  23 ++-
 .../proxy/commons/ComplexInvocationHandler.java |  10 +-
 .../olingo/ext/proxy/commons/ContainerImpl.java |  20 +-
 .../EntityCollectionInvocationHandler.java      |  53 +++++
 .../proxy/commons/EntityInvocationHandler.java  | 101 +++++++++-
 .../commons/EntitySetInvocationHandler.java     |  49 +++--
 .../ext/proxy/commons/EntitySetIterator.java    |  16 +-
 .../olingo/ext/proxy/utils/CoreUtils.java       | 192 ++++++++++++-------
 .../olingo/ext/pojogen/AbstractPOJOGenMojo.java |  15 +-
 .../src/main/resources/entityCollection.vm      |   5 +
 .../src/main/resources/entityType.vm            |   3 +-
 .../src/main/resources/services.vm              |  21 --
 .../src/main/resources/term.vm                  |  34 ++++
 .../fit/proxy/v4/SingletonTestITCase.java       |  18 ++
 .../services/odatawcfservice/types/Account.java |   3 +-
 .../types/AccountCollection.java                |   5 +
 .../services/odatawcfservice/types/Asset.java   |   3 +-
 .../odatawcfservice/types/AssetCollection.java  |   5 +
 .../services/odatawcfservice/types/Club.java    |   3 +-
 .../odatawcfservice/types/ClubCollection.java   |   5 +
 .../services/odatawcfservice/types/Company.java |   3 +-
 .../types/CompanyCollection.java                |   5 +
 .../odatawcfservice/types/CreditCardPI.java     |   3 +-
 .../types/CreditCardPICollection.java           |   5 +
 .../odatawcfservice/types/CreditRecord.java     |   3 +-
 .../types/CreditRecordCollection.java           |   5 +
 .../odatawcfservice/types/Customer.java         |   3 +-
 .../types/CustomerCollection.java               |   5 +
 .../odatawcfservice/types/Department.java       |   3 +-
 .../types/DepartmentCollection.java             |   5 +
 .../odatawcfservice/types/Employee.java         |   3 +-
 .../types/EmployeeCollection.java               |   5 +
 .../odatawcfservice/types/GiftCard.java         |   3 +-
 .../types/GiftCardCollection.java               |   5 +
 .../services/odatawcfservice/types/IsBoss.java  |  31 +++
 .../odatawcfservice/types/LabourUnion.java      |   3 +-
 .../types/LabourUnionCollection.java            |   5 +
 .../services/odatawcfservice/types/Order.java   |   3 +-
 .../odatawcfservice/types/OrderCollection.java  |   5 +
 .../odatawcfservice/types/OrderDetail.java      |   3 +-
 .../types/OrderDetailCollection.java            |   5 +
 .../types/PaymentInstrument.java                |   3 +-
 .../types/PaymentInstrumentCollection.java      |   5 +
 .../services/odatawcfservice/types/Person.java  |   3 +-
 .../odatawcfservice/types/PersonCollection.java |   5 +
 .../services/odatawcfservice/types/Product.java |   3 +-
 .../types/ProductCollection.java                |   5 +
 .../odatawcfservice/types/ProductDetail.java    |   3 +-
 .../types/ProductDetailCollection.java          |   5 +
 .../odatawcfservice/types/ProductReview.java    |   3 +-
 .../types/ProductReviewCollection.java          |   5 +
 .../odatawcfservice/types/PublicCompany.java    |   3 +-
 .../types/PublicCompanyCollection.java          |   5 +
 .../odatawcfservice/types/Statement.java        |   3 +-
 .../types/StatementCollection.java              |   5 +
 .../odatawcfservice/types/StoredPI.java         |   3 +-
 .../types/StoredPICollection.java               |   5 +
 .../odatawcfservice/types/Subscription.java     |   3 +-
 .../types/SubscriptionCollection.java           |   5 +
 .../META-INF/org.apache.olingo.ext.proxy.term   |   1 +
 .../apache/olingo/commons/api/Constants.java    |   2 +
 67 files changed, 722 insertions(+), 155 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/EntityContainerFactory.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/EntityContainerFactory.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/EntityContainerFactory.java
index c378a7a..9de2d4f 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/EntityContainerFactory.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/EntityContainerFactory.java
@@ -63,10 +63,10 @@ public final class EntityContainerFactory<C extends CommonEdmEnabledODataClient<
           final C client, final String serviceRoot) {
 
     if (!FACTORY_PER_SERVICEROOT.containsKey(serviceRoot)) {
+      client.getConfiguration().setDefaultPubFormat(ODataPubFormat.JSON_FULL_METADATA);
       final EntityContainerFactory<C> instance = new EntityContainerFactory<C>(client, serviceRoot);
       FACTORY_PER_SERVICEROOT.put(serviceRoot, instance);
     }
-    client.getConfiguration().setDefaultPubFormat(ODataPubFormat.JSON_FULL_METADATA);
 
     return (EntityContainerFactory<C>) FACTORY_PER_SERVICEROOT.get(serviceRoot);
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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
new file mode 100644
index 0000000..b0a1f4f
--- /dev/null
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractAnnotatable.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 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/f59a8fb3/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractOpenType.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractOpenType.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractOpenType.java
index c2f565c..769bd2a 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractOpenType.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractOpenType.java
@@ -25,6 +25,8 @@ public interface AbstractOpenType extends Serializable {
 
   void addAdditionalProperty(String name, Object value);
 
+  void removeAdditionalProperty(String name);
+
   Object getAdditionalProperty(String name);
 
   Collection<String> getAdditionalPropertyNames();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractTerm.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractTerm.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractTerm.java
new file mode 100644
index 0000000..065727c
--- /dev/null
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AbstractTerm.java
@@ -0,0 +1,24 @@
+/*
+ * 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;
+
+public interface AbstractTerm extends Serializable {
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/annotations/Term.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/annotations/Term.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/annotations/Term.java
new file mode 100644
index 0000000..97ae421
--- /dev/null
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/annotations/Term.java
@@ -0,0 +1,40 @@
+/*
+ * 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.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Mark POJO as term.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+@Inherited
+public @interface Term {
+
+  String name();
+
+  String type();
+
+  String baseTerm() default "";
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java
index e3a2bc9..2ce424a 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java
@@ -224,7 +224,10 @@ abstract class AbstractInvocationHandler implements InvocationHandler {
                 false);
       }
     } else {
-      return CoreUtils.getValueFromProperty(client, (CommonODataProperty) result, method.getGenericReturnType(), null);
+      final CommonODataProperty property = (CommonODataProperty) result;
+      return property == null || property.hasNullValue()
+              ? null
+              : CoreUtils.getObjectFromODataValue(client, property.getValue(), method.getGenericReturnType(), null);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 689d99f..3a85895 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
@@ -28,6 +28,7 @@ import java.util.Collection;
 import java.util.Collections;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.olingo.client.api.CommonEdmEnabledODataClient;
+import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
 import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
 import org.apache.olingo.client.core.uri.URIUtils;
 import org.apache.olingo.commons.api.domain.CommonODataEntity;
@@ -35,6 +36,7 @@ import org.apache.olingo.commons.api.domain.ODataInlineEntity;
 import org.apache.olingo.commons.api.domain.ODataInlineEntitySet;
 import org.apache.olingo.commons.api.domain.ODataLink;
 import org.apache.olingo.commons.api.domain.ODataLinked;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 import org.apache.olingo.ext.proxy.EntityContainerFactory;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
 import org.apache.olingo.ext.proxy.api.AbstractEntitySet;
@@ -141,7 +143,7 @@ public abstract class AbstractStructuredInvocationHandler extends AbstractInvoca
         }
       } else {
         // if the getter refers to a property .... get property from wrapped entity
-        res = getPropertyValue(property, getter.getGenericReturnType());
+        res = getPropertyValue(property.name(), getter.getGenericReturnType());
       }
 
       // attach the current handler
@@ -246,8 +248,12 @@ public abstract class AbstractStructuredInvocationHandler extends AbstractInvoca
       } else if (AbstractEntitySet.class.isAssignableFrom(type)) {
         navPropValue = getEntitySetProxy(type, uri);
       } else {
-        final ODataRetrieveResponse<CommonODataEntity> res =
-                client.getRetrieveRequestFactory().getEntityRequest(uri).execute();
+        final ODataEntityRequest<CommonODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uri);
+        if (client.getServiceVersion().compareTo(ODataServiceVersion.V30) > 0) {
+          req.setPrefer(client.newPreferences().includeAnnotations("*"));
+        }
+
+        final ODataRetrieveResponse<CommonODataEntity> res = req.execute();
 
         navPropValue = getEntityProxy(
                 uri,
@@ -265,15 +271,16 @@ public abstract class AbstractStructuredInvocationHandler extends AbstractInvoca
 
   protected abstract Object getPropertyValue(final String name, final Type type);
 
-  private Object getPropertyValue(final Property property, final Type type) {
-    return getPropertyValue(property.name(), type);
-  }
-
   public void addAdditionalProperty(final String name, final Object value) {
     addPropertyChanges(name, value);
     attach(AttachedEntityStatus.CHANGED);
   }
 
+  public void removeAdditionalProperty(final String name) {
+    removePropertyChanges(name);
+    attach(AttachedEntityStatus.CHANGED);
+  }
+
   public Object getAdditionalProperty(final String name) {
     return getPropertyValue(name, null);
   }
@@ -313,6 +320,8 @@ public abstract class AbstractStructuredInvocationHandler extends AbstractInvoca
 
   protected abstract void addPropertyChanges(final String name, final Object value);
 
+  protected abstract void removePropertyChanges(final String name);
+
   protected abstract void addLinkChanges(final NavigationProperty navProp, final Object value);
 
   public abstract boolean isChanged();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ComplexInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ComplexInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ComplexInvocationHandler.java
index b85452d..e3743fe 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ComplexInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ComplexInvocationHandler.java
@@ -99,7 +99,10 @@ public class ComplexInvocationHandler extends AbstractStructuredInvocationHandle
   @Override
   protected Object getPropertyValue(final String name, final Type type) {
     try {
-      return CoreUtils.getValueFromProperty(client, getComplex().get(name), type, getEntityHandler());
+      final CommonODataProperty property = getComplex().get(name);
+      return property == null || property.hasNullValue()
+              ? null
+              : CoreUtils.getObjectFromODataValue(client, property.getValue(), type, getEntityHandler());
     } catch (Exception e) {
       throw new IllegalArgumentException("Error getting value for property '" + name + "'", e);
     }
@@ -175,6 +178,11 @@ public class ComplexInvocationHandler extends AbstractStructuredInvocationHandle
   }
 
   @Override
+  protected void removePropertyChanges(final String name) {
+    // do nothing ....
+  }
+
+  @Override
   protected void addLinkChanges(final NavigationProperty navProp, final Object value) {
     // do nothing ....
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 da9329d..a5aa6b3 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
@@ -51,6 +51,7 @@ import org.apache.olingo.client.core.uri.URIUtils;
 import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.commons.api.domain.ODataLink;
 import org.apache.olingo.commons.api.domain.ODataLinkType;
+import org.apache.olingo.commons.api.domain.v4.ODataEntity;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 import org.apache.olingo.commons.api.format.ODataMediaFormat;
 import org.apache.olingo.ext.proxy.EntityContainerFactory;
@@ -240,10 +241,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());
 
@@ -266,10 +267,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());
 
@@ -316,6 +317,11 @@ class ContainerImpl implements Container {
     if (AttachedEntityStatus.DELETED != currentStatus) {
       entity.getProperties().clear();
       CoreUtils.addProperties(client, handler.getPropertyChanges(), entity);
+
+      if (entity instanceof ODataEntity) {
+        ((ODataEntity) entity).getAnnotations().clear();
+        CoreUtils.addAnnotations(client, handler.getAnnotations(), (ODataEntity) entity);
+      }
     }
 
     for (Map.Entry<NavigationProperty, Object> property : handler.getLinkChanges().entrySet()) {
@@ -395,7 +401,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);
 
@@ -408,8 +414,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/f59a8fb3/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityCollectionInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityCollectionInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityCollectionInvocationHandler.java
index 06d03a2..49f61bf 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityCollectionInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityCollectionInvocationHandler.java
@@ -22,10 +22,19 @@ import java.io.Serializable;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.net.URI;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 import org.apache.commons.lang3.ArrayUtils;
+import org.apache.olingo.commons.api.domain.v4.ODataAnnotation;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
+import org.apache.olingo.ext.proxy.api.annotations.Namespace;
+import org.apache.olingo.ext.proxy.api.annotations.Term;
+import org.apache.olingo.ext.proxy.utils.CoreUtils;
 
 public class EntityCollectionInvocationHandler<T extends Serializable>
         extends AbstractInvocationHandler implements AbstractEntityCollection<T> {
@@ -38,6 +47,11 @@ public class EntityCollectionInvocationHandler<T extends Serializable>
 
   private final URI uri;
 
+  private final List<ODataAnnotation> annotations = new ArrayList<ODataAnnotation>();
+
+  private final Map<Class<? extends AbstractTerm>, Object> annotationsByTerm =
+          new HashMap<Class<? extends AbstractTerm>, Object>();
+
   public EntityCollectionInvocationHandler(final EntityContainerInvocationHandler containerHandler,
           final Collection<T> items, final Class<?> itemRef) {
 
@@ -54,6 +68,12 @@ public class EntityCollectionInvocationHandler<T extends Serializable>
     this.uri = uri;
   }
 
+  public void setAnnotations(final List<ODataAnnotation> annotations) {
+    this.annotations.clear();
+    this.annotationsByTerm.clear();
+    this.annotations.addAll(annotations);
+  }
+
   public Class<?> getEntityReference() {
     return itemRef;
   }
@@ -142,4 +162,37 @@ public class EntityCollectionInvocationHandler<T extends Serializable>
   public void clear() {
     items.clear();
   }
+
+  public Object getAnnotation(final Class<? extends AbstractTerm> term) {
+    Object res = null;
+
+    if (annotationsByTerm.containsKey(term)) {
+      res = annotationsByTerm.get(term);
+    } else {
+      try {
+        final Term termAnn = term.getAnnotation(Term.class);
+        final Namespace namespaceAnn = term.getAnnotation(Namespace.class);
+        ODataAnnotation annotation = null;
+        for (ODataAnnotation _annotation : annotations) {
+          if ((namespaceAnn.value() + "." + termAnn.name()).equals(_annotation.getTerm())) {
+            annotation = _annotation;
+          }
+        }
+        res = annotation == null || annotation.hasNullValue()
+                ? null
+                : CoreUtils.getObjectFromODataValue(client, annotation.getValue(), null, null);
+        if (res != null) {
+          annotationsByTerm.put(term, res);
+        }
+      } catch (Exception e) {
+        throw new IllegalArgumentException("Error getting annotation for term '" + term.getName() + "'", e);
+      }
+    }
+
+    return res;
+  }
+
+  public Collection<Class<? extends AbstractTerm>> getAnnotationTerms() {
+    return CoreUtils.getAnnotationTerms(annotations);
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 6b1f08b..529c5eb 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
@@ -39,11 +39,16 @@ import org.apache.olingo.client.core.uri.URIUtils;
 import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.commons.api.domain.CommonODataProperty;
 import org.apache.olingo.commons.api.domain.ODataLinked;
+import org.apache.olingo.commons.api.domain.v4.ODataAnnotation;
+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.annotations.EntityType;
+import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 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.Term;
 import org.apache.olingo.ext.proxy.context.AttachedEntityStatus;
 import org.apache.olingo.ext.proxy.context.EntityUUID;
 import org.apache.olingo.ext.proxy.utils.CoreUtils;
@@ -54,15 +59,18 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
 
   private final URI entityURI;
 
-  protected Map<String, Object> propertyChanges = new HashMap<String, Object>();
+  protected final Map<String, Object> propertyChanges = new HashMap<String, Object>();
 
-  protected Map<NavigationProperty, Object> linkChanges = new HashMap<NavigationProperty, Object>();
+  protected final Map<NavigationProperty, Object> linkChanges = new HashMap<NavigationProperty, Object>();
 
   protected int propertiesTag = 0;
 
   protected int linksTag = 0;
 
-  private Map<String, InputStream> streamedPropertyChanges = new HashMap<String, InputStream>();
+  private final Map<String, InputStream> streamedPropertyChanges = new HashMap<String, InputStream>();
+
+  private final Map<Class<? extends AbstractTerm>, Object> annotations =
+          new HashMap<Class<? extends AbstractTerm>, Object>();
 
   private InputStream stream;
 
@@ -127,6 +135,7 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
     this.linkChanges.clear();
     this.propertiesTag = 0;
     this.linksTag = 0;
+    this.annotations.clear();
   }
 
   public EntityUUID getUUID() {
@@ -175,6 +184,10 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
     return linkChanges;
   }
 
+  public Map<Class<? extends AbstractTerm>, Object> getAnnotations() {
+    return annotations;
+  }
+
   private void updatePropertiesTag(final int checkpoint) {
     if (checkpoint == propertiesTag) {
       propertiesTag = propertyChanges.hashCode();
@@ -199,10 +212,12 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
         if (propertyChanges.containsKey(name)) {
           res = propertyChanges.get(name);
         } else {
-          res = CoreUtils.getValueFromProperty(client, property, type, this);
+          res = property == null || property.hasNullValue()
+                  ? null
+                  : CoreUtils.getObjectFromODataValue(client, property.getValue(), type, this);
 
           if (res != null) {
-            chacheProperty(name, res);
+            cacheProperty(name, res);
           }
         }
 
@@ -238,15 +253,14 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
   }
 
   @Override
-  @SuppressWarnings("unchecked")
   protected void setPropertyValue(final Property property, final Object value) {
-    if (property.type().equalsIgnoreCase("Edm." + EdmPrimitiveTypeKind.Stream.toString())) {
+    if (EdmPrimitiveTypeKind.Stream.getFullQualifiedName().toString().equalsIgnoreCase(property.type())) {
       setStreamedProperty(property, (InputStream) value);
     } else {
       addPropertyChanges(property.name(), value);
 
       if (value != null) {
-        final Collection<?> coll;
+        Collection<?> coll;
         if (Collection.class.isAssignableFrom(value.getClass())) {
           coll = Collection.class.cast(value);
         } else {
@@ -364,7 +378,12 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
     propertyChanges.put(name, value);
   }
 
-  protected void chacheProperty(final String name, final Object value) {
+  @Override
+  protected void removePropertyChanges(final String name) {
+    propertyChanges.remove(name);
+  }
+
+  protected void cacheProperty(final String name, final Object value) {
     final int checkpoint = propertyChanges.hashCode();
     propertyChanges.put(name, value);
     updatePropertiesTag(checkpoint);
@@ -381,6 +400,70 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
     updateLinksTag(checkpoint);
   }
 
+  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(this);
+          }
+        }
+      }
+    }
+
+    attach(AttachedEntityStatus.CHANGED);
+  }
+
+  public void removeAnnotation(final Class<? extends AbstractTerm> term) {
+    this.annotations.remove(term);
+  }
+
+  public Object getAnnotation(final Class<? extends AbstractTerm> term) {
+    Object res = null;
+
+    if (annotations.containsKey(term)) {
+      res = annotations.get(term);
+    } else if (getEntity() instanceof ODataEntity) {
+      try {
+        final Term termAnn = term.getAnnotation(Term.class);
+        final Namespace namespaceAnn = term.getAnnotation(Namespace.class);
+        ODataAnnotation annotation = null;
+        for (ODataAnnotation _annotation : ((ODataEntity) getEntity()).getAnnotations()) {
+          if ((namespaceAnn.value() + "." + termAnn.name()).equals(_annotation.getTerm())) {
+            annotation = _annotation;
+          }
+        }
+        res = annotation == null || annotation.hasNullValue()
+                ? null
+                : CoreUtils.getObjectFromODataValue(client, annotation.getValue(), null, this);
+        if (res != null) {
+          annotations.put(term, res);
+        }
+      } catch (Exception e) {
+        throw new IllegalArgumentException("Error getting annotation for term '" + term.getName() + "'", e);
+      }
+    }
+
+    return res;
+  }
+
+  public Collection<Class<? extends AbstractTerm>> getAnnotationTerms() {
+    return getEntity() instanceof ODataEntity
+            ? CoreUtils.getAnnotationTerms(((ODataEntity) getEntity()).getAnnotations())
+            : Collections.<Class<? extends AbstractTerm>>emptyList();
+  }
+
   @Override
   public String toString() {
     return uuid.toString();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java
index 6e70a0e..4f4e45a 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java
@@ -25,7 +25,6 @@ import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Proxy;
 import java.lang.reflect.Type;
 import java.net.URI;
-import java.util.AbstractMap;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -33,6 +32,10 @@ import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
 import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.tuple.ImmutableTriple;
+import org.apache.commons.lang3.tuple.Triple;
+import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
+import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetRequest;
 import org.apache.olingo.client.api.communication.request.retrieve.ODataValueRequest;
 import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
 import org.apache.olingo.client.api.uri.CommonURIBuilder;
@@ -41,6 +44,8 @@ import org.apache.olingo.client.api.v4.EdmEnabledODataClient;
 import org.apache.olingo.client.api.v4.ODataClient;
 import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
+import org.apache.olingo.commons.api.domain.v4.ODataAnnotation;
+import org.apache.olingo.commons.api.domain.v4.ODataEntitySet;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 import org.apache.olingo.commons.api.format.ODataValueFormat;
@@ -254,8 +259,13 @@ class EntitySetInvocationHandler<
 
         LOG.debug("GET {}", uriBuilder.toString());
 
-        final ODataRetrieveResponse<CommonODataEntity> res =
-                client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build()).execute();
+        final ODataEntityRequest<CommonODataEntity> req =
+                client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
+        if (client.getServiceVersion().compareTo(ODataServiceVersion.V30) > 0) {
+          req.setPrefer(client.newPreferences().includeAnnotations("*"));
+        }
+
+        final ODataRetrieveResponse<CommonODataEntity> res = req.execute();
 
         final String etag = res.getETag();
         final CommonODataEntity entity = res.getBody();
@@ -282,9 +292,12 @@ class EntitySetInvocationHandler<
   }
 
   @SuppressWarnings("unchecked")
-  public <S extends T> Map.Entry<List<S>, URI> fetchPartialEntitySet(final URI uri, final Class<S> typeRef) {
+  public <S extends T> Triple<List<S>, URI, List<ODataAnnotation>>
+          fetchPartialEntitySet(final URI uri, final Class<S> typeRef) {
+
     final List<CommonODataEntity> entities = new ArrayList<CommonODataEntity>();
     final URI next;
+    final List<ODataAnnotation> annotations = new ArrayList<ODataAnnotation>();
 
     if (isSingleton) {
       final ODataRetrieveResponse<org.apache.olingo.commons.api.domain.v4.Singleton> res =
@@ -293,12 +306,20 @@ class EntitySetInvocationHandler<
       entities.add(res.getBody());
       next = null;
     } else {
-      final ODataRetrieveResponse<CommonODataEntitySet> res =
-              client.getRetrieveRequestFactory().getEntitySetRequest(uri).execute();
+      final ODataEntitySetRequest<CommonODataEntitySet> req =
+              client.getRetrieveRequestFactory().getEntitySetRequest(uri);
+      if (client.getServiceVersion().compareTo(ODataServiceVersion.V30) > 0) {
+        req.setPrefer(client.newPreferences().includeAnnotations("*"));
+      }
+
+      final ODataRetrieveResponse<CommonODataEntitySet> res = req.execute();
 
       final CommonODataEntitySet entitySet = res.getBody();
       entities.addAll(entitySet.getEntities());
       next = entitySet.getNext();
+      if (entitySet instanceof ODataEntitySet) {
+        annotations.addAll(((ODataEntitySet) entitySet).getAnnotations());
+      }
     }
 
     final List<S> items = new ArrayList<S>(entities.size());
@@ -316,7 +337,7 @@ class EntitySetInvocationHandler<
               handlerInTheContext == null ? handler : handlerInTheContext));
     }
 
-    return new AbstractMap.SimpleEntry<List<S>, URI>(items, next);
+    return new ImmutableTriple<List<S>, URI, List<ODataAnnotation>>(items, next, annotations);
   }
 
   @SuppressWarnings("unchecked")
@@ -324,18 +345,24 @@ class EntitySetInvocationHandler<
           final URI entitySetURI, final Class<S> typeRef, final Class<SEC> collTypeRef) {
 
     final List<S> items = new ArrayList<S>();
+    final List<ODataAnnotation> annotations = new ArrayList<ODataAnnotation>();
 
     URI nextURI = entitySetURI;
     while (nextURI != null) {
-      final Map.Entry<List<S>, URI> entitySet = fetchPartialEntitySet(nextURI, typeRef);
-      nextURI = entitySet.getValue();
-      items.addAll(entitySet.getKey());
+      final Triple<List<S>, URI, List<ODataAnnotation>> entitySet = fetchPartialEntitySet(nextURI, typeRef);
+      items.addAll(entitySet.getLeft());
+      nextURI = entitySet.getMiddle();
+      annotations.addAll(entitySet.getRight());
     }
 
+    final EntityCollectionInvocationHandler<S> entityCollectionHandler =
+            new EntityCollectionInvocationHandler<S>(containerHandler, items, typeRef, entitySetURI);
+    entityCollectionHandler.setAnnotations(annotations);
+
     return (SEC) Proxy.newProxyInstance(
             Thread.currentThread().getContextClassLoader(),
             new Class<?>[] {collTypeRef},
-            new EntityCollectionInvocationHandler<S>(containerHandler, items, typeRef, entitySetURI));
+            entityCollectionHandler);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetIterator.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetIterator.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetIterator.java
index 8a14b7e..48405e8 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetIterator.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetIterator.java
@@ -23,8 +23,9 @@ import java.net.URI;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 import java.util.NoSuchElementException;
+import org.apache.commons.lang3.tuple.Triple;
+import org.apache.olingo.commons.api.domain.v4.ODataAnnotation;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
 
 class EntitySetIterator<T extends Serializable, KEY extends Serializable, EC extends AbstractEntityCollection<T>>
@@ -50,7 +51,7 @@ class EntitySetIterator<T extends Serializable, KEY extends Serializable, EC ext
     } else if (this.next == null) {
       res = false;
     } else {
-      goon();
+      goOn();
       res = current.hasNext();
     }
     return res;
@@ -65,7 +66,7 @@ class EntitySetIterator<T extends Serializable, KEY extends Serializable, EC ext
       if (this.next == null) {
         throw e;
       }
-      goon();
+      goOn();
       res = next();
     }
 
@@ -77,9 +78,10 @@ class EntitySetIterator<T extends Serializable, KEY extends Serializable, EC ext
     this.current.remove();
   }
 
-  private void goon() {
-    final Map.Entry<List<T>, URI> entitySet = esi.fetchPartialEntitySet(this.next, this.esi.getTypeRef());
-    this.next = entitySet.getValue();
-    this.current = entitySet.getKey().iterator();
+  private void goOn() {
+    final Triple<List<T>, URI, List<ODataAnnotation>> entitySet =
+            esi.fetchPartialEntitySet(this.next, this.esi.getTypeRef());
+    this.current = entitySet.getLeft().iterator();
+    this.next = entitySet.getMiddle();
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 3c4843a..5fbdc69 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,23 +43,28 @@ 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.ODataAnnotation;
+import org.apache.olingo.commons.api.domain.v4.ODataEntity;
 import org.apache.olingo.commons.api.domain.v4.ODataEnumValue;
 import org.apache.olingo.commons.api.domain.v4.ODataObjectFactory;
-import org.apache.olingo.commons.api.domain.v4.ODataProperty;
 import org.apache.olingo.commons.api.edm.EdmElement;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.EdmType;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+import org.apache.olingo.commons.core.domain.v4.ODataAnnotationImpl;
 import org.apache.olingo.commons.core.edm.EdmTypeInfo;
 import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.annotations.ComplexType;
 import org.apache.olingo.ext.proxy.api.annotations.CompoundKeyElement;
 import org.apache.olingo.ext.proxy.api.annotations.EnumType;
 import org.apache.olingo.ext.proxy.api.annotations.Key;
 import org.apache.olingo.ext.proxy.api.annotations.Namespace;
 import org.apache.olingo.ext.proxy.api.annotations.Property;
+import org.apache.olingo.ext.proxy.api.annotations.Term;
 import org.apache.olingo.ext.proxy.commons.AbstractStructuredInvocationHandler;
 import org.apache.olingo.ext.proxy.commons.ComplexInvocationHandler;
 import org.apache.olingo.ext.proxy.commons.EntityInvocationHandler;
@@ -189,48 +194,59 @@ public final class CoreUtils {
     return getODataProperty(client, property, type, obj);
   }
 
+  public static ODataAnnotation getODataAnnotation(
+          final CommonEdmEnabledODataClient<?> client, final String term, final EdmType type, final Object obj) {
+
+    ODataAnnotation annotation;
+
+    if (obj == null) {
+      annotation = new ODataAnnotationImpl(term, null);
+    } else {
+      final EdmTypeInfo valueType = type == null
+              ? guessTypeFromObject(client, obj)
+              : new EdmTypeInfo.Builder().setEdm(client.getCachedEdm()).
+              setTypeExpression(type.getFullQualifiedName().toString()).build();
+
+      annotation = new ODataAnnotationImpl(term,
+              (org.apache.olingo.commons.api.domain.v4.ODataValue) getODataValue(client, valueType, obj));
+    }
+
+    return annotation;
+  }
+
   public static CommonODataProperty getODataProperty(
           final CommonEdmEnabledODataClient<?> client, final String name, final EdmTypeInfo type, final Object obj) {
 
-    CommonODataProperty oprop;
+    CommonODataProperty property;
 
     try {
       if (obj == null) {
-        oprop = client.getObjectFactory().newPrimitiveProperty(name, null);
+        property = client.getObjectFactory().newPrimitiveProperty(name, null);
       } else {
-        final EdmTypeInfo valueType;
-        if (type == null) {
-          valueType = guessTypeFromObject(client, obj);
-        } else {
-          valueType = type;
-        }
+        final EdmTypeInfo valueType = type == null
+                ? guessTypeFromObject(client, obj)
+                : type;
+        final ODataValue value = getODataValue(client, valueType, obj);
 
         if (valueType.isCollection()) {
-          // create collection property
-          oprop = client.getObjectFactory().newCollectionProperty(name, getODataValue(client, valueType, obj).
-                  asCollection());
+          property = client.getObjectFactory().newCollectionProperty(name, value.asCollection());
         } else if (valueType.isPrimitiveType()) {
-          // create a primitive property
-          oprop = client.getObjectFactory().newPrimitiveProperty(name, getODataValue(client, valueType, obj).
-                  asPrimitive());
+          property = client.getObjectFactory().newPrimitiveProperty(name, value.asPrimitive());
         } else if (valueType.isComplexType()) {
-          // create a complex property
-          oprop = client.getObjectFactory().newComplexProperty(name, getODataValue(client, valueType, obj).
-                  asComplex());
+          property = client.getObjectFactory().newComplexProperty(name, value.asComplex());
         } else if (valueType.isEnumType()) {
           if (client.getServiceVersion().compareTo(ODataServiceVersion.V30) <= 0) {
             throw new UnsupportedInV3Exception();
           } else {
-            oprop = ((ODataObjectFactory) client.getObjectFactory()).newEnumProperty(name,
-                    ((org.apache.olingo.commons.api.domain.v4.ODataValue) getODataValue(client, valueType, obj)).
-                    asEnum());
+            property = ((ODataObjectFactory) client.getObjectFactory()).newEnumProperty(name,
+                    ((org.apache.olingo.commons.api.domain.v4.ODataValue) value).asEnum());
           }
         } else {
           throw new UnsupportedOperationException("Usupported object type " + valueType.getFullQualifiedName());
         }
       }
 
-      return oprop;
+      return property;
     } catch (Exception e) {
       throw new IllegalStateException(e);
     }
@@ -287,15 +303,28 @@ public final class CoreUtils {
           final Map<String, Object> changes,
           final CommonODataEntity entity) {
 
-    for (Map.Entry<String, Object> property : changes.entrySet()) {
-      // if the getter exists and it is annotated as expected then get value/value and add a new property
-      final CommonODataProperty odataProperty = entity.getProperty(property.getKey());
-      if (odataProperty != null) {
-        entity.getProperties().remove(odataProperty);
-      }
-
+    for (Map.Entry<String, Object> entry : changes.entrySet()) {
       ((List<CommonODataProperty>) entity.getProperties()).add(
-              getODataEntityProperty(client, entity.getTypeName(), property.getKey(), property.getValue()));
+              getODataEntityProperty(client, entity.getTypeName(), entry.getKey(), entry.getValue()));
+    }
+  }
+
+  public static void addAnnotations(
+          final CommonEdmEnabledODataClient<?> client,
+          final Map<Class<? extends AbstractTerm>, Object> annotations,
+          final ODataEntity entity) {
+
+    for (Map.Entry<Class<? extends AbstractTerm>, Object> entry : annotations.entrySet()) {
+      final Namespace nsAnn = entry.getKey().getAnnotation(Namespace.class);
+      final Term termAnn = entry.getKey().getAnnotation(Term.class);
+      final FullQualifiedName termName = new FullQualifiedName(nsAnn.value(), termAnn.name());
+      final EdmTerm term = client.getCachedEdm().getTerm(termName);
+      if (term == null) {
+        LOG.error("Could not find term for class {}", entry.getKey().getName());
+      } else {
+        entity.getAnnotations().add(getODataAnnotation(
+                client, term.getFullQualifiedName().toString(), term.getType(), entry.getValue()));
+      }
     }
   }
 
@@ -426,7 +455,7 @@ public final class CoreUtils {
                       Thread.currentThread().getContextClassLoader(),
                       new Class<?>[] {getter.getReturnType()},
                       ComplexInvocationHandler.getInstance(
-                      client, property.getName(), getter.getReturnType(), null));
+                              client, property.getName(), getter.getReturnType(), null));
 
               populate(client, complex, Property.class, property.getValue().asComplex().iterator());
               setPropertyValue(bean, getter, complex);
@@ -451,7 +480,7 @@ public final class CoreUtils {
                           Thread.currentThread().getContextClassLoader(),
                           new Class<?>[] {collItemClass},
                           ComplexInvocationHandler.getInstance(
-                          client, property.getName(), collItemClass, null));
+                                  client, property.getName(), collItemClass, null));
 
                   populate(client, collItem, Property.class, value.asComplex().iterator());
                   collection.add(collItem);
@@ -467,9 +496,9 @@ public final class CoreUtils {
   }
 
   @SuppressWarnings("unchecked")
-  public static Object getValueFromProperty(
+  public static Object getObjectFromODataValue(
           final CommonEdmEnabledODataClient<?> client,
-          final CommonODataProperty property,
+          final ODataValue value,
           final Type typeRef,
           final EntityInvocationHandler entityHandler)
           throws InstantiationException, IllegalAccessException {
@@ -487,59 +516,93 @@ public final class CoreUtils {
 
     final Object res;
 
-    if (property == null || property.hasNullValue()) {
+    if (value == null) {
       res = null;
-    } else if (property.hasComplexValue()) {
+    } else if (value.isComplex()) {
       // complex types supports inheritance in V4, best to re-read actual type
-      internalRef = getComplexTypeRef(property);
+      internalRef = getComplexTypeRef(value);
       res = Proxy.newProxyInstance(
               Thread.currentThread().getContextClassLoader(),
               new Class<?>[] {internalRef},
               ComplexInvocationHandler.getInstance(
-              client, property.getValue().asComplex(), internalRef, entityHandler));
-    } else if (property.hasCollectionValue()) {
+                      client, value.asComplex(), internalRef, entityHandler));
+    } else if (value.isCollection()) {
       final ArrayList<Object> collection = new ArrayList<Object>();
 
-      final Iterator<ODataValue> collPropItor = property.getValue().asCollection().iterator();
+      final Iterator<ODataValue> collPropItor = value.asCollection().iterator();
       while (collPropItor.hasNext()) {
-        final ODataValue value = collPropItor.next();
-        if (value.isPrimitive()) {
-          collection.add(CoreUtils.primitiveValueToObject(value.asPrimitive(), internalRef));
-        } else if (value.isComplex()) {
-          internalRef = getComplexTypeRef(property);
+        final ODataValue itemValue = collPropItor.next();
+        if (itemValue.isPrimitive()) {
+          collection.add(CoreUtils.primitiveValueToObject(itemValue.asPrimitive(), internalRef));
+        } else if (itemValue.isComplex()) {
+          internalRef = getComplexTypeRef(value);
           final Object collItem = Proxy.newProxyInstance(
                   Thread.currentThread().getContextClassLoader(),
                   new Class<?>[] {internalRef},
                   ComplexInvocationHandler.getInstance(
-                  client, value.asComplex(), internalRef, entityHandler));
+                          client, itemValue.asComplex(), internalRef, entityHandler));
 
           collection.add(collItem);
         }
       }
 
       res = collection;
-    } else if (property instanceof ODataProperty && ((ODataProperty) property).hasEnumValue()) {
+    } else if (value instanceof ODataEnumValue) {
       if (internalRef == null) {
-        internalRef = getEnumTypeRef(property);
+        internalRef = getEnumTypeRef(value);
       }
-      res = enumValueToObject(((ODataProperty) property).getEnumValue(), internalRef);
+      res = enumValueToObject((ODataEnumValue) value, internalRef);
     } else {
-      res = primitiveValueToObject(property.getPrimitiveValue(), internalRef);
+      res = primitiveValueToObject(value.asPrimitive(), internalRef);
+    }
+
+    return res;
+  }
+
+  @SuppressWarnings("unchecked")
+  public static Collection<Class<? extends AbstractTerm>> getAnnotationTerms(final List<ODataAnnotation> annotations) {
+    final List<Class<? extends AbstractTerm>> res = new ArrayList<Class<? extends AbstractTerm>>();
+
+    for (ODataAnnotation annotation : annotations) {
+      res.add((Class<? extends AbstractTerm>) getTermTypeRef(annotation));
     }
 
     return res;
   }
 
-  private static Class<?> getEnumTypeRef(final CommonODataProperty property) {
-    return getTypeRef(property, "META-INF/" + Constants.PROXY_ENUM_CLASS_LIST, EnumType.class);
+  private static Class<?> getTermTypeRef(final ODataAnnotation annotation) {
+    try {
+      final List<String> pkgs = IOUtils.readLines(Thread.currentThread().getContextClassLoader().
+              getResourceAsStream("META-INF/" + Constants.PROXY_TERM_CLASS_LIST),
+              Constants.UTF8);
+      for (String pkg : pkgs) {
+        final Class<?> clazz = Class.forName(pkg);
+        final Term term = clazz.getAnnotation(Term.class);
+        final Namespace ns = clazz.getAnnotation(Namespace.class);
+
+        if (ns != null && term != null
+                && annotation.getTerm().equals(new FullQualifiedName(ns.value(), term.name()).toString())) {
+
+          return clazz;
+        }
+      }
+    } catch (Exception e) {
+      LOG.warn("Error retrieving class list for {}", Term.class.getName(), e);
+    }
+
+    throw new IllegalArgumentException("Could not find Term class for " + annotation.getTerm());
+  }
+
+  private static Class<?> getEnumTypeRef(final ODataValue value) {
+    return getTypeRef(value, "META-INF/" + Constants.PROXY_ENUM_CLASS_LIST, EnumType.class);
   }
 
-  private static Class<?> getComplexTypeRef(final CommonODataProperty property) {
-    return getTypeRef(property, "META-INF/" + Constants.PROXY_COMPLEX_CLASS_LIST, ComplexType.class);
+  private static Class<?> getComplexTypeRef(final ODataValue value) {
+    return getTypeRef(value, "META-INF/" + Constants.PROXY_COMPLEX_CLASS_LIST, ComplexType.class);
   }
 
   private static Class<?> getTypeRef(
-          final CommonODataProperty property,
+          final ODataValue value,
           final String proxyClassListFile,
           final Class<? extends Annotation> annType) {
 
@@ -549,7 +612,7 @@ public final class CoreUtils {
 
     try {
       final List<String> pkgs = IOUtils.readLines(
-              CoreUtils.class.getClassLoader().getResourceAsStream(proxyClassListFile),
+              Thread.currentThread().getContextClassLoader().getResourceAsStream(proxyClassListFile),
               Constants.UTF8);
 
       for (String pkg : pkgs) {
@@ -557,20 +620,19 @@ public final class CoreUtils {
         final Annotation ann = clazz.getAnnotation(annType);
         final Namespace ns = clazz.getAnnotation(Namespace.class);
 
-        if (ns != null && ann != null) {
-          if (property.getValue().getTypeName().replaceAll("^Collection\\(", "").replaceAll("\\)$", "").equals(
-                  new FullQualifiedName(ns.value(), annType.isAssignableFrom(EnumType.class)
-                  ? EnumType.class.cast(ann).name()
-                  : ComplexType.class.cast(ann).name()).toString())) {
-            return clazz;
-          }
+        if (ns != null && ann != null
+                && value.getTypeName().replaceAll("^Collection\\(", "").replaceAll("\\)$", "").
+                equals(new FullQualifiedName(ns.value(), annType.isAssignableFrom(EnumType.class)
+                                ? EnumType.class.cast(ann).name()
+                                : ComplexType.class.cast(ann).name()).toString())) {
+          return clazz;
         }
       }
     } catch (Exception e) {
-      LOG.warn("Error retrieving proxy complex class list", e);
+      LOG.warn("Error retrieving class list for {}", annType.getName(), e);
     }
 
-    throw new IllegalArgumentException("Provided property '" + property + "' is not complex");
+    throw new IllegalArgumentException("Provided value '" + value + "' is not annotated as " + annType.getName());
   }
 
   private static String firstValidEntityKey(final Class<?> entityTypeRef) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractPOJOGenMojo.java
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractPOJOGenMojo.java b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractPOJOGenMojo.java
index f8ab5f2..ee09e65 100644
--- a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractPOJOGenMojo.java
+++ b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractPOJOGenMojo.java
@@ -47,6 +47,7 @@ import org.apache.olingo.commons.api.edm.EdmEnumType;
 import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
 import org.apache.olingo.commons.api.edm.EdmSchema;
 import org.apache.olingo.commons.api.edm.EdmSingleton;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
@@ -231,6 +232,7 @@ public abstract class AbstractPOJOGenMojo extends AbstractMojo {
         namespaces.add(schema.getNamespace().toLowerCase());
       }
 
+      final StringBuilder termNames = new StringBuilder();
       final StringBuilder complexTypeNames = new StringBuilder();
       final StringBuilder enumTypeNames = new StringBuilder();
 
@@ -250,7 +252,14 @@ public abstract class AbstractPOJOGenMojo extends AbstractMojo {
 
         final Map<String, Object> objs = new HashMap<String, Object>();
 
-        // write types into types package
+        for (EdmTerm term : schema.getTerms()) {
+          final String className = utility.capitalize(term.getName());
+          termNames.append(typesPkg).append('.').append(className).append('\n');
+          objs.clear();
+          objs.put("term", term);
+          parseObj(typesBaseDir, typesPkg, "term", className + ".java", objs);
+        }
+
         for (EdmEnumType enumType : schema.getEnumTypes()) {
           final String className = utility.capitalize(enumType.getName());
           enumTypeNames.append(typesPkg).append('.').append(className).append('\n');
@@ -275,7 +284,7 @@ public abstract class AbstractPOJOGenMojo extends AbstractMojo {
                     || edm.getEntityType(complex.getBaseType().getFullQualifiedName()).
                     getNavigationProperty(navPropName) == null)
                     && navProp.containsTarget()) {
-              
+
               objs.clear();
               objs.put("navProp", navProp);
               parseObj(base, pkg, "containedEntitySet",
@@ -365,6 +374,8 @@ public abstract class AbstractPOJOGenMojo extends AbstractMojo {
 
       final File metaInf = mkdir("META-INF");
       FileUtils.fileWrite(
+              metaInf.getPath() + File.separator + Constants.PROXY_TERM_CLASS_LIST, termNames.toString());
+      FileUtils.fileWrite(
               metaInf.getPath() + File.separator + Constants.PROXY_ENUM_CLASS_LIST, enumTypeNames.toString());
       FileUtils.fileWrite(
               metaInf.getPath() + File.separator + Constants.PROXY_COMPLEX_CLASS_LIST, complexTypeNames.toString());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/ext/pojogen-maven-plugin/src/main/resources/entityCollection.vm
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/resources/entityCollection.vm b/ext/pojogen-maven-plugin/src/main/resources/entityCollection.vm
index c2d49c8..8df366f 100644
--- a/ext/pojogen-maven-plugin/src/main/resources/entityCollection.vm
+++ b/ext/pojogen-maven-plugin/src/main/resources/entityCollection.vm
@@ -20,6 +20,7 @@ package ${package};
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -92,4 +93,8 @@ public interface $utility.capitalize($entityType.Name)Collection extends Abstrac
     #end
     }
 #end
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 aeebe7b..e66f936 100644
--- a/ext/pojogen-maven-plugin/src/main/resources/entityType.vm
+++ b/ext/pojogen-maven-plugin/src/main/resources/entityType.vm
@@ -28,6 +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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -62,7 +63,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 #if( $entityType.getBaseType() )$utility.getJavaType($entityType.getBaseType())#{elseif}( $entityType.isOpenType() )AbstractOpenType#{else}Serializable#end {
+  extends AbstractAnnotatable,#if( $entityType.getBaseType() )$utility.getJavaType($entityType.getBaseType())#{elseif}( $entityType.isOpenType() )AbstractOpenType#{else}Serializable#end {
 
 #set( $keys = [] )
 #foreach($key in $entityType.KeyPropertyRefs)

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/ext/pojogen-maven-plugin/src/main/resources/services.vm
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/resources/services.vm b/ext/pojogen-maven-plugin/src/main/resources/services.vm
deleted file mode 100644
index 94480f3..0000000
--- a/ext/pojogen-maven-plugin/src/main/resources/services.vm
+++ /dev/null
@@ -1,21 +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.
- *#
-#foreach ($service in $services)
-$service
-#end
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/ext/pojogen-maven-plugin/src/main/resources/term.vm
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/resources/term.vm b/ext/pojogen-maven-plugin/src/main/resources/term.vm
new file mode 100644
index 0000000..c516209
--- /dev/null
+++ b/ext/pojogen-maven-plugin/src/main/resources/term.vm
@@ -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 ${package};
+
+import org.apache.olingo.ext.proxy.api.annotations.Namespace;
+import org.apache.olingo.ext.proxy.api.annotations.Term;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
+#foreach($ns in $namespaces)
+import ${basePackage}.${ns}.*;
+import ${basePackage}.${ns}.types.*;
+#end
+
+@Namespace("$namespace")
+@Term(name = "$term.Name",
+      type="$term.Type"#if($term.getBaseTerm()),
+      baseTerm = "$term.getBaseTerm().getFullQualifiedName().toString()"#end)
+public interface $utility.capitalize($term.Name) extends AbstractTerm {
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 d9467bc..9460297 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
@@ -20,8 +20,12 @@ package org.apache.olingo.fit.proxy.v4;
 
 import static org.junit.Assert.assertEquals;
 
+import static org.junit.Assert.assertTrue;
+
 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;
+import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person;
 import org.junit.Test;
 
 public class SingletonTestITCase extends AbstractTestITCase {
@@ -42,4 +46,18 @@ public class SingletonTestITCase extends AbstractTestITCase {
 
     assertEquals(132520L, container.getCompany().get().getRevenue(), 0);
   }
+
+  @Test
+  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);
+    assertTrue(isBoss instanceof Boolean);
+    assertTrue((Boolean) isBoss);
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 4c68b8b..82d6107 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Account 
-  extends Serializable {
+  extends AbstractAnnotatable,Serializable {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/AccountCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/AccountCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/AccountCollection.java
index 00ec845..b4f069a 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/AccountCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/AccountCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface AccountCollection extends AbstractEntityCollection<Account> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 6fdc75a..ba5be31 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Asset 
-  extends Serializable {
+  extends AbstractAnnotatable,Serializable {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/AssetCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/AssetCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/AssetCollection.java
index 12b8ef1..acc55d1 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/AssetCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/AssetCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface AssetCollection extends AbstractEntityCollection<Asset> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 f5dd658..6016e77 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Club 
-  extends Serializable {
+  extends AbstractAnnotatable,Serializable {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ClubCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ClubCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ClubCollection.java
index 4647fed..e04aa4a 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ClubCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ClubCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface ClubCollection extends AbstractEntityCollection<Club> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 38d6e93..1b16a5a 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Company 
-  extends AbstractOpenType {
+  extends AbstractAnnotatable,AbstractOpenType {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CompanyCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CompanyCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CompanyCollection.java
index 7eb03e4..a5d0931 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CompanyCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CompanyCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface CompanyCollection extends AbstractEntityCollection<Company> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 98139ef..d005712 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +59,7 @@ import javax.xml.datatype.Duration;
         isAbstract = false,
         baseType = "Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument")
 public interface CreditCardPI 
-  extends org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.PaymentInstrument {
+  extends AbstractAnnotatable,org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.PaymentInstrument {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditCardPICollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditCardPICollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditCardPICollection.java
index d673c51..07139ae 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditCardPICollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditCardPICollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface CreditCardPICollection extends AbstractEntityCollection<CreditCardPI> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }


[3/7] [OLINGO-260] Instance annotations test

Posted by sk...@apache.org.
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 d63a199..ca1c593 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface CreditRecord 
-  extends Serializable {
+  extends AbstractAnnotatable,Serializable {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditRecordCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditRecordCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditRecordCollection.java
index 2454201..93bdfbe 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditRecordCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CreditRecordCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface CreditRecordCollection extends AbstractEntityCollection<CreditRecord> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 461cdd3..d545c87 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +59,7 @@ import javax.xml.datatype.Duration;
         isAbstract = false,
         baseType = "Microsoft.Test.OData.Services.ODataWCFService.Person")
 public interface Customer 
-  extends org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person {
+  extends AbstractAnnotatable,org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CustomerCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CustomerCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CustomerCollection.java
index 2b0ce94..d4584e2 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CustomerCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/CustomerCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface CustomerCollection extends AbstractEntityCollection<Customer> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 dd7ba27..6eed1d3 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Department 
-  extends Serializable {
+  extends AbstractAnnotatable,Serializable {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/DepartmentCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/DepartmentCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/DepartmentCollection.java
index 27b40de..498bf5b 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/DepartmentCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/DepartmentCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface DepartmentCollection extends AbstractEntityCollection<Department> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 aff7b36..87c1486 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +59,7 @@ import javax.xml.datatype.Duration;
         isAbstract = false,
         baseType = "Microsoft.Test.OData.Services.ODataWCFService.Person")
 public interface Employee 
-  extends org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person {
+  extends AbstractAnnotatable,org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/EmployeeCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/EmployeeCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/EmployeeCollection.java
index 9ed9987..536d1a0 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/EmployeeCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/EmployeeCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface EmployeeCollection extends AbstractEntityCollection<Employee> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 4c2c83f..e4ccfe2 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface GiftCard 
-  extends Serializable {
+  extends AbstractAnnotatable,Serializable {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/GiftCardCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/GiftCardCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/GiftCardCollection.java
index 5ca4350..eb03afd 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/GiftCardCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/GiftCardCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface GiftCardCollection extends AbstractEntityCollection<GiftCard> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/IsBoss.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/IsBoss.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/IsBoss.java
new file mode 100644
index 0000000..f37419b
--- /dev/null
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/IsBoss.java
@@ -0,0 +1,31 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
+
+import org.apache.olingo.ext.proxy.api.annotations.Namespace;
+import org.apache.olingo.ext.proxy.api.annotations.Term;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
+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.*;
+
+@Namespace("Microsoft.Test.OData.Services.ODataWCFService")
+@Term(name = "IsBoss",
+      type="Edm.Boolean")
+public interface IsBoss extends AbstractTerm {
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 5170a41..699b417 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface LabourUnion 
-  extends Serializable {
+  extends AbstractAnnotatable,Serializable {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/LabourUnionCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/LabourUnionCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/LabourUnionCollection.java
index 644f6d8..fcbbd30 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/LabourUnionCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/LabourUnionCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface LabourUnionCollection extends AbstractEntityCollection<LabourUnion> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 6e4c539..2d3ea17 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Order 
-  extends Serializable {
+  extends AbstractAnnotatable,Serializable {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/OrderCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/OrderCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/OrderCollection.java
index 3e3712c..5c4fc28 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/OrderCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/OrderCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface OrderCollection extends AbstractEntityCollection<Order> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 15a0b9b..f8b0ca3 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface OrderDetail 
-  extends Serializable {
+  extends AbstractAnnotatable,Serializable {
 
         
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/OrderDetailCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/OrderDetailCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/OrderDetailCollection.java
index a0d2058..5e258a8 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/OrderDetailCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/OrderDetailCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface OrderDetailCollection extends AbstractEntityCollection<OrderDetail> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 3ecaedf..2915a94 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface PaymentInstrument 
-  extends Serializable {
+  extends AbstractAnnotatable,Serializable {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PaymentInstrumentCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PaymentInstrumentCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PaymentInstrumentCollection.java
index 878a3ff..44e8f23 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PaymentInstrumentCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PaymentInstrumentCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface PaymentInstrumentCollection extends AbstractEntityCollection<PaymentInstrument> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 f197b3c..ec17476 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Person 
-  extends Serializable {
+  extends AbstractAnnotatable,Serializable {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PersonCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PersonCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PersonCollection.java
index 778e8cc..9f159dc 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PersonCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PersonCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface PersonCollection extends AbstractEntityCollection<Person> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 574e98d..88e84bc 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Product 
-  extends Serializable {
+  extends AbstractAnnotatable,Serializable {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductCollection.java
index 88cd63d..1f408e0 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -56,4 +57,8 @@ public interface ProductCollection extends AbstractEntityCollection<Product> {
             );
 
         }
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 945bb2b..adb1b84 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface ProductDetail 
-  extends Serializable {
+  extends AbstractAnnotatable,Serializable {
 
         
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductDetailCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductDetailCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductDetailCollection.java
index 31b8c1b..55ce7a2 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductDetailCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductDetailCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface ProductDetailCollection extends AbstractEntityCollection<ProductDetail> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 32bfa8f..5c982a7 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface ProductReview 
-  extends Serializable {
+  extends AbstractAnnotatable,Serializable {
 
                 
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductReviewCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductReviewCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductReviewCollection.java
index 9825a70..1c98796 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductReviewCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/ProductReviewCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface ProductReviewCollection extends AbstractEntityCollection<ProductReview> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 a3c9713..31aa470 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -58,7 +59,7 @@ import javax.xml.datatype.Duration;
         isAbstract = false,
         baseType = "Microsoft.Test.OData.Services.ODataWCFService.Company")
 public interface PublicCompany 
-  extends org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Company {
+  extends AbstractAnnotatable,org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Company {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PublicCompanyCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PublicCompanyCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PublicCompanyCollection.java
index b90e82f..2257e2b 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PublicCompanyCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/PublicCompanyCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface PublicCompanyCollection extends AbstractEntityCollection<PublicCompany> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 4b7e86f..e12c0f1 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Statement 
-  extends Serializable {
+  extends AbstractAnnotatable,Serializable {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/StatementCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/StatementCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/StatementCollection.java
index 2f4c0a6..6f325a7 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/StatementCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/StatementCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface StatementCollection extends AbstractEntityCollection<Statement> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 a99ff85..0a31c18 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface StoredPI 
-  extends Serializable {
+  extends AbstractAnnotatable,Serializable {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/StoredPICollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/StoredPICollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/StoredPICollection.java
index ba7ab8f..d4d34fe 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/StoredPICollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/StoredPICollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface StoredPICollection extends AbstractEntityCollection<StoredPI> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/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 de3de5d..17dd865 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
@@ -27,6 +27,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.AbstractOpenType;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
         hasStream = false,
         isAbstract = false)
 public interface Subscription 
-  extends Serializable {
+  extends AbstractAnnotatable,Serializable {
 
     
     @Key

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/SubscriptionCollection.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/SubscriptionCollection.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/SubscriptionCollection.java
index 08393e7..5e8083b 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/SubscriptionCollection.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/staticservice/microsoft/test/odata/services/odatawcfservice/types/SubscriptionCollection.java
@@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
 
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
+import org.apache.olingo.ext.proxy.api.AbstractTerm;
 import org.apache.olingo.ext.proxy.api.OperationType;
 import org.apache.olingo.ext.proxy.api.annotations.Operation;
 import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@@ -43,4 +44,8 @@ import java.util.Calendar;
 import javax.xml.datatype.Duration;
 
 public interface SubscriptionCollection extends AbstractEntityCollection<Subscription> {
+
+  Object getAnnotation(Class<? extends AbstractTerm> term);
+
+  Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/fit/src/test/resources/META-INF/org.apache.olingo.ext.proxy.term
----------------------------------------------------------------------
diff --git a/fit/src/test/resources/META-INF/org.apache.olingo.ext.proxy.term b/fit/src/test/resources/META-INF/org.apache.olingo.ext.proxy.term
new file mode 100644
index 0000000..4eccd95
--- /dev/null
+++ b/fit/src/test/resources/META-INF/org.apache.olingo.ext.proxy.term
@@ -0,0 +1 @@
+org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.IsBoss

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f59a8fb3/lib/commons-api/src/main/java/org/apache/olingo/commons/api/Constants.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/Constants.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/Constants.java
index acd0fb9..2eacd47 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/Constants.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/Constants.java
@@ -35,6 +35,8 @@ public interface Constants {
 
   public final static Integer DEFAULT_SCALE = 25;
 
+  public final static String PROXY_TERM_CLASS_LIST = "org.apache.olingo.ext.proxy.term";
+
   public final static String PROXY_ENUM_CLASS_LIST = "org.apache.olingo.ext.proxy.enum";
 
   public final static String PROXY_COMPLEX_CLASS_LIST = "org.apache.olingo.ext.proxy.complex";


[2/7] git commit: [OLINGO-266] Fix response sending

Posted by sk...@apache.org.
[OLINGO-266] Fix response sending


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

Branch: refs/heads/olingo-266-tecsvc
Commit: c93b648b0b62746d6e32fb850cf7a758505121dd
Parents: 002161c
Author: Christian Amend <ch...@apache.org>
Authored: Mon May 19 17:16:57 2014 +0200
Committer: Christian Amend <ch...@apache.org>
Committed: Mon May 19 17:16:57 2014 +0200

----------------------------------------------------------------------
 .../apache/olingo/server/core/ODataHandler.java |  3 +--
 .../server/core/ODataHttpHandlerImpl.java       | 23 ++++++++++----------
 .../core/serializer/ODataXmlSerializerImpl.java |  1 +
 .../xml/MetadataDocumentXmlSerializer.java      |  1 -
 4 files changed, 13 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c93b648b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java
index d9e1e1f..de8ef23 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java
@@ -53,7 +53,6 @@ public class ODataHandler {
       case metadata:
         serializer = server.createSerializer(ODataFormat.XML);
         responseEntity = serializer.metadataDocument(edm);
-        
         response.setStatusCode(200);
         response.setHeader("Content-Type", "application/xml");
         response.setContent(responseEntity);
@@ -61,7 +60,7 @@ public class ODataHandler {
       case service:
         serializer = server.createSerializer(ODataFormat.JSON);
         responseEntity = serializer.serviceDocument(edm, odRequest.getRawBaseUri());
-        
+
         response.setStatusCode(200);
         response.setHeader("Content-Type", "application/json");
         response.setContent(responseEntity);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c93b648b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHttpHandlerImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHttpHandlerImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHttpHandlerImpl.java
index 09983b1..be61a2b 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHttpHandlerImpl.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHttpHandlerImpl.java
@@ -20,6 +20,7 @@ package org.apache.olingo.server.core;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.HashMap;
@@ -33,8 +34,8 @@ import javax.servlet.http.HttpServletResponse;
 import org.apache.olingo.commons.api.ODataRuntimeException;
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.http.HttpMethod;
-import org.apache.olingo.server.api.ODataHttpHandler;
 import org.apache.olingo.server.api.OData;
+import org.apache.olingo.server.api.ODataHttpHandler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -67,24 +68,22 @@ public class ODataHttpHandlerImpl implements ODataHttpHandler {
       response.setHeader(entry.getKey(), entry.getValue());
     }
 
-    InputStream in = odResponse.getContent();
+    InputStream input = odResponse.getContent();
+    OutputStream output;
     try {
+      output = response.getOutputStream();
       byte[] buffer = new byte[1024];
-      int bytesRead = 0;
-
-      do {
-        bytesRead = in.read(buffer, 0, buffer.length);
-        response.getOutputStream().write(buffer, 0, bytesRead);
-      } while (bytesRead == buffer.length);
-
-      response.getOutputStream().flush();
+      int n = 0;
+      while (-1 != (n = input.read(buffer))) {
+        output.write(buffer, 0, n);
+      }
     } catch (IOException e) {
       LOG.error(e.getMessage(), e);
       throw new ODataRuntimeException(e);
     } finally {
-      if (in != null) {
+      if (input != null) {
         try {
-          in.close();
+          input.close();
         } catch (IOException e) {
           throw new ODataRuntimeException(e);
         }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c93b648b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/ODataXmlSerializerImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/ODataXmlSerializerImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/ODataXmlSerializerImpl.java
index 49f8831..a8a943f 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/ODataXmlSerializerImpl.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/ODataXmlSerializerImpl.java
@@ -52,6 +52,7 @@ public class ODataXmlSerializerImpl implements ODataSerializer {
       xmlStreamWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(buffer.getOutputStream(), DEFAULT_CHARSET);
       MetadataDocumentXmlSerializer serializer = new MetadataDocumentXmlSerializer(edm);
       serializer.writeMetadataDocument(xmlStreamWriter);
+      xmlStreamWriter.flush();
       xmlStreamWriter.close();
 
       return buffer.getInputStream();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c93b648b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
index 61e7af7..a8629d8 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
@@ -118,7 +118,6 @@ public class MetadataDocumentXmlSerializer {
     appendDataServices(writer);
 
     writer.writeEndDocument();
-
   }
 
   private void appendDataServices(final XMLStreamWriter writer) throws XMLStreamException {


[5/7] git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/olingo-odata4

Posted by sk...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/olingo-odata4


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

Branch: refs/heads/olingo-266-tecsvc
Commit: beae4797f0bfa2ccd8a8b452a93382dc4559ab2f
Parents: f59a8fb c93b648
Author: Francesco Chicchiriccò <--global>
Authored: Mon May 19 17:47:53 2014 +0200
Committer: Francesco Chicchiriccò <--global>
Committed: Mon May 19 17:47:53 2014 +0200

----------------------------------------------------------------------
 .../olingo/commons/api/http/HttpMethod.java     |   33 +
 lib/pom.xml                                     |    1 +
 .../org/apache/olingo/server/api/OData.java     |   55 +
 .../apache/olingo/server/api/ODataHandler.java  |   28 -
 .../olingo/server/api/ODataHttpHandler.java     |   28 +
 .../apache/olingo/server/api/ODataServer.java   |   52 -
 .../server/api/edm/provider/EntitySet.java      |    2 +-
 lib/server-core/pom.xml                         |   32 +-
 .../org/apache/olingo/server/core/Decoder.java  |   90 +
 .../apache/olingo/server/core/ODataHandler.java |   78 +
 .../olingo/server/core/ODataHandlerImpl.java    |   81 -
 .../server/core/ODataHttpHandlerImpl.java       |  202 +
 .../apache/olingo/server/core/ODataImpl.java    |   61 +
 .../apache/olingo/server/core/ODataRequest.java |  103 +
 .../olingo/server/core/ODataResponse.java       |   56 +
 .../olingo/server/core/ODataServerImpl.java     |   56 -
 .../core/edm/provider/EdmComplexTypeImpl.java   |    2 +-
 .../edm/provider/EdmEntityContainerImpl.java    |    8 +-
 .../core/edm/provider/EdmEntitySetImpl.java     |    5 +-
 .../core/edm/provider/EdmEntityTypeImpl.java    |    4 +-
 .../core/edm/provider/EdmEnumTypeImpl.java      |    2 +-
 .../server/core/edm/provider/EdmMemberImpl.java |   17 +-
 .../edm/provider/EdmNavigationPropertyImpl.java |    6 +-
 .../core/edm/provider/EdmOperationImpl.java     |    2 +-
 .../edm/provider/EdmOperationImportImpl.java    |    3 +-
 .../core/edm/provider/EdmParameterImpl.java     |    5 +-
 .../core/edm/provider/EdmPropertyImpl.java      |    7 +-
 .../core/edm/provider/EdmProviderImpl.java      |   18 +-
 .../provider/EdmReferentialConstraintImpl.java  |   17 +-
 .../core/edm/provider/EdmReturnTypeImpl.java    |    2 +-
 .../server/core/edm/provider/EdmSchemaImpl.java |    6 +-
 .../edm/provider/EdmServiceMetadataImpl.java    |    2 +-
 .../core/edm/provider/EdmSingletonImpl.java     |    5 +-
 .../provider/EdmStructuredTypeHelperImpl.java   |    4 +-
 .../edm/provider/EdmTypeDefinitionImpl.java     |    9 +-
 .../core/serializer/ODataXmlSerializerImpl.java |    1 +
 .../json/ServiceDocumentJsonSerializer.java     |   13 +-
 .../xml/MetadataDocumentXmlSerializer.java      |    1 -
 .../server/core/uri/parser/UriContext.java      |    8 +-
 .../server/core/ODataHttpHandlerImplTest.java   |  175 +
 lib/server-tecsvc/pom.xml                       |   61 +-
 .../olingo/server/tecsvc/TechnicalServlet.java  |   29 +-
 .../tecsvc/provider/ContainerProvider.java      |   80 +-
 .../server/tecsvc/provider/EdmTechProvider.java |    2 +-
 .../server/tecsvc/provider/SchemaProvider.java  |   76 +-
 lib/server-tecsvc/src/main/version/version.html |   43 +
 .../src/main/webapp/META-INF/MANIFEST.MF        |   13 +
 .../src/main/webapp/WEB-INF/web.xml             |    2 +-
 .../src/main/webapp/css/olingo.css              |   89 +
 .../src/main/webapp/img/OlingoOrangeTM.png      |  Bin 0 -> 113360 bytes
 lib/server-tecsvc/src/main/webapp/index.html    |   32 -
 lib/server-tecsvc/src/main/webapp/index.jsp     |   71 +
 .../serializer/json/ServiceDocumentTest.java    |  133 -
 .../serializer/xml/MetadataDocumentTest.java    |  254 -
 .../olingo/server/core/uri/RawUriTest.java      |  151 -
 .../olingo/server/core/uri/UriInfoImplTest.java |  201 -
 .../server/core/uri/UriResourceImplTest.java    |  508 --
 .../core/uri/antlr/TestFullResourcePath.java    | 5110 ------------------
 .../olingo/server/core/uri/antlr/TestLexer.java |  248 -
 .../core/uri/antlr/TestUriParserImpl.java       | 1144 ----
 .../core/uri/queryoption/QueryOptionTest.java   |  303 --
 .../queryoption/expression/ExpressionTest.java  |  239 -
 .../core/uri/testutil/EdmTechTestProvider.java  |  100 -
 .../core/uri/testutil/ExpandValidator.java      |  230 -
 .../core/uri/testutil/FilterTreeToText.java     |  154 -
 .../core/uri/testutil/FilterValidator.java      |  534 --
 .../core/uri/testutil/ParseTreeToText.java      |   82 -
 .../core/uri/testutil/ParserValidator.java      |  162 -
 .../core/uri/testutil/ParserWithLogging.java    |   56 -
 .../core/uri/testutil/ResourceValidator.java    |  599 --
 .../core/uri/testutil/TestErrorLogger.java      |  105 -
 .../core/uri/testutil/TestUriValidator.java     |  258 -
 .../server/core/uri/testutil/TestValidator.java |   23 -
 .../core/uri/testutil/TokenValidator.java       |  194 -
 .../core/uri/testutil/UriLexerWithTrace.java    |   85 -
 .../core/uri/validator/UriValidatorTest.java    |  378 --
 lib/server-test/pom.xml                         |   71 +
 .../olingo/server/core/ODataHandlerTest.java    |   86 +
 .../serializer/json/ServiceDocumentTest.java    |  133 +
 .../serializer/xml/MetadataDocumentTest.java    |  253 +
 .../olingo/server/core/uri/RawUriTest.java      |  151 +
 .../olingo/server/core/uri/UriInfoImplTest.java |  201 +
 .../server/core/uri/UriResourceImplTest.java    |  508 ++
 .../core/uri/antlr/TestFullResourcePath.java    | 5110 ++++++++++++++++++
 .../olingo/server/core/uri/antlr/TestLexer.java |  248 +
 .../core/uri/antlr/TestUriParserImpl.java       | 1144 ++++
 .../core/uri/queryoption/QueryOptionTest.java   |  303 ++
 .../queryoption/expression/ExpressionTest.java  |  239 +
 .../core/uri/testutil/EdmTechTestProvider.java  |  100 +
 .../core/uri/testutil/ExpandValidator.java      |  230 +
 .../core/uri/testutil/FilterTreeToText.java     |  154 +
 .../core/uri/testutil/FilterValidator.java      |  534 ++
 .../core/uri/testutil/ParseTreeToText.java      |   82 +
 .../core/uri/testutil/ParserValidator.java      |  162 +
 .../core/uri/testutil/ParserWithLogging.java    |   56 +
 .../core/uri/testutil/ResourceValidator.java    |  599 ++
 .../core/uri/testutil/TestErrorLogger.java      |  105 +
 .../core/uri/testutil/TestUriValidator.java     |  258 +
 .../server/core/uri/testutil/TestValidator.java |   23 +
 .../core/uri/testutil/TokenValidator.java       |  194 +
 .../core/uri/testutil/UriLexerWithTrace.java    |   85 +
 .../core/uri/validator/UriValidatorTest.java    |  378 ++
 .../src/test/resources/simplelogger.properties  |   20 +
 103 files changed, 12775 insertions(+), 11681 deletions(-)
----------------------------------------------------------------------