You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by fm...@apache.org on 2014/07/25 10:58:06 UTC

[7/7] git commit: [OLINGO-366] fixed providing delayed operation invocation + composable invoker

[OLINGO-366] fixed providing delayed operation invocation + composable invoker


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

Branch: refs/heads/master
Commit: 86d33380e8da509abc0ba5b2e958d276e5759a54
Parents: abb4765
Author: fmartelli <fa...@gmail.com>
Authored: Fri Jul 25 10:57:33 2014 +0200
Committer: fmartelli <fa...@gmail.com>
Committed: Fri Jul 25 10:57:33 2014 +0200

----------------------------------------------------------------------
 .../olingo/ext/proxy/api/ComposableInvoker.java | 24 +++++
 .../apache/olingo/ext/proxy/api/Operations.java | 22 +++++
 .../StructuredCollectionComposableInvoker.java  | 24 +++++
 .../proxy/api/StructuredCollectionInvoker.java  |  2 +-
 .../proxy/api/StructuredComposableInvoker.java  | 23 +++++
 .../olingo/ext/proxy/api/StructuredInvoker.java |  2 +-
 .../proxy/commons/EntityInvocationHandler.java  | 32 ++++++-
 .../ext/proxy/commons/InvokerHandler.java       | 59 ++++++++++--
 .../commons/OperationInvocationHandler.java     | 21 +++--
 .../olingo/ext/proxy/utils/ClassUtils.java      | 14 ++-
 .../src/main/resources/complexCollection.vm     |  2 -
 .../src/main/resources/container.vm             | 20 +++--
 .../src/main/resources/entityCollection.vm      |  2 -
 .../src/main/resources/entitySet.vm             |  2 -
 .../src/main/resources/entityType.vm            |  4 +-
 .../src/main/resources/operation.vm             | 23 +++--
 .../java/org/apache/olingo/fit/V4Services.java  | 13 +++
 .../AllGeoCollectionTypesSet.java               |  7 +-
 .../astoriadefaultservice/AllGeoTypesSet.java   |  7 +-
 .../services/astoriadefaultservice/Car.java     |  7 +-
 .../astoriadefaultservice/Computer.java         |  7 +-
 .../astoriadefaultservice/ComputerDetail.java   |  7 +-
 .../astoriadefaultservice/Customer.java         |  7 +-
 .../astoriadefaultservice/CustomerInfo.java     |  7 +-
 .../astoriadefaultservice/DefaultContainer.java |  2 +-
 .../services/astoriadefaultservice/Driver.java  |  7 +-
 .../astoriadefaultservice/LastLogin.java        |  7 +-
 .../services/astoriadefaultservice/License.java |  7 +-
 .../services/astoriadefaultservice/Login.java   |  7 +-
 .../astoriadefaultservice/MappedEntityType.java |  7 +-
 .../services/astoriadefaultservice/Message.java |  7 +-
 .../MessageAttachment.java                      |  7 +-
 .../services/astoriadefaultservice/Order.java   |  7 +-
 .../astoriadefaultservice/OrderLine.java        |  7 +-
 .../astoriadefaultservice/PageView.java         |  7 +-
 .../services/astoriadefaultservice/Person.java  |  7 +-
 .../astoriadefaultservice/PersonMetadata.java   |  7 +-
 .../services/astoriadefaultservice/Product.java |  7 +-
 .../astoriadefaultservice/ProductDetail.java    |  7 +-
 .../astoriadefaultservice/ProductPhoto.java     |  7 +-
 .../astoriadefaultservice/ProductReview.java    |  7 +-
 .../astoriadefaultservice/RSAToken.java         |  7 +-
 .../types/AliasesCollection.java                |  5 ++
 .../types/AllSpatialCollectionTypes.java        |  5 ++
 .../AllSpatialCollectionTypesCollection.java    |  5 ++
 .../types/AllSpatialCollectionTypes_Simple.java |  6 ++
 ...SpatialCollectionTypes_SimpleCollection.java |  5 ++
 .../types/AllSpatialTypes.java                  |  5 ++
 .../types/AllSpatialTypesCollection.java        |  5 ++
 .../types/AuditInfoCollection.java              |  5 ++
 .../types/BackOrderLine.java                    |  2 +-
 .../types/BackOrderLine2.java                   |  2 +-
 .../types/BackOrderLine2Collection.java         |  5 ++
 .../types/BackOrderLineCollection.java          |  5 ++
 .../astoriadefaultservice/types/Car.java        |  5 ++
 .../types/CarCollection.java                    |  5 ++
 .../types/ComplexToCategoryCollection.java      |  5 ++
 .../astoriadefaultservice/types/Computer.java   |  5 ++
 .../types/ComputerCollection.java               |  5 ++
 .../types/ComputerDetail.java                   |  5 ++
 .../types/ComputerDetailCollection.java         |  5 ++
 .../types/ConcurrencyInfoCollection.java        |  5 ++
 .../types/ContactDetailsCollection.java         |  5 ++
 .../astoriadefaultservice/types/Contractor.java |  2 +-
 .../types/ContractorCollection.java             |  5 ++
 .../astoriadefaultservice/types/Customer.java   |  5 ++
 .../types/CustomerCollection.java               |  5 ++
 .../types/CustomerInfo.java                     |  5 ++
 .../types/CustomerInfoCollection.java           |  5 ++
 .../types/DimensionsCollection.java             |  5 ++
 .../types/DiscontinuedProduct.java              |  2 +-
 .../types/DiscontinuedProductCollection.java    |  5 ++
 .../astoriadefaultservice/types/Driver.java     |  5 ++
 .../types/DriverCollection.java                 |  5 ++
 .../astoriadefaultservice/types/Employee.java   |  2 +-
 .../types/EmployeeCollection.java               |  2 +-
 .../astoriadefaultservice/types/LastLogin.java  |  5 ++
 .../types/LastLoginCollection.java              |  5 ++
 .../astoriadefaultservice/types/License.java    |  5 ++
 .../types/LicenseCollection.java                |  5 ++
 .../astoriadefaultservice/types/Login.java      |  5 ++
 .../types/LoginCollection.java                  |  5 ++
 .../types/MappedEntityType.java                 |  5 ++
 .../types/MappedEntityTypeCollection.java       |  5 ++
 .../astoriadefaultservice/types/Message.java    |  5 ++
 .../types/MessageAttachment.java                |  5 ++
 .../types/MessageAttachmentCollection.java      |  5 ++
 .../types/MessageCollection.java                |  5 ++
 .../astoriadefaultservice/types/Order.java      |  5 ++
 .../types/OrderCollection.java                  |  5 ++
 .../astoriadefaultservice/types/OrderLine.java  |  2 +-
 .../types/OrderLineCollection.java              |  5 ++
 .../astoriadefaultservice/types/PageView.java   |  5 ++
 .../types/PageViewCollection.java               |  5 ++
 .../astoriadefaultservice/types/Person.java     |  2 +-
 .../types/PersonCollection.java                 |  5 ++
 .../types/PersonMetadata.java                   |  5 ++
 .../types/PersonMetadataCollection.java         |  5 ++
 .../types/PhoneCollection.java                  |  5 ++
 .../astoriadefaultservice/types/Product.java    |  2 +-
 .../types/ProductCollection.java                |  5 ++
 .../types/ProductDetail.java                    |  5 ++
 .../types/ProductDetailCollection.java          |  5 ++
 .../types/ProductPageView.java                  |  6 ++
 .../types/ProductPageViewCollection.java        |  5 ++
 .../types/ProductPhoto.java                     |  5 ++
 .../types/ProductPhotoCollection.java           |  5 ++
 .../types/ProductReview.java                    |  5 ++
 .../types/ProductReviewCollection.java          |  5 ++
 .../astoriadefaultservice/types/RSAToken.java   |  5 ++
 .../types/RSATokenCollection.java               |  5 ++
 .../types/SpecialEmployee.java                  |  2 +-
 .../types/SpecialEmployeeCollection.java        |  2 +-
 .../opentypesservicev3/DefaultContainer.java    |  2 +-
 .../odata/services/opentypesservicev3/Row.java  |  7 +-
 .../services/opentypesservicev3/RowIndex.java   |  7 +-
 .../types/ContactDetailsCollection.java         |  5 ++
 .../opentypesservicev3/types/IndexedRow.java    |  6 ++
 .../types/IndexedRowCollection.java             |  5 ++
 .../services/opentypesservicev3/types/Row.java  |  5 ++
 .../opentypesservicev3/types/RowCollection.java |  5 ++
 .../opentypesservicev3/types/RowIndex.java      |  5 ++
 .../types/RowIndexCollection.java               |  5 ++
 .../primitivekeysservice/EdmBinarySet.java      |  7 +-
 .../primitivekeysservice/EdmBooleanSet.java     |  7 +-
 .../primitivekeysservice/EdmByteSet.java        |  7 +-
 .../EdmDateTimeOffsetSet.java                   |  7 +-
 .../primitivekeysservice/EdmDateTimeSet.java    |  7 +-
 .../primitivekeysservice/EdmDecimalSet.java     |  7 +-
 .../primitivekeysservice/EdmDoubleSet.java      |  7 +-
 .../primitivekeysservice/EdmGuidSet.java        |  7 +-
 .../primitivekeysservice/EdmInt16Set.java       |  7 +-
 .../primitivekeysservice/EdmInt32Set.java       |  7 +-
 .../primitivekeysservice/EdmInt64Set.java       |  7 +-
 .../primitivekeysservice/EdmSingleSet.java      |  7 +-
 .../primitivekeysservice/EdmStringSet.java      |  7 +-
 .../primitivekeysservice/EdmTimeSet.java        |  7 +-
 .../services/primitivekeysservice/Folders.java  |  7 +-
 .../primitivekeysservice/TestContext.java       |  2 +-
 .../primitivekeysservice/types/EdmBinary.java   |  5 ++
 .../types/EdmBinaryCollection.java              |  5 ++
 .../primitivekeysservice/types/EdmBoolean.java  |  5 ++
 .../types/EdmBooleanCollection.java             |  5 ++
 .../primitivekeysservice/types/EdmByte.java     |  5 ++
 .../types/EdmByteCollection.java                |  5 ++
 .../primitivekeysservice/types/EdmDateTime.java |  5 ++
 .../types/EdmDateTimeCollection.java            |  5 ++
 .../types/EdmDateTimeOffset.java                |  5 ++
 .../types/EdmDateTimeOffsetCollection.java      |  5 ++
 .../primitivekeysservice/types/EdmDecimal.java  |  5 ++
 .../types/EdmDecimalCollection.java             |  5 ++
 .../primitivekeysservice/types/EdmDouble.java   |  5 ++
 .../types/EdmDoubleCollection.java              |  5 ++
 .../primitivekeysservice/types/EdmGuid.java     |  5 ++
 .../types/EdmGuidCollection.java                |  5 ++
 .../primitivekeysservice/types/EdmInt16.java    |  5 ++
 .../types/EdmInt16Collection.java               |  5 ++
 .../primitivekeysservice/types/EdmInt32.java    |  5 ++
 .../types/EdmInt32Collection.java               |  5 ++
 .../primitivekeysservice/types/EdmInt64.java    |  5 ++
 .../types/EdmInt64Collection.java               |  5 ++
 .../primitivekeysservice/types/EdmSingle.java   |  5 ++
 .../types/EdmSingleCollection.java              |  5 ++
 .../primitivekeysservice/types/EdmString.java   |  5 ++
 .../types/EdmStringCollection.java              |  5 ++
 .../primitivekeysservice/types/EdmTime.java     |  5 ++
 .../types/EdmTimeCollection.java                |  5 ++
 .../primitivekeysservice/types/Folder.java      |  5 ++
 .../types/FolderCollection.java                 |  5 ++
 .../AllGeoCollectionTypesSet.java               |  7 +-
 .../astoriadefaultservice/AllGeoTypesSet.java   |  7 +-
 .../services/astoriadefaultservice/Car.java     |  7 +-
 .../astoriadefaultservice/Computer.java         |  7 +-
 .../astoriadefaultservice/ComputerDetail.java   |  7 +-
 .../astoriadefaultservice/Customer.java         |  7 +-
 .../astoriadefaultservice/CustomerInfo.java     |  7 +-
 .../astoriadefaultservice/DefaultContainer.java |  2 +-
 .../services/astoriadefaultservice/Driver.java  |  7 +-
 .../astoriadefaultservice/LastLogin.java        |  7 +-
 .../services/astoriadefaultservice/License.java |  7 +-
 .../services/astoriadefaultservice/Login.java   |  7 +-
 .../astoriadefaultservice/MappedEntityType.java |  7 +-
 .../services/astoriadefaultservice/Message.java |  7 +-
 .../MessageAttachment.java                      |  7 +-
 .../services/astoriadefaultservice/Order.java   |  7 +-
 .../astoriadefaultservice/OrderLine.java        |  7 +-
 .../astoriadefaultservice/PageView.java         |  7 +-
 .../services/astoriadefaultservice/Person.java  |  7 +-
 .../astoriadefaultservice/PersonMetadata.java   |  7 +-
 .../services/astoriadefaultservice/Product.java |  7 +-
 .../astoriadefaultservice/ProductDetail.java    |  7 +-
 .../astoriadefaultservice/ProductPhoto.java     |  7 +-
 .../astoriadefaultservice/ProductReview.java    |  7 +-
 .../astoriadefaultservice/RSAToken.java         |  7 +-
 .../types/AliasesCollection.java                |  5 ++
 .../types/AllSpatialCollectionTypes.java        |  5 ++
 .../AllSpatialCollectionTypesCollection.java    |  5 ++
 .../types/AllSpatialCollectionTypes_Simple.java |  6 ++
 ...SpatialCollectionTypes_SimpleCollection.java |  5 ++
 .../types/AllSpatialTypes.java                  |  5 ++
 .../types/AllSpatialTypesCollection.java        |  5 ++
 .../types/AuditInfoCollection.java              |  5 ++
 .../types/BackOrderLine.java                    |  6 ++
 .../types/BackOrderLine2.java                   |  6 ++
 .../types/BackOrderLine2Collection.java         |  5 ++
 .../types/BackOrderLineCollection.java          |  5 ++
 .../astoriadefaultservice/types/Car.java        |  5 ++
 .../types/CarCollection.java                    |  5 ++
 .../types/ComplexToCategoryCollection.java      |  5 ++
 .../ComplexWithAllPrimitiveTypesCollection.java |  5 ++
 .../astoriadefaultservice/types/Computer.java   |  2 +-
 .../types/ComputerCollection.java               |  5 ++
 .../types/ComputerDetail.java                   |  2 +-
 .../types/ComputerDetailCollection.java         |  5 ++
 .../types/ConcurrencyInfoCollection.java        |  5 ++
 .../types/ContactDetailsCollection.java         |  5 ++
 .../astoriadefaultservice/types/Contractor.java |  6 ++
 .../types/ContractorCollection.java             |  5 ++
 .../astoriadefaultservice/types/Customer.java   |  5 ++
 .../types/CustomerCollection.java               |  5 ++
 .../types/CustomerInfo.java                     |  5 ++
 .../types/CustomerInfoCollection.java           |  5 ++
 .../types/DimensionsCollection.java             |  5 ++
 .../types/DiscontinuedProduct.java              |  2 +-
 .../types/DiscontinuedProductCollection.java    |  5 ++
 .../astoriadefaultservice/types/Driver.java     |  5 ++
 .../types/DriverCollection.java                 |  5 ++
 .../astoriadefaultservice/types/Employee.java   |  3 +-
 .../types/EmployeeCollection.java               |  2 +-
 .../astoriadefaultservice/types/LastLogin.java  |  5 ++
 .../types/LastLoginCollection.java              |  5 ++
 .../astoriadefaultservice/types/License.java    |  5 ++
 .../types/LicenseCollection.java                |  5 ++
 .../astoriadefaultservice/types/Login.java      |  5 ++
 .../types/LoginCollection.java                  |  5 ++
 .../types/MappedEntityType.java                 |  5 ++
 .../types/MappedEntityTypeCollection.java       |  5 ++
 .../astoriadefaultservice/types/Message.java    |  5 ++
 .../types/MessageAttachment.java                |  5 ++
 .../types/MessageAttachmentCollection.java      |  5 ++
 .../types/MessageCollection.java                |  5 ++
 .../astoriadefaultservice/types/Order.java      |  5 ++
 .../types/OrderCollection.java                  |  5 ++
 .../astoriadefaultservice/types/OrderLine.java  |  5 ++
 .../types/OrderLineCollection.java              |  5 ++
 .../astoriadefaultservice/types/PageView.java   |  5 ++
 .../types/PageViewCollection.java               |  5 ++
 .../astoriadefaultservice/types/Person.java     |  5 ++
 .../types/PersonCollection.java                 |  5 ++
 .../types/PersonMetadata.java                   |  5 ++
 .../types/PersonMetadataCollection.java         |  5 ++
 .../types/PhoneCollection.java                  |  5 ++
 .../astoriadefaultservice/types/Product.java    |  2 +-
 .../types/ProductCollection.java                |  5 ++
 .../types/ProductDetail.java                    |  5 ++
 .../types/ProductDetailCollection.java          |  5 ++
 .../types/ProductPageView.java                  |  6 ++
 .../types/ProductPageViewCollection.java        |  5 ++
 .../types/ProductPhoto.java                     |  5 ++
 .../types/ProductPhotoCollection.java           |  5 ++
 .../types/ProductReview.java                    |  5 ++
 .../types/ProductReviewCollection.java          |  5 ++
 .../astoriadefaultservice/types/RSAToken.java   |  5 ++
 .../types/RSATokenCollection.java               |  5 ++
 .../types/SpecialEmployee.java                  |  2 +-
 .../types/SpecialEmployeeCollection.java        |  5 ++
 .../fit/proxy/v4/APIBasicDesignTestITCase.java  | 24 +++++
 .../v4/OperationImportInvokeTestITCase.java     | 12 +--
 .../proxy/v4/demo/odatademo/Advertisements.java |  7 +-
 .../fit/proxy/v4/demo/odatademo/Categories.java |  7 +-
 .../proxy/v4/demo/odatademo/DemoService.java    |  2 +-
 .../proxy/v4/demo/odatademo/PersonDetails.java  |  7 +-
 .../fit/proxy/v4/demo/odatademo/Persons.java    |  7 +-
 .../proxy/v4/demo/odatademo/ProductDetails.java |  7 +-
 .../fit/proxy/v4/demo/odatademo/Products.java   |  7 +-
 .../fit/proxy/v4/demo/odatademo/Suppliers.java  |  7 +-
 .../demo/odatademo/types/AddressCollection.java |  5 ++
 .../v4/demo/odatademo/types/Advertisement.java  |  5 ++
 .../types/AdvertisementCollection.java          |  5 ++
 .../proxy/v4/demo/odatademo/types/Category.java |  5 ++
 .../odatademo/types/CategoryCollection.java     |  5 ++
 .../proxy/v4/demo/odatademo/types/Customer.java |  6 ++
 .../odatademo/types/CustomerCollection.java     |  5 ++
 .../proxy/v4/demo/odatademo/types/Employee.java |  6 ++
 .../odatademo/types/EmployeeCollection.java     |  5 ++
 .../demo/odatademo/types/FeaturedProduct.java   |  2 +-
 .../types/FeaturedProductCollection.java        |  5 ++
 .../proxy/v4/demo/odatademo/types/Person.java   |  5 ++
 .../demo/odatademo/types/PersonCollection.java  |  5 ++
 .../v4/demo/odatademo/types/PersonDetail.java   |  5 ++
 .../odatademo/types/PersonDetailCollection.java |  5 ++
 .../proxy/v4/demo/odatademo/types/Product.java  |  2 +-
 .../demo/odatademo/types/ProductCollection.java |  5 ++
 .../v4/demo/odatademo/types/ProductDetail.java  |  5 ++
 .../types/ProductDetailCollection.java          |  5 ++
 .../proxy/v4/demo/odatademo/types/Supplier.java |  5 ++
 .../odatademo/types/SupplierCollection.java     |  5 ++
 .../opentypesservicev4/DefaultContainer.java    |  2 +-
 .../odata/services/opentypesservicev4/Row.java  |  7 +-
 .../services/opentypesservicev4/RowIndex.java   |  7 +-
 .../types/AccountInfoCollection.java            |  5 ++
 .../types/ContactDetailsCollection.java         |  5 ++
 .../opentypesservicev4/types/IndexedRow.java    |  6 ++
 .../types/IndexedRowCollection.java             |  5 ++
 .../services/opentypesservicev4/types/Row.java  |  5 ++
 .../opentypesservicev4/types/RowCollection.java |  5 ++
 .../opentypesservicev4/types/RowIndex.java      |  5 ++
 .../types/RowIndexCollection.java               |  5 ++
 .../services/odatawcfservice/Accounts.java      |  7 +-
 .../services/odatawcfservice/Customers.java     |  7 +-
 .../services/odatawcfservice/Departments.java   |  7 +-
 .../services/odatawcfservice/Employees.java     |  7 +-
 .../odatawcfservice/InMemoryEntities.java       |  8 +-
 .../services/odatawcfservice/OrderDetails.java  |  7 +-
 .../odata/services/odatawcfservice/Orders.java  |  7 +-
 .../odata/services/odatawcfservice/People.java  |  7 +-
 .../odatawcfservice/ProductDetails.java         |  7 +-
 .../odatawcfservice/ProductReviews.java         |  7 +-
 .../services/odatawcfservice/Products.java      |  7 +-
 .../services/odatawcfservice/StoredPIs.java     |  7 +-
 .../odatawcfservice/SubscriptionTemplates.java  |  7 +-
 .../services/odatawcfservice/types/Account.java |  2 +-
 .../types/AccountCollection.java                |  5 ++
 .../types/AccountInfoCollection.java            |  5 ++
 .../types/AddressCollection.java                |  5 ++
 .../services/odatawcfservice/types/Asset.java   |  5 ++
 .../odatawcfservice/types/AssetCollection.java  |  5 ++
 .../services/odatawcfservice/types/Club.java    |  5 ++
 .../odatawcfservice/types/ClubCollection.java   |  5 ++
 .../services/odatawcfservice/types/Company.java |  2 +-
 .../types/CompanyAddressCollection.java         |  5 ++
 .../types/CompanyCollection.java                |  5 ++
 .../odatawcfservice/types/CreditCardPI.java     |  6 ++
 .../types/CreditCardPICollection.java           |  5 ++
 .../odatawcfservice/types/CreditRecord.java     |  5 ++
 .../types/CreditRecordCollection.java           |  5 ++
 .../odatawcfservice/types/Customer.java         |  2 +-
 .../types/CustomerCollection.java               |  5 ++
 .../odatawcfservice/types/Department.java       |  5 ++
 .../types/DepartmentCollection.java             |  5 ++
 .../odatawcfservice/types/Employee.java         |  2 +-
 .../types/EmployeeCollection.java               |  5 ++
 .../odatawcfservice/types/GiftCard.java         |  2 +-
 .../types/GiftCardCollection.java               |  5 ++
 .../types/HomeAddressCollection.java            |  5 ++
 .../odatawcfservice/types/LabourUnion.java      |  5 ++
 .../types/LabourUnionCollection.java            |  5 ++
 .../services/odatawcfservice/types/Order.java   |  5 ++
 .../odatawcfservice/types/OrderCollection.java  |  5 ++
 .../odatawcfservice/types/OrderDetail.java      |  5 ++
 .../types/OrderDetailCollection.java            |  5 ++
 .../types/PaymentInstrument.java                |  5 ++
 .../types/PaymentInstrumentCollection.java      |  5 ++
 .../services/odatawcfservice/types/Person.java  |  2 +-
 .../odatawcfservice/types/PersonCollection.java |  5 ++
 .../services/odatawcfservice/types/Product.java |  2 +-
 .../types/ProductCollection.java                | 27 +++---
 .../odatawcfservice/types/ProductDetail.java    |  2 +-
 .../types/ProductDetailCollection.java          |  5 ++
 .../odatawcfservice/types/ProductReview.java    |  5 ++
 .../types/ProductReviewCollection.java          |  5 ++
 .../odatawcfservice/types/PublicCompany.java    |  2 +-
 .../types/PublicCompanyCollection.java          |  5 ++
 .../odatawcfservice/types/Statement.java        |  5 ++
 .../types/StatementCollection.java              |  5 ++
 .../odatawcfservice/types/StoredPI.java         |  5 ++
 .../types/StoredPICollection.java               |  5 ++
 .../odatawcfservice/types/Subscription.java     |  5 ++
 .../types/SubscriptionCollection.java           |  5 ++
 .../invoke/AbstractODataInvokeRequest.java      |  7 +-
 .../invoke/v3/ODataInvokeRequestImpl.java       | 20 +----
 .../invoke/v4/ODataInvokeRequestImpl.java       | 43 +--------
 .../apache/olingo/client/core/uri/URIUtils.java | 95 ++++++++++++++++----
 373 files changed, 2080 insertions(+), 265 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/ComposableInvoker.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/ComposableInvoker.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/ComposableInvoker.java
new file mode 100644
index 0000000..9319ebd
--- /dev/null
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/ComposableInvoker.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;
+
+public interface ComposableInvoker<T, O extends Operations> extends Invoker<T> {
+
+  O compose();
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Operations.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Operations.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Operations.java
new file mode 100644
index 0000000..8074dd5
--- /dev/null
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/Operations.java
@@ -0,0 +1,22 @@
+/*
+ * 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;
+
+public interface Operations {
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/StructuredCollectionComposableInvoker.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/StructuredCollectionComposableInvoker.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/StructuredCollectionComposableInvoker.java
new file mode 100644
index 0000000..61cf87a
--- /dev/null
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/StructuredCollectionComposableInvoker.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;
+
+public interface StructuredCollectionComposableInvoker<CT extends StructuredCollection<?, ?, ?>, O extends Operations>
+        extends StructuredCollectionQuery<StructuredCollectionInvoker<CT>>, StructuredCollectionInvoker<CT>,
+        ComposableInvoker<CT, O> {
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/StructuredCollectionInvoker.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/StructuredCollectionInvoker.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/StructuredCollectionInvoker.java
index a8b217d..b5f8abe 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/StructuredCollectionInvoker.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/StructuredCollectionInvoker.java
@@ -18,6 +18,6 @@
  */
 package org.apache.olingo.ext.proxy.api;
 
-public interface StructuredCollectionInvoker<CT extends StructuredCollectionQuery<?>>
+public interface StructuredCollectionInvoker<CT extends StructuredCollection<?, ?, ?>>
         extends StructuredCollectionQuery<StructuredCollectionInvoker<CT>>, Invoker<CT> {
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/StructuredComposableInvoker.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/StructuredComposableInvoker.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/StructuredComposableInvoker.java
new file mode 100644
index 0000000..a5a3be9
--- /dev/null
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/StructuredComposableInvoker.java
@@ -0,0 +1,23 @@
+/*
+ * 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;
+
+public interface StructuredComposableInvoker<T extends StructuredType<?>, O extends Operations>
+        extends StructuredQuery<StructuredInvoker<T>>, StructuredInvoker<T>, ComposableInvoker<T, O> {
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/StructuredInvoker.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/StructuredInvoker.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/StructuredInvoker.java
index b31f52c..4b9f3c8 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/StructuredInvoker.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/StructuredInvoker.java
@@ -18,6 +18,6 @@
  */
 package org.apache.olingo.ext.proxy.api;
 
-public interface StructuredInvoker<T extends StructuredQuery<?>>
+public interface StructuredInvoker<T extends StructuredType<?>>
         extends StructuredQuery<StructuredInvoker<T>>, Invoker<T> {
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/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 d996328..7cd8d3c 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
@@ -112,6 +112,14 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
   }
 
   public static EntityInvocationHandler getInstance(
+          final URI entityURI,
+          final Class<?> typeRef,
+          final AbstractService<?> service) {
+
+    return new EntityInvocationHandler(entityURI, typeRef, service);
+  }
+
+  public static EntityInvocationHandler getInstance(
           final Class<?> typeRef,
           final AbstractService<?> service) {
 
@@ -130,10 +138,26 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
     this.internal = service.getClient().getObjectFactory().newEntity(new FullQualifiedName(namespace, name));
     CommonODataEntity.class.cast(this.internal).setMediaEntity(typeRef.getAnnotation(EntityType.class).hasStream());
 
-    this.uuid = new EntityUUID(
-            null,
-            typeRef,
-            null);
+    this.uuid = new EntityUUID(null, typeRef, null);
+  }
+
+  private EntityInvocationHandler(
+          final URI entityURI,
+          final Class<?> typeRef,
+          final AbstractService<?> service) {
+
+    super(typeRef, service);
+
+    final String name = typeRef.getAnnotation(org.apache.olingo.ext.proxy.api.annotations.EntityType.class).name();
+    final String namespace = typeRef.getAnnotation(Namespace.class).value();
+
+    this.internal = service.getClient().getObjectFactory().newEntity(new FullQualifiedName(namespace, name));
+    CommonODataEntity.class.cast(this.internal).setMediaEntity(typeRef.getAnnotation(EntityType.class).hasStream());
+
+    this.baseURI = entityURI;
+    this.uri = entityURI == null ? null : getClient().newURIBuilder(baseURI.toASCIIString());
+
+    this.uuid = new EntityUUID(null, typeRef, null);
   }
 
   private EntityInvocationHandler(

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/InvokerHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/InvokerHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/InvokerHandler.java
index fecc4cb..fa478f5 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/InvokerHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/InvokerHandler.java
@@ -20,15 +20,18 @@ package org.apache.olingo.ext.proxy.commons;
 
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
+import java.lang.reflect.Type;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.olingo.client.api.communication.request.invoke.ODataNoContent;
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.client.api.uri.CommonURIBuilder;
 import org.apache.olingo.client.api.uri.URIFilter;
+import org.apache.olingo.client.core.uri.URIUtils;
 import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
 import org.apache.olingo.commons.api.domain.CommonODataProperty;
@@ -62,14 +65,16 @@ public class InvokerHandler<T, C> extends AbstractInvocationHandler {
 
   private final EdmOperation edmOperation;
 
-  private final Class<T> reference;
+  private final Class<T> targetRef;
+
+  private final Class<?> operationRef;
 
   public InvokerHandler(
           final URI uri,
           final Map<String, ODataValue> parameters,
           final Operation operation,
           final EdmOperation edmOperation,
-          final Class<T> reference,
+          final Type[] references,
           final AbstractService<?> service) {
 
     super(service);
@@ -79,7 +84,13 @@ public class InvokerHandler<T, C> extends AbstractInvocationHandler {
     this.parameters = parameters;
     this.edmOperation = edmOperation;
     this.operation = operation;
-    this.reference = reference;
+    if (references.length > 0) {
+      this.targetRef = ClassUtils.<T>getTypeClass(references[0]);
+      this.operationRef = references.length > 1 ? ClassUtils.<T>getTypeClass(references[1]) : null;
+    } else {
+      this.targetRef = null;
+      this.operationRef = null;
+    }
   }
 
   public C compose() {
@@ -116,11 +127,11 @@ public class InvokerHandler<T, C> extends AbstractInvocationHandler {
 
       if (edmType.isEntityType()) {
         if (edmType.isCollection()) {
-          final Class<?> collItemType = ClassUtils.extractTypeArg(reference, EntityCollection.class);
+          final Class<?> collItemType = ClassUtils.extractTypeArg(targetRef, EntityCollection.class);
           return (T) ProxyUtils.getEntityCollectionProxy(
                   service,
                   collItemType,
-                  reference,
+                  targetRef,
                   null,
                   (CommonODataEntitySet) result,
                   this.baseURI,
@@ -130,14 +141,14 @@ public class InvokerHandler<T, C> extends AbstractInvocationHandler {
                   service,
                   (CommonODataEntity) result,
                   null,
-                  reference,
+                  targetRef,
                   null,
                   false);
         }
       } else {
         Object res;
 
-        final Class<?> ref = ClassUtils.getTypeClass(reference);
+        final Class<?> ref = ClassUtils.getTypeClass(targetRef);
         final CommonODataProperty property = (CommonODataProperty) result;
 
         if (property == null || property.hasNullValue()) {
@@ -185,7 +196,7 @@ public class InvokerHandler<T, C> extends AbstractInvocationHandler {
             res = ProxyUtils.getComplex(
                     service, property.getName(), property.getValue().asComplex(), ref, null, null, false);
           } else {
-            res = CoreUtils.getObjectFromODataValue(property.getValue(), reference, service);
+            res = CoreUtils.getObjectFromODataValue(property.getValue(), targetRef, service);
           }
         }
 
@@ -216,6 +227,7 @@ public class InvokerHandler<T, C> extends AbstractInvocationHandler {
   }
 
   @Override
+  @SuppressWarnings({"unchecked", "rawtype"})
   public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
     if ("filter".equals(method.getName())
             || "orderBy".equals(method.getName())
@@ -225,6 +237,37 @@ public class InvokerHandler<T, C> extends AbstractInvocationHandler {
             || "select".equals(method.getName())) {
       invokeSelfMethod(method, args);
       return proxy;
+    } else if ("compose".equals(method.getName()) && ArrayUtils.isEmpty(args)) {
+
+      final EdmTypeInfo edmType = new EdmTypeInfo.Builder().
+              setEdm(service.getClient().getCachedEdm()).setTypeExpression(operation.returnType()).build();
+
+      final OperationInvocationHandler handler;
+
+      final URI prefixURI = URIUtils.buildInvokeRequestURI(this.baseURI, parameters, getClient().getServiceVersion());
+
+      if (edmType.isComplexType()) {
+        if (edmType.isCollection()) {
+          handler = OperationInvocationHandler.getInstance(new ComplexCollectionInvocationHandler(
+                  service, targetRef, getClient().newURIBuilder(prefixURI.toASCIIString())));
+        } else {
+          handler = OperationInvocationHandler.getInstance(ComplexInvocationHandler.getInstance(
+                  targetRef, service, getClient().newURIBuilder(prefixURI.toASCIIString())));
+        }
+      } else {
+        if (edmType.isCollection()) {
+          handler = OperationInvocationHandler.getInstance(new EntityCollectionInvocationHandler(
+                  service, null, targetRef, null, getClient().newURIBuilder(prefixURI.toASCIIString())));
+        } else {
+          handler = OperationInvocationHandler.getInstance(EntityInvocationHandler.getInstance(
+                  prefixURI, targetRef, service));
+        }
+      }
+
+      return Proxy.newProxyInstance(
+              Thread.currentThread().getContextClassLoader(),
+              new Class<?>[] {operationRef}, handler);
+
     } else if (isSelfMethod(method, args)) {
       return invokeSelfMethod(method, args);
     } else {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java
index 0fb8b96..1ff39e1 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java
@@ -18,11 +18,8 @@
  */
 package org.apache.olingo.ext.proxy.commons;
 
-import org.apache.olingo.client.api.uri.CommonURIBuilder;
-import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.commons.api.domain.ODataOperation;
 import org.apache.olingo.commons.api.edm.EdmAction;
-import org.apache.olingo.commons.api.edm.EdmEntityContainer;
 import org.apache.olingo.commons.api.edm.EdmEntityType;
 import org.apache.olingo.commons.api.edm.EdmFunction;
 import org.apache.olingo.commons.api.edm.EdmOperation;
@@ -43,7 +40,10 @@ import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import org.apache.olingo.client.api.uri.CommonURIBuilder;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.commons.api.domain.ODataValue;
+import org.apache.olingo.commons.api.edm.EdmEntityContainer;
 import org.apache.olingo.commons.core.edm.EdmTypeInfo;
 import org.apache.olingo.ext.proxy.utils.CoreUtils;
 
@@ -63,6 +63,10 @@ final class OperationInvocationHandler extends AbstractInvocationHandler impleme
     return new OperationInvocationHandler(entityHandler);
   }
 
+  static OperationInvocationHandler getInstance(final ComplexInvocationHandler complexHandler) {
+    return new OperationInvocationHandler(complexHandler);
+  }
+
   static OperationInvocationHandler getInstance(final EntityCollectionInvocationHandler<?> collectionHandler) {
     return new OperationInvocationHandler(collectionHandler);
   }
@@ -89,6 +93,13 @@ final class OperationInvocationHandler extends AbstractInvocationHandler impleme
     this.targetFQN = entityHandler.getEntity().getTypeName();
   }
 
+  private OperationInvocationHandler(final ComplexInvocationHandler complexHandler) {
+    super(complexHandler.service);
+
+    this.target = complexHandler;
+    this.targetFQN = new FullQualifiedName(complexHandler.getComplex().getTypeName());
+  }
+
   private OperationInvocationHandler(final EntityCollectionInvocationHandler<?> collectionHandler) {
     super(collectionHandler.service);
 
@@ -184,12 +195,12 @@ final class OperationInvocationHandler extends AbstractInvocationHandler impleme
 
         return Proxy.newProxyInstance(
                 Thread.currentThread().getContextClassLoader(),
-                new Class<?>[] {method.getReturnType()}, new InvokerHandler(
+                new Class<?>[] {ClassUtils.getTypeClass(method.getGenericReturnType())}, new InvokerHandler(
                 edmOperation.getKey(),
                 parameterValues,
                 operation,
                 edmOperation.getValue(),
-                operation.referenceType(),
+                ClassUtils.getTypeArguments(method.getGenericReturnType()),
                 service));
       } else {
         throw new NoSuchMethodException(method.getName());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/ClassUtils.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/ClassUtils.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/ClassUtils.java
index 5e14f3f..8d5c08c 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/ClassUtils.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/ClassUtils.java
@@ -33,6 +33,7 @@ import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -157,7 +158,18 @@ public final class ClassUtils {
     return voidConstructor.newInstance();
   }
 
-  public static Class<?> getTypeClass(final Type type) {
+  public static Type[] getTypeArguments(final Type type) {
+    if (type instanceof ParameterizedType) {
+      return (ParameterizedType.class.cast(type).getActualTypeArguments());
+    } else if (type instanceof TypeVariable) {
+      return TypeVariable.class.cast(type).getBounds();
+    } else {
+      return new Type[] {};
+    }
+  }
+
+  @SuppressWarnings("unchecked")
+  public static <T> Class<T> getTypeClass(final Type type) {
     if (type instanceof ParameterizedType) {
       return getTypeClass(ParameterizedType.class.cast(type).getRawType());
     } else if (type instanceof Class) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/ext/pojogen-maven-plugin/src/main/resources/complexCollection.vm
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/resources/complexCollection.vm b/ext/pojogen-maven-plugin/src/main/resources/complexCollection.vm
index 70262d9..6eba868 100644
--- a/ext/pojogen-maven-plugin/src/main/resources/complexCollection.vm
+++ b/ext/pojogen-maven-plugin/src/main/resources/complexCollection.vm
@@ -52,10 +52,8 @@ public interface $utility.capitalize($complexType.Name)Collection extends
     org.apache.olingo.ext.proxy.api.ComplexCollection<$javaComplexType, ${javaComplexType}Collection, ${javaComplexType}Collection> {
 #set( $functions = $utility.getFunctionsBoundTo($complexType.Name, true) )
 #set( $actions = $utility.getActionsBoundTo($complexType.Name, true) )
-#if( $functions.size() > 0 || $actions.size() > 0 )
 #set($structuredType = $complexType)
 #parse( "operation.vm" )
-#end
 
   Object getAnnotation(Class<? extends AbstractTerm> term);
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/ext/pojogen-maven-plugin/src/main/resources/container.vm
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/resources/container.vm b/ext/pojogen-maven-plugin/src/main/resources/container.vm
index 939e1f5..827de54 100644
--- a/ext/pojogen-maven-plugin/src/main/resources/container.vm
+++ b/ext/pojogen-maven-plugin/src/main/resources/container.vm
@@ -69,19 +69,24 @@ public interface $utility.capitalize($container.Name) extends PersistenceManager
 
   Operations operations();
 
-  public interface Operations {
+  public interface Operations extends org.apache.olingo.ext.proxy.api.Operations {
   #foreach($operation in $container.FunctionImports)
   #foreach($function in $operation.UnboundFunctions)
     #if($function.ReturnType)#*
       *##set($defaultType = $utility.getJavaType($function.ReturnType.Type, $function.ReturnType.Collection))#*
+      *##if($function.Composable)#*
+        *##set($composable = "ComposableInvoker<$defaultType, ${defaultType}.Operations>")#*
+      *##{else}#*
+        *##set($composable = "Invoker<$defaultType>")#*
+      *##end#*
       *##if(!($function.getReturnType().isCollection() || ${function.ReturnType.Type.Kind} == "ENTITY" || ${function.ReturnType.Type.Kind} == "COMPLEX" || $utility.isStreamType($function.ReturnType.Type)))#*
         *##set($returnType = "org.apache.olingo.ext.proxy.api.Invoker<$defaultType>")#*
       *##else#*
         *##if(${function.ReturnType.Type.Kind} == "ENTITY" || ${function.ReturnType.Type.Kind} == "COMPLEX")#*
           *##if($function.getReturnType().isCollection())#*
-            *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredCollectionInvoker<$defaultType>")#*
+            *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredCollection${composable}")#*
           *##{else}#*
-            *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredInvoker<$defaultType>")#*
+            *##set($returnType = "org.apache.olingo.ext.proxy.api.Structured${composable}")#*
           *##end#*
         *##{else}#*
           *##if($function.getReturnType().isCollection())#*
@@ -119,14 +124,19 @@ public interface $utility.capitalize($container.Name) extends PersistenceManager
   #if($action)
     #if($action.ReturnType)#*
       *##set($defaultType = $utility.getJavaType($action.ReturnType.Type, $action.ReturnType.Collection))#*
+      *##if($action.Composable)#*
+        *##set($composable = "ComposableInvoker<$defaultType, ${defaultType}.Operations>")#*
+      *##{else}#*
+        *##set($composable = "Invoker<$defaultType>")#*
+      *##end#*
       *##if(!($action.getReturnType().isCollection() || ${action.ReturnType.Type.Kind} == "ENTITY" || ${action.ReturnType.Type.Kind} == "COMPLEX" || $utility.isStreamType($action.ReturnType.Type)))#*
         *##set($returnType = "org.apache.olingo.ext.proxy.api.Invoker<$defaultType>")#*
       *##else#*
         *##if(${action.ReturnType.Type.Kind} == "ENTITY" || ${action.ReturnType.Type.Kind} == "COMPLEX")#*
           *##if($action.getReturnType().isCollection())#*
-            *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredCollectionInvoker<$defaultType>")#*
+            *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredCollection${composable}")#*
           *##{else}#*
-            *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredInvoker<$defaultType>")#*
+            *##set($returnType = "org.apache.olingo.ext.proxy.api.Structured${composable}")#*
           *##end#*
         *##{else}#*
           *##if($action.getReturnType().isCollection())#*

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/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 bbab76f..855c475 100644
--- a/ext/pojogen-maven-plugin/src/main/resources/entityCollection.vm
+++ b/ext/pojogen-maven-plugin/src/main/resources/entityCollection.vm
@@ -52,10 +52,8 @@ public interface $utility.capitalize($entityType.Name)Collection extends
     org.apache.olingo.ext.proxy.api.EntityCollection<$javaEntityType, ${javaEntityType}Collection, ${javaEntityType}Collection> {
 #set( $functions = $utility.getFunctionsBoundTo($entityType.Name, true) )
 #set( $actions = $utility.getActionsBoundTo($entityType.Name, true) )
-#if( $functions.size() > 0 || $actions.size() > 0 )
 #set($structuredType = $entityType)
 #parse( "operation.vm" )
-#end
 
   Object getAnnotation(Class<? extends AbstractTerm> term);
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/ext/pojogen-maven-plugin/src/main/resources/entitySet.vm
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/resources/entitySet.vm b/ext/pojogen-maven-plugin/src/main/resources/entitySet.vm
index ba1d353..9c3627a 100644
--- a/ext/pojogen-maven-plugin/src/main/resources/entitySet.vm
+++ b/ext/pojogen-maven-plugin/src/main/resources/entitySet.vm
@@ -63,8 +63,6 @@ public interface $utility.capitalize($entitySet.Name)
 
 #set( $functions = $utility.getFunctionsBoundTo("${container.Namespace}.${entitySet.Name}", false) )
 #set( $actions = $utility.getActionsBoundTo("${container.Namespace}.${entitySet.Name}", false) )
-#if( $functions.size() > 0 || $actions.size() > 0 )
 #set($structuredType = $entitySet.EntityType)
 #parse( "operation.vm" )
-#end
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/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 b87709b..a18f5ac 100644
--- a/ext/pojogen-maven-plugin/src/main/resources/entityType.vm
+++ b/ext/pojogen-maven-plugin/src/main/resources/entityType.vm
@@ -137,11 +137,9 @@ public interface $utility.capitalize($entityType.Name)
 
 #set( $functions = $utility.getFunctionsBoundTo($entityType.Name, false) )
 #set( $actions = $utility.getActionsBoundTo($entityType.Name, false) )
-#set( $inherited = $utility.justInheritedOperationsBoundTo($entityType) )
-#if( $inherited.size() > 0 || $functions.size() > 0 || $actions.size() > 0 )
+#set( $override = $entityType.getBaseType() )
 #set($structuredType = $entityType)
 #parse( "operation.vm" )
-#end
 
     Annotations annotations();
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/ext/pojogen-maven-plugin/src/main/resources/operation.vm
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/resources/operation.vm b/ext/pojogen-maven-plugin/src/main/resources/operation.vm
index 3576357..d8bdae8 100644
--- a/ext/pojogen-maven-plugin/src/main/resources/operation.vm
+++ b/ext/pojogen-maven-plugin/src/main/resources/operation.vm
@@ -16,24 +16,28 @@
  * specific language governing permissions and limitations
  * under the License.
  *#
-    #if($inherited.size() > 0)
+    #if( $override )
     @Override
     #end
     Operations operations();
 
-    interface Operations #if($inherited.size() > 0)
-           extends ${utility.getJavaType($structuredType.getBaseType())}.Operations#end{
+    interface Operations extends #if( $override )${utility.getJavaType($structuredType.getBaseType())}.Operations#{else}org.apache.olingo.ext.proxy.api.Operations#end{
     #foreach($operation in $functions)
       #if($operation.ReturnType)#*
         *##set($defaultType = $utility.getJavaType($operation.ReturnType.Type, $operation.ReturnType.Collection))#*
+        *##if($operationComposable)#*
+          *##set($composable = "ComposableInvoker<$defaultType, ${defaultType}.Operations>")#*
+        *##{else}#*
+          *##set($composable = "Invoker<$defaultType>")#*
+        *##end#*
         *##if(!($operation.getReturnType().isCollection() || ${operation.ReturnType.Type.Kind} == "ENTITY" || ${operation.ReturnType.Type.Kind} == "COMPLEX" || $utility.isStreamType($operation.ReturnType.Type)))#*
           *##set($returnType = "org.apache.olingo.ext.proxy.api.Invoker<$defaultType>")#*
         *##else#*
           *##if(${operation.ReturnType.Type.Kind} == "ENTITY" || ${operation.ReturnType.Type.Kind} == "COMPLEX")#*
             *##if($operation.getReturnType().isCollection())#*
-              *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredCollectionInvoker<$defaultType>")#*
+              *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredCollection${composable}")#*
             *##{else}#*
-              *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredInvoker<$defaultType>")#*
+              *##set($returnType = "org.apache.olingo.ext.proxy.api.Structured${composable}")#*
             *##end#*
           *##{else}#*
             *##if($operation.getReturnType().isCollection())#*
@@ -70,14 +74,19 @@
     #foreach($operation in $actions)
       #if($operation.ReturnType)#*
         *##set($defaultType = $utility.getJavaType($operation.ReturnType.Type, $operation.ReturnType.Collection))#*
+        *##if($operation.Composable)#*
+          *##set($composable = "ComposableInvoker<$defaultType, ${defaultType}.Operations>")#*
+        *##{else}#*
+          *##set($composable = "Invoker<$defaultType>")#*
+        *##end#*
         *##if(!($operation.getReturnType().isCollection() || ${operation.ReturnType.Type.Kind} == "ENTITY" || ${operation.ReturnType.Type.Kind} == "COMPLEX" || $utility.isStreamType($operation.ReturnType.Type)))#*
           *##set($returnType = "org.apache.olingo.ext.proxy.api.Invoker<$defaultType>")#*
         *##else#*
           *##if(${operation.ReturnType.Type.Kind} == "ENTITY" || ${operation.ReturnType.Type.Kind} == "COMPLEX")#*
             *##if($operation.getReturnType().isCollection())#*
-              *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredCollectionInvoker<$defaultType>")#*
+              *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredCollection${composable}")#*
             *##{else}#*
-              *##set($returnType = "org.apache.olingo.ext.proxy.api.StructuredInvoker<$defaultType>")#*
+              *##set($returnType = "org.apache.olingo.ext.proxy.api.Structured${composable}")#*
             *##end#*
           *##{else}#*
             *##if($operation.getReturnType().isCollection())#*

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/main/java/org/apache/olingo/fit/V4Services.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/V4Services.java b/fit/src/main/java/org/apache/olingo/fit/V4Services.java
index 8278e53..347705d 100644
--- a/fit/src/main/java/org/apache/olingo/fit/V4Services.java
+++ b/fit/src/main/java/org/apache/olingo/fit/V4Services.java
@@ -112,6 +112,19 @@ public class V4Services extends AbstractServices {
     super(ODataServiceVersion.V40, metadata);
   }
 
+  @POST
+  @Path("/GetAllProducts()/Discount")
+  public Response discount() {
+    try {
+      final String basePath = "Products" + File.separatorChar + "feed";
+
+      final InputStream feed = FSManager.instance(version).readFile(basePath, Accept.JSON_FULLMETA);
+      return xml.createResponse(null, feed, Commons.getETag(basePath, version), Accept.JSON_FULLMETA);
+    } catch (Exception e) {
+      return xml.createFaultResponse(Accept.JSON_FULLMETA.toString(version), e);
+    }
+  }
+
   @GET
   @Path("/redirect/{name}({id})")
   public Response conformanceRedirect(

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoCollectionTypesSet.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoCollectionTypesSet.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoCollectionTypesSet.java
index 046b4b9..768476f 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoCollectionTypesSet.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoCollectionTypesSet.java
@@ -31,4 +31,9 @@ public interface AllGeoCollectionTypesSet
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<AllGeoCollectionTypesSet>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.AllSpatialCollectionTypes, java.lang.Integer, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.AllSpatialCollectionTypesCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoTypesSet.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoTypesSet.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoTypesSet.java
index 67fbe0d..0e3339c 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoTypesSet.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/AllGeoTypesSet.java
@@ -31,4 +31,9 @@ public interface AllGeoTypesSet
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<AllGeoTypesSet>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.AllSpatialTypes, java.lang.Integer, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.AllSpatialTypesCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Car.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Car.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Car.java
index 86efac2..cd9defa 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Car.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Car.java
@@ -31,4 +31,9 @@ public interface Car
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<Car>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.Car, java.lang.Integer, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.CarCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Computer.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Computer.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Computer.java
index be9f30c..1334cf6 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Computer.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Computer.java
@@ -31,4 +31,9 @@ public interface Computer
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<Computer>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.Computer, java.lang.Integer, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.ComputerCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/ComputerDetail.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/ComputerDetail.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/ComputerDetail.java
index 0d64a8d..615ea48 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/ComputerDetail.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/ComputerDetail.java
@@ -31,4 +31,9 @@ public interface ComputerDetail
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<ComputerDetail>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.ComputerDetail, java.lang.Integer, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.ComputerDetailCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Customer.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Customer.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Customer.java
index e368d6f..550b939 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Customer.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Customer.java
@@ -31,4 +31,9 @@ public interface Customer
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<Customer>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.Customer, java.lang.Integer, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.CustomerCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/CustomerInfo.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/CustomerInfo.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/CustomerInfo.java
index 536081c..38a55ea 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/CustomerInfo.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/CustomerInfo.java
@@ -31,4 +31,9 @@ public interface CustomerInfo
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<CustomerInfo>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.CustomerInfo, java.lang.Integer, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.CustomerInfoCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/DefaultContainer.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/DefaultContainer.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/DefaultContainer.java
index 760df90..2d8863f 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/DefaultContainer.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/DefaultContainer.java
@@ -92,7 +92,7 @@ public interface DefaultContainer extends PersistenceManager {
 
   Operations operations();
 
-  public interface Operations {
+  public interface Operations extends org.apache.olingo.ext.proxy.api.Operations {
   
         
     @org.apache.olingo.ext.proxy.api.annotations.Operation(name = "UpdatePersonInfo",

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Driver.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Driver.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Driver.java
index 79f1a67..0873d1f 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Driver.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Driver.java
@@ -31,4 +31,9 @@ public interface Driver
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<Driver>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.Driver, java.lang.String, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.DriverCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/LastLogin.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/LastLogin.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/LastLogin.java
index 91159ae..e508c8f 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/LastLogin.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/LastLogin.java
@@ -31,4 +31,9 @@ public interface LastLogin
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<LastLogin>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.LastLogin, java.lang.String, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.LastLoginCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/License.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/License.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/License.java
index 44b5af2..21bf8e0 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/License.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/License.java
@@ -31,4 +31,9 @@ public interface License
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<License>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.License, java.lang.String, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.LicenseCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Login.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Login.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Login.java
index fba53de..388678c 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Login.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Login.java
@@ -31,4 +31,9 @@ public interface Login
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<Login>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.Login, java.lang.String, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.LoginCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/MappedEntityType.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/MappedEntityType.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/MappedEntityType.java
index a9d30ab..ccef277 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/MappedEntityType.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/MappedEntityType.java
@@ -31,4 +31,9 @@ public interface MappedEntityType
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<MappedEntityType>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.MappedEntityType, java.lang.Integer, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.MappedEntityTypeCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Message.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Message.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Message.java
index 2825214..b31ecac 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Message.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Message.java
@@ -33,4 +33,9 @@ public interface Message
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<Message>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.Message, MessageKey, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.MessageCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/MessageAttachment.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/MessageAttachment.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/MessageAttachment.java
index 2aaed64..e5ee8b7 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/MessageAttachment.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/MessageAttachment.java
@@ -31,4 +31,9 @@ public interface MessageAttachment
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<MessageAttachment>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.MessageAttachment, java.util.UUID, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.MessageAttachmentCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Order.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Order.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Order.java
index de925ae..68f130e 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Order.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Order.java
@@ -31,4 +31,9 @@ public interface Order
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<Order>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.Order, java.lang.Integer, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.OrderCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/OrderLine.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/OrderLine.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/OrderLine.java
index ba78316..062dfb0 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/OrderLine.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/OrderLine.java
@@ -33,4 +33,9 @@ public interface OrderLine
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<OrderLine>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.OrderLine, OrderLineKey, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.OrderLineCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/PageView.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/PageView.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/PageView.java
index 2b9e42e..415dc0d 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/PageView.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/PageView.java
@@ -31,4 +31,9 @@ public interface PageView
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<PageView>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.PageView, java.lang.Integer, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.PageViewCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Person.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Person.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Person.java
index 6cf0e02..fca1edd 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Person.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Person.java
@@ -31,4 +31,9 @@ public interface Person
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<Person>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.Person, java.lang.Integer, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.PersonCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/PersonMetadata.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/PersonMetadata.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/PersonMetadata.java
index ff9f8ec..e8e2d56 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/PersonMetadata.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/PersonMetadata.java
@@ -31,4 +31,9 @@ public interface PersonMetadata
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<PersonMetadata>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.PersonMetadata, java.lang.Integer, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.PersonMetadataCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Product.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Product.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Product.java
index 1b50dea..27bc7c2 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Product.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/Product.java
@@ -31,4 +31,9 @@ public interface Product
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<Product>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.Product, java.lang.Integer, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.ProductCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86d33380/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/ProductDetail.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/ProductDetail.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/ProductDetail.java
index 45594bc..c25e810 100644
--- a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/ProductDetail.java
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/actionoverloading/microsoft/test/odata/services/astoriadefaultservice/ProductDetail.java
@@ -31,4 +31,9 @@ public interface ProductDetail
   org.apache.olingo.ext.proxy.api.StructuredCollectionQuery<ProductDetail>,
   AbstractEntitySet<org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.ProductDetail, java.lang.Integer, org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.ProductDetailCollection> {
 
-}
+
+        Operations operations();
+
+    interface Operations extends org.apache.olingo.ext.proxy.api.Operations{
+    
+        }}