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

[1/4] [OLINGO-280] pojogen off-line generation implemented

Repository: olingo-odata4
Updated Branches:
  refs/heads/master 330c55699 -> 322a3efd8


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/ext/pojogen-maven-plugin/src/it/v4Sample/src/test/resources/metadata.xml
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/it/v4Sample/src/test/resources/metadata.xml b/ext/pojogen-maven-plugin/src/it/v4Sample/src/test/resources/metadata.xml
new file mode 100644
index 0000000..4bb360c
--- /dev/null
+++ b/ext/pojogen-maven-plugin/src/it/v4Sample/src/test/resources/metadata.xml
@@ -0,0 +1,462 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
+  <edmx:DataServices>
+    <Schema Namespace="Microsoft.Test.OData.Services.ODataWCFService" xmlns="http://docs.oasis-open.org/odata/ns/edm">
+      <Term Name="IsBoss" Type="Edm.Boolean"/>
+      <ComplexType Name="Address">
+        <Property Name="Street" Type="Edm.String" Nullable="false"/>
+        <Property Name="City" Type="Edm.String" Nullable="false"/>
+        <Property Name="PostalCode" Type="Edm.String" Nullable="false"/>
+      </ComplexType>
+      <ComplexType Name="HomeAddress" BaseType="Microsoft.Test.OData.Services.ODataWCFService.Address">
+        <Property Name="FamilyName" Type="Edm.String"/>
+      </ComplexType>
+      <ComplexType Name="CompanyAddress" BaseType="Microsoft.Test.OData.Services.ODataWCFService.Address">
+        <Property Name="CompanyName" Type="Edm.String" Nullable="false"/>
+      </ComplexType>
+      <EnumType Name="AccessLevel" IsFlags="true">
+        <Member Name="None" Value="0"/>
+        <Member Name="Read" Value="1"/>
+        <Member Name="Write" Value="2"/>
+        <Member Name="Execute" Value="4"/>
+        <Member Name="ReadWrite" Value="3"/>
+      </EnumType>
+      <EnumType Name="Color">
+        <Member Name="Red" Value="1"/>
+        <Member Name="Green" Value="2"/>
+        <Member Name="Blue" Value="4"/>
+      </EnumType>
+      <EnumType Name="CompanyCategory">
+        <Member Name="IT" Value="0"/>
+        <Member Name="Communication" Value="1"/>
+        <Member Name="Electronics" Value="2"/>
+        <Member Name="Others" Value="4"/>
+      </EnumType>
+      <EntityType Name="Person">
+        <Key>
+          <PropertyRef Name="PersonID"/>
+        </Key>
+        <Property Name="PersonID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="FirstName" Type="Edm.String" Nullable="false"/>
+        <Property Name="LastName" Type="Edm.String" Nullable="false"/>
+        <Property Name="MiddleName" Type="Edm.String"/>
+        <Property Name="HomeAddress" Type="Microsoft.Test.OData.Services.ODataWCFService.Address"/>
+        <Property Name="Home" Type="Edm.GeographyPoint" SRID="4326"/>
+        <Property Name="Numbers" Type="Collection(Edm.String)" Nullable="false"/>
+        <Property Name="Emails" Type="Collection(Edm.String)"/>
+        <NavigationProperty Name="Parent" Type="Microsoft.Test.OData.Services.ODataWCFService.Person" Nullable="false"/>
+      </EntityType>
+      <EntityType Name="Customer" BaseType="Microsoft.Test.OData.Services.ODataWCFService.Person">
+        <Property Name="City" Type="Edm.String" Nullable="false"/>
+        <Property Name="Birthday" Type="Edm.DateTimeOffset" Nullable="false"/>
+        <Property Name="TimeBetweenLastTwoOrders" Type="Edm.Duration" Nullable="false"/>
+        <NavigationProperty Name="Orders" Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.Order)"/>
+        <NavigationProperty Name="Company" Type="Microsoft.Test.OData.Services.ODataWCFService.Company" Nullable="false" Partner="VipCustomer"/>
+      </EntityType>
+      <EntityType Name="Employee" BaseType="Microsoft.Test.OData.Services.ODataWCFService.Person">
+        <Property Name="DateHired" Type="Edm.DateTimeOffset" Nullable="false"/>
+        <Property Name="Office" Type="Edm.GeographyPoint" SRID="4326"/>
+        <NavigationProperty Name="Company" Type="Microsoft.Test.OData.Services.ODataWCFService.Company" Nullable="false" Partner="Employees"/>
+      </EntityType>
+      <EntityType Name="Product">
+        <Key>
+          <PropertyRef Name="ProductID"/>
+        </Key>
+        <Property Name="ProductID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="Name" Type="Edm.String" Nullable="false"/>
+        <Property Name="QuantityPerUnit" Type="Edm.String" Nullable="false"/>
+        <Property Name="UnitPrice" Type="Edm.Single" Nullable="false"/>
+        <Property Name="QuantityInStock" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="Discontinued" Type="Edm.Boolean" Nullable="false"/>
+        <Property Name="UserAccess" Type="Microsoft.Test.OData.Services.ODataWCFService.AccessLevel"/>
+        <Property Name="SkinColor" Type="Microsoft.Test.OData.Services.ODataWCFService.Color"/>
+        <Property Name="CoverColors" Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.Color)" Nullable="false"/>
+        <NavigationProperty Name="Details" Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.ProductDetail)">
+          <ReferentialConstraint Property="ProductID" ReferencedProperty="ProductID"/>
+        </NavigationProperty>
+      </EntityType>
+      <EntityType Name="ProductDetail">
+        <Key>
+          <PropertyRef Name="ProductID"/>
+          <PropertyRef Name="ProductDetailID"/>
+        </Key>
+        <Property Name="ProductID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="ProductDetailID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="ProductName" Type="Edm.String" Nullable="false"/>
+        <Property Name="Description" Type="Edm.String" Nullable="false"/>
+        <NavigationProperty Name="RelatedProduct" Type="Microsoft.Test.OData.Services.ODataWCFService.Product"/>
+        <NavigationProperty Name="Reviews" Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.ProductReview)">
+          <ReferentialConstraint Property="ProductID" ReferencedProperty="ProductID"/>
+          <ReferentialConstraint Property="ProductDetailID" ReferencedProperty="ProductDetailID"/>
+        </NavigationProperty>
+      </EntityType>
+      <EntityType Name="ProductReview">
+        <Key>
+          <PropertyRef Name="ProductID"/>
+          <PropertyRef Name="ProductDetailID"/>
+          <PropertyRef Name="ReviewTitle"/>
+          <PropertyRef Name="RevisionID"/>
+        </Key>
+        <Property Name="ProductID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="ProductDetailID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="ReviewTitle" Type="Edm.String" Nullable="false"/>
+        <Property Name="RevisionID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="Comment" Type="Edm.String" Nullable="false"/>
+        <Property Name="Author" Type="Edm.String" Nullable="false"/>
+      </EntityType>
+      <EntityType Name="Order">
+        <Key>
+          <PropertyRef Name="OrderID"/>
+        </Key>
+        <Property Name="OrderID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="OrderDate" Type="Edm.DateTimeOffset" Nullable="false"/>
+        <Property Name="ShelfLife" Type="Edm.Duration"/>
+        <Property Name="OrderShelfLifes" Type="Collection(Edm.Duration)"/>
+        <NavigationProperty Name="LoggedInEmployee" Type="Microsoft.Test.OData.Services.ODataWCFService.Employee" Nullable="false"/>
+        <NavigationProperty Name="CustomerForOrder" Type="Microsoft.Test.OData.Services.ODataWCFService.Customer" Nullable="false"/>
+        <NavigationProperty Name="OrderDetails" Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.OrderDetail)"/>
+      </EntityType>
+      <EntityType Name="OrderDetail">
+        <Key>
+          <PropertyRef Name="OrderID"/>
+          <PropertyRef Name="ProductID"/>
+        </Key>
+        <Property Name="OrderID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="ProductID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="OrderPlaced" Type="Edm.DateTimeOffset" Nullable="false"/>
+        <Property Name="Quantity" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="UnitPrice" Type="Edm.Single" Nullable="false"/>
+        <NavigationProperty Name="ProductOrdered" Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.Product)"/>
+        <NavigationProperty Name="AssociatedOrder" Type="Microsoft.Test.OData.Services.ODataWCFService.Order" Nullable="false"/>
+      </EntityType>
+      <EntityType Name="Department">
+        <Key>
+          <PropertyRef Name="DepartmentID"/>
+        </Key>
+        <Property Name="DepartmentID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="Name" Type="Edm.String" Nullable="false"/>
+        <Property Name="DepartmentNO" Type="Edm.String"/>
+        <NavigationProperty Name="Company" Type="Microsoft.Test.OData.Services.ODataWCFService.Company" Nullable="false" Partner="Departments"/>
+      </EntityType>
+      <EntityType Name="Company" OpenType="true">
+        <Key>
+          <PropertyRef Name="CompanyID"/>
+        </Key>
+        <Property Name="CompanyID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="CompanyCategory" Type="Microsoft.Test.OData.Services.ODataWCFService.CompanyCategory"/>
+        <Property Name="Revenue" Type="Edm.Int64" Nullable="false"/>
+        <Property Name="Name" Type="Edm.String"/>
+        <Property Name="Address" Type="Microsoft.Test.OData.Services.ODataWCFService.Address"/>
+        <NavigationProperty Name="Employees" Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.Employee)" Partner="Company"/>
+        <NavigationProperty Name="VipCustomer" Type="Microsoft.Test.OData.Services.ODataWCFService.Customer" Nullable="false" Partner="Company"/>
+        <NavigationProperty Name="Departments" Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.Department)" Partner="Company"/>
+        <NavigationProperty Name="CoreDepartment" Type="Microsoft.Test.OData.Services.ODataWCFService.Department" Nullable="false"/>
+      </EntityType>
+      <EntityType Name="PublicCompany" BaseType="Microsoft.Test.OData.Services.ODataWCFService.Company" OpenType="true">
+        <Property Name="StockExchange" Type="Edm.String"/>
+        <NavigationProperty Name="Assets" Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.Asset)" ContainsTarget="true"/>
+        <NavigationProperty Name="Club" Type="Microsoft.Test.OData.Services.ODataWCFService.Club" Nullable="false" ContainsTarget="true"/>
+        <NavigationProperty Name="LabourUnion" Type="Microsoft.Test.OData.Services.ODataWCFService.LabourUnion" Nullable="false"/>
+      </EntityType>
+      <EntityType Name="Asset">
+        <Key>
+          <PropertyRef Name="AssetID"/>
+        </Key>
+        <Property Name="AssetID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="Name" Type="Edm.String"/>
+        <Property Name="Number" Type="Edm.Int32" Nullable="false"/>
+      </EntityType>
+      <EntityType Name="Club">
+        <Key>
+          <PropertyRef Name="ClubID"/>
+        </Key>
+        <Property Name="ClubID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="Name" Type="Edm.String"/>
+      </EntityType>
+      <EntityType Name="LabourUnion">
+        <Key>
+          <PropertyRef Name="LabourUnionID"/>
+        </Key>
+        <Property Name="LabourUnionID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="Name" Type="Edm.String"/>
+      </EntityType>
+      <Action Name="AddAccessRight" IsBound="true">
+        <Parameter Name="product" Type="Microsoft.Test.OData.Services.ODataWCFService.Product" Nullable="false"/>
+        <Parameter Name="accessRight" Type="Microsoft.Test.OData.Services.ODataWCFService.AccessLevel"/>
+        <ReturnType Type="Microsoft.Test.OData.Services.ODataWCFService.AccessLevel"/>
+      </Action>
+      <Action Name="IncreaseRevenue" IsBound="true">
+        <Parameter Name="p" Type="Microsoft.Test.OData.Services.ODataWCFService.Company" Nullable="false"/>
+        <Parameter Name="IncreaseValue" Type="Edm.Int64"/>
+        <ReturnType Type="Edm.Int64" Nullable="false"/>
+      </Action>
+      <Action Name="ResetAddress" IsBound="true" EntitySetPath="person">
+        <Parameter Name="person" Type="Microsoft.Test.OData.Services.ODataWCFService.Person" Nullable="false"/>
+        <Parameter Name="addresses" Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.Address)" Nullable="false"/>
+        <Parameter Name="index" Type="Edm.Int32" Nullable="false"/>
+        <ReturnType Type="Microsoft.Test.OData.Services.ODataWCFService.Person" Nullable="false"/>
+      </Action>
+      <Action Name="Discount" IsBound="true" EntitySetPath="products">
+        <Parameter Name="products" Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.Product)" Nullable="false"/>
+        <Parameter Name="percentage" Type="Edm.Int32" Nullable="false"/>
+        <ReturnType Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.Product)" Nullable="false"/>
+      </Action>
+      <Action Name="Discount">
+        <Parameter Name="percentage" Type="Edm.Int32" Nullable="false"/>
+      </Action>
+      <Action Name="ResetBossEmail">
+        <Parameter Name="emails" Type="Collection(Edm.String)" Nullable="false"/>
+        <ReturnType Type="Collection(Edm.String)" Nullable="false"/>
+      </Action>
+      <Action Name="ResetBossAddress">
+        <Parameter Name="address" Type="Microsoft.Test.OData.Services.ODataWCFService.Address" Nullable="false"/>
+        <ReturnType Type="Microsoft.Test.OData.Services.ODataWCFService.Address" Nullable="false"/>
+      </Action>
+      <Action Name="ResetDataSource"/>
+      <Function Name="GetEmployeesCount" IsBound="true">
+        <Parameter Name="p" Type="Microsoft.Test.OData.Services.ODataWCFService.Company" Nullable="false"/>
+        <ReturnType Type="Edm.Int32" Nullable="false"/>
+      </Function>
+      <Function Name="GetProductDetails" IsBound="true" EntitySetPath="product/Details" IsComposable="true">
+        <Parameter Name="product" Type="Microsoft.Test.OData.Services.ODataWCFService.Product" Nullable="false"/>
+        <Parameter Name="count" Type="Edm.Int32"/>
+        <ReturnType Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.ProductDetail)" Nullable="false"/>
+      </Function>
+      <Function Name="GetRelatedProduct" IsBound="true" EntitySetPath="productDetail/RelatedProduct" IsComposable="true">
+        <Parameter Name="productDetail" Type="Microsoft.Test.OData.Services.ODataWCFService.ProductDetail" Nullable="false"/>
+        <ReturnType Type="Microsoft.Test.OData.Services.ODataWCFService.Product" Nullable="false"/>
+      </Function>
+      <Function Name="GetDefaultColor" IsComposable="true">
+        <ReturnType Type="Microsoft.Test.OData.Services.ODataWCFService.Color"/>
+      </Function>
+      <Function Name="GetPerson" IsComposable="true">
+        <Parameter Name="address" Type="Microsoft.Test.OData.Services.ODataWCFService.Address" Nullable="false"/>
+        <ReturnType Type="Microsoft.Test.OData.Services.ODataWCFService.Person" Nullable="false"/>
+      </Function>
+      <Function Name="GetPerson2" IsComposable="true">
+        <Parameter Name="city" Type="Edm.String" Nullable="false"/>
+        <ReturnType Type="Microsoft.Test.OData.Services.ODataWCFService.Person" Nullable="false"/>
+      </Function>
+      <Function Name="GetAllProducts" IsComposable="true">
+        <ReturnType Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.Product)" Nullable="false"/>
+      </Function>
+      <Function Name="GetBossEmails">
+        <Parameter Name="start" Type="Edm.Int32" Nullable="false"/>
+        <Parameter Name="count" Type="Edm.Int32" Nullable="false"/>
+        <ReturnType Type="Collection(Edm.String)" Nullable="false"/>
+      </Function>
+      <Function Name="GetProductsByAccessLevel">
+        <Parameter Name="accessLevel" Type="Microsoft.Test.OData.Services.ODataWCFService.AccessLevel" Nullable="false"/>
+        <ReturnType Type="Collection(Edm.String)" Nullable="false"/>
+      </Function>
+      <Function Name="GetActualAmount" IsBound="true">
+        <Parameter Name="giftcard" Type="Microsoft.Test.OData.Services.ODataWCFService.GiftCard" Nullable="false"/>
+        <Parameter Name="bonusRate" Type="Edm.Double"/>
+        <ReturnType Type="Edm.Double" Nullable="false"/>
+      </Function>
+      <Function Name="GetDefaultPI" IsBound="true" EntitySetPath="account/MyPaymentInstruments">
+        <Parameter Name="account" Type="Microsoft.Test.OData.Services.ODataWCFService.Account" Nullable="false"/>
+        <ReturnType Type="Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument"/>
+      </Function>
+      <Action Name="RefreshDefaultPI" IsBound="true" EntitySetPath="account/MyPaymentInstruments">
+        <Parameter Name="account" Type="Microsoft.Test.OData.Services.ODataWCFService.Account" Nullable="false"/>
+        <Parameter Name="newDate" Type="Edm.DateTimeOffset"/>
+        <ReturnType Type="Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument"/>
+      </Action>
+      <Function Name="GetHomeAddress" IsBound="true" IsComposable="true">
+        <Parameter Name="person" Type="Microsoft.Test.OData.Services.ODataWCFService.Person" Nullable="false"/>
+        <ReturnType Type="Microsoft.Test.OData.Services.ODataWCFService.HomeAddress" Nullable="false"/>
+      </Function>
+      <Function Name="GetAccountInfo" IsBound="true" IsComposable="true">
+        <Parameter Name="account" Type="Microsoft.Test.OData.Services.ODataWCFService.Account" Nullable="false"/>
+        <ReturnType Type="Microsoft.Test.OData.Services.ODataWCFService.AccountInfo" Nullable="false"/>
+      </Function>
+      <ComplexType Name="AccountInfo" OpenType="true">
+        <Property Name="FirstName" Type="Edm.String" Nullable="false"/>
+        <Property Name="LastName" Type="Edm.String" Nullable="false"/>
+      </ComplexType>
+      <EntityType Name="Account">
+        <Key>
+          <PropertyRef Name="AccountID"/>
+        </Key>
+        <Property Name="AccountID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="Country" Type="Edm.String" Nullable="false"/>
+        <Property Name="AccountInfo" Type="Microsoft.Test.OData.Services.ODataWCFService.AccountInfo"/>
+        <NavigationProperty Name="MyGiftCard" Type="Microsoft.Test.OData.Services.ODataWCFService.GiftCard" ContainsTarget="true"/>
+        <NavigationProperty Name="MyPaymentInstruments" Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument)" ContainsTarget="true"/>
+        <NavigationProperty Name="ActiveSubscriptions" Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.Subscription)" ContainsTarget="true"/>
+        <NavigationProperty Name="AvailableSubscriptionTemplatess" Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.Subscription)"/>
+      </EntityType>
+      <EntityType Name="GiftCard">
+        <Key>
+          <PropertyRef Name="GiftCardID"/>
+        </Key>
+        <Property Name="GiftCardID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="GiftCardNO" Type="Edm.String" Nullable="false"/>
+        <Property Name="Amount" Type="Edm.Double" Nullable="false"/>
+        <Property Name="ExperationDate" Type="Edm.DateTimeOffset" Nullable="false"/>
+        <Property Name="OwnerName" Type="Edm.String"/>
+      </EntityType>
+      <EntityType Name="PaymentInstrument">
+        <Key>
+          <PropertyRef Name="PaymentInstrumentID"/>
+        </Key>
+        <Property Name="PaymentInstrumentID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="FriendlyName" Type="Edm.String" Nullable="false"/>
+        <Property Name="CreatedDate" Type="Edm.DateTimeOffset" Nullable="false"/>
+        <NavigationProperty Name="TheStoredPI" Type="Microsoft.Test.OData.Services.ODataWCFService.StoredPI" Nullable="false"/>
+        <NavigationProperty Name="BillingStatements" Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.Statement)" ContainsTarget="true"/>
+        <NavigationProperty Name="BackupStoredPI" Type="Microsoft.Test.OData.Services.ODataWCFService.StoredPI" Nullable="false"/>
+      </EntityType>
+      <EntityType Name="CreditCardPI" BaseType="Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument">
+        <Property Name="CardNumber" Type="Edm.String" Nullable="false"/>
+        <Property Name="CVV" Type="Edm.String" Nullable="false"/>
+        <Property Name="HolderName" Type="Edm.String" Nullable="false"/>
+        <Property Name="Balance" Type="Edm.Double" Nullable="false"/>
+        <Property Name="ExperationDate" Type="Edm.DateTimeOffset" Nullable="false"/>
+        <NavigationProperty Name="CreditRecords" Type="Collection(Microsoft.Test.OData.Services.ODataWCFService.CreditRecord)" ContainsTarget="true"/>
+      </EntityType>
+      <EntityType Name="StoredPI">
+        <Key>
+          <PropertyRef Name="StoredPIID"/>
+        </Key>
+        <Property Name="StoredPIID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="PIName" Type="Edm.String" Nullable="false"/>
+        <Property Name="PIType" Type="Edm.String" Nullable="false"/>
+        <Property Name="CreatedDate" Type="Edm.DateTimeOffset" Nullable="false"/>
+      </EntityType>
+      <EntityType Name="Statement">
+        <Key>
+          <PropertyRef Name="StatementID"/>
+        </Key>
+        <Property Name="StatementID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="TransactionType" Type="Edm.String" Nullable="false"/>
+        <Property Name="TransactionDescription" Type="Edm.String" Nullable="false"/>
+        <Property Name="Amount" Type="Edm.Double" Nullable="false"/>
+      </EntityType>
+      <EntityType Name="CreditRecord">
+        <Key>
+          <PropertyRef Name="CreditRecordID"/>
+        </Key>
+        <Property Name="CreditRecordID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="IsGood" Type="Edm.Boolean" Nullable="false"/>
+        <Property Name="Reason" Type="Edm.String" Nullable="false"/>
+        <Property Name="CreatedDate" Type="Edm.DateTimeOffset" Nullable="false"/>
+      </EntityType>
+      <EntityType Name="Subscription">
+        <Key>
+          <PropertyRef Name="SubscriptionID"/>
+        </Key>
+        <Property Name="SubscriptionID" Type="Edm.Int32" Nullable="false"/>
+        <Property Name="TemplateGuid" Type="Edm.String" Nullable="false"/>
+        <Property Name="Title" Type="Edm.String" Nullable="false"/>
+        <Property Name="Category" Type="Edm.String" Nullable="false"/>
+        <Property Name="CreatedDate" Type="Edm.DateTimeOffset" Nullable="false"/>
+      </EntityType>
+      <EntityContainer Name="InMemoryEntities">
+        <EntitySet Name="People" EntityType="Microsoft.Test.OData.Services.ODataWCFService.Person">
+          <NavigationPropertyBinding Path="Parent" Target="People"/>
+        </EntitySet>
+        <Singleton Name="Boss" Type="Microsoft.Test.OData.Services.ODataWCFService.Person">
+          <NavigationPropertyBinding Path="Parent" Target="People"/>
+        </Singleton>
+        <EntitySet Name="Customers" EntityType="Microsoft.Test.OData.Services.ODataWCFService.Customer">
+          <NavigationPropertyBinding Path="Orders" Target="Orders"/>
+          <NavigationPropertyBinding Path="Parent" Target="People"/>
+        </EntitySet>
+        <Singleton Name="VipCustomer" Type="Microsoft.Test.OData.Services.ODataWCFService.Customer">
+          <NavigationPropertyBinding Path="Orders" Target="Orders"/>
+          <NavigationPropertyBinding Path="Parent" Target="People"/>
+          <NavigationPropertyBinding Path="Company" Target="Company"/>
+        </Singleton>
+        <EntitySet Name="Employees" EntityType="Microsoft.Test.OData.Services.ODataWCFService.Employee">
+          <NavigationPropertyBinding Path="Parent" Target="People"/>
+          <NavigationPropertyBinding Path="Company" Target="Company"/>
+        </EntitySet>
+        <EntitySet Name="Products" EntityType="Microsoft.Test.OData.Services.ODataWCFService.Product">
+          <NavigationPropertyBinding Path="Details" Target="ProductDetails"/>
+        </EntitySet>
+        <EntitySet Name="ProductDetails" EntityType="Microsoft.Test.OData.Services.ODataWCFService.ProductDetail">
+          <NavigationPropertyBinding Path="RelatedProduct" Target="Products"/>
+          <NavigationPropertyBinding Path="Reviews" Target="ProductReviews"/>
+        </EntitySet>
+        <EntitySet Name="ProductReviews" EntityType="Microsoft.Test.OData.Services.ODataWCFService.ProductReview"/>
+        <EntitySet Name="Orders" EntityType="Microsoft.Test.OData.Services.ODataWCFService.Order">
+          <NavigationPropertyBinding Path="LoggedInEmployee" Target="Employees"/>
+          <NavigationPropertyBinding Path="CustomerForOrder" Target="Customers"/>
+          <NavigationPropertyBinding Path="OrderDetails" Target="OrderDetails"/>
+          <Annotation Term="Core.ChangeTracking">
+            <Record>
+              <PropertyValue Property="Supported" Bool="true"/>
+              <PropertyValue Property="FilterableProperties">
+                <Collection>
+                  <PropertyPath>OrderID</PropertyPath>
+                </Collection>
+              </PropertyValue>
+              <PropertyValue Property="ExpandableProperties">
+                <Collection>
+                  <PropertyPath>OrderDetails</PropertyPath>
+                </Collection>
+              </PropertyValue>
+            </Record>
+          </Annotation>
+        </EntitySet>
+        <EntitySet Name="OrderDetails" EntityType="Microsoft.Test.OData.Services.ODataWCFService.OrderDetail">
+          <NavigationPropertyBinding Path="AssociatedOrder" Target="Orders"/>
+          <NavigationPropertyBinding Path="ProductOrdered" Target="Products"/>
+        </EntitySet>
+        <EntitySet Name="Departments" EntityType="Microsoft.Test.OData.Services.ODataWCFService.Department">
+          <NavigationPropertyBinding Path="Company" Target="Company"/>
+        </EntitySet>
+        <Singleton Name="Company" Type="Microsoft.Test.OData.Services.ODataWCFService.Company">
+          <NavigationPropertyBinding Path="Employees" Target="Employees"/>
+          <NavigationPropertyBinding Path="VipCustomer" Target="VipCustomer"/>
+          <NavigationPropertyBinding Path="Departments" Target="Departments"/>
+          <NavigationPropertyBinding Path="CoreDepartment" Target="Departments"/>
+        </Singleton>
+        <Singleton Name="PublicCompany" Type="Microsoft.Test.OData.Services.ODataWCFService.Company">
+          <NavigationPropertyBinding Path="Microsoft.Test.OData.Services.ODataWCFService.PublicCompany/LabourUnion" Target="LabourUnion"/>
+        </Singleton>
+        <Singleton Name="LabourUnion" Type="Microsoft.Test.OData.Services.ODataWCFService.LabourUnion"/>
+        <ActionImport Name="Discount" Action="Microsoft.Test.OData.Services.ODataWCFService.Discount"/>
+        <ActionImport Name="ResetBossEmail" Action="Microsoft.Test.OData.Services.ODataWCFService.ResetBossEmail"/>
+        <ActionImport Name="ResetBossAddress" Action="Microsoft.Test.OData.Services.ODataWCFService.ResetBossAddress"/>
+        <ActionImport Name="ResetDataSource" Action="Microsoft.Test.OData.Services.ODataWCFService.ResetDataSource"/>
+        <FunctionImport Name="GetDefaultColor" Function="Microsoft.Test.OData.Services.ODataWCFService.GetDefaultColor" IncludeInServiceDocument="true"/>
+        <FunctionImport Name="GetPerson" Function="Microsoft.Test.OData.Services.ODataWCFService.GetPerson" EntitySet="People" IncludeInServiceDocument="true"/>
+        <FunctionImport Name="GetPerson2" Function="Microsoft.Test.OData.Services.ODataWCFService.GetPerson2" EntitySet="People" IncludeInServiceDocument="true"/>
+        <FunctionImport Name="GetAllProducts" Function="Microsoft.Test.OData.Services.ODataWCFService.GetAllProducts" EntitySet="Products" IncludeInServiceDocument="true"/>
+        <FunctionImport Name="GetBossEmails" Function="Microsoft.Test.OData.Services.ODataWCFService.GetBossEmails" IncludeInServiceDocument="true"/>
+        <FunctionImport Name="GetProductsByAccessLevel" Function="Microsoft.Test.OData.Services.ODataWCFService.GetProductsByAccessLevel" IncludeInServiceDocument="true"/>
+        <EntitySet Name="Accounts" EntityType="Microsoft.Test.OData.Services.ODataWCFService.Account">
+          <NavigationPropertyBinding Path="Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument/TheStoredPI" Target="StoredPIs"/>
+          <NavigationPropertyBinding Path="AvailableSubscriptionTemplatess" Target="SubscriptionTemplates"/>
+          <NavigationPropertyBinding Path="Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument/BackupStoredPI" Target="DefaultStoredPI"/>
+        </EntitySet>
+        <EntitySet Name="StoredPIs" EntityType="Microsoft.Test.OData.Services.ODataWCFService.StoredPI"/>
+        <EntitySet Name="SubscriptionTemplates" EntityType="Microsoft.Test.OData.Services.ODataWCFService.Subscription"/>
+        <Singleton Name="DefaultStoredPI" Type="Microsoft.Test.OData.Services.ODataWCFService.StoredPI"/>
+      </EntityContainer>
+    </Schema>
+  </edmx:DataServices>
+</edmx:Edmx>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/ext/pojogen-maven-plugin/src/it/v4Sample/verify.groovy
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/it/v4Sample/verify.groovy b/ext/pojogen-maven-plugin/src/it/v4Sample/verify.groovy
new file mode 100644
index 0000000..02f0407
--- /dev/null
+++ b/ext/pojogen-maven-plugin/src/it/v4Sample/verify.groovy
@@ -0,0 +1,20 @@
+/**
+ * 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.
+ */
+File basepkg = new File( basedir, "target/generated-sources/ojc-plugin/org/apache/olingo/fit/proxy/v4" );
+assert basepkg.isDirectory() && basepkg.listFiles().length>0;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractMetadataMojo.java
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractMetadataMojo.java b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractMetadataMojo.java
deleted file mode 100644
index 065e172..0000000
--- a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractMetadataMojo.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.olingo.ext.pojogen;
-
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugins.annotations.Parameter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.velocity.Template;
-import org.apache.velocity.VelocityContext;
-import org.apache.velocity.app.Velocity;
-
-public abstract class AbstractMetadataMojo extends AbstractMojo {
-
-    /**
-     * Generated files base root.
-     */
-    @Parameter(property = "outputDirectory", required = true)
-    protected String outputDirectory;
-
-    /**
-     * OData service root URL.
-     */
-    @Parameter(property = "serviceRootURL", required = true)
-    protected String serviceRootURL;
-
-    /**
-     * Base package.
-     */
-    @Parameter(property = "basePackage", required = true)
-    protected String basePackage;
-
-    protected final Set<String> namespaces = new HashSet<String>();
-
-    protected static String TOOL_DIR = "ojc-plugin";
-
-    protected AbstractUtility utility;
-
-    protected abstract AbstractUtility getUtility();
-
-    protected abstract String getVersion();
-
-    protected File mkdir(final String path) {
-        final File dir = new File(outputDirectory + File.separator + TOOL_DIR + File.separator + path);
-
-        if (dir.exists()) {
-            if (!dir.isDirectory()) {
-                throw new IllegalArgumentException("Invalid path '" + path + "': it is not a directory");
-            }
-        } else {
-            dir.mkdirs();
-        }
-
-        return dir;
-    }
-
-    protected File mkPkgDir(final String path) {
-        return mkdir(basePackage.replace('.', File.separatorChar) + File.separator + path);
-    }
-
-    protected void writeFile(final String name, final File path, final VelocityContext ctx, final Template template,
-            final boolean append) throws MojoExecutionException {
-
-        if (!path.exists()) {
-            throw new IllegalArgumentException("Invalid base path '" + path.getAbsolutePath() + "'");
-        }
-
-        FileWriter writer = null;
-        try {
-            final File toBeWritten = new File(path, name);
-            if (!append && toBeWritten.exists()) {
-                throw new IllegalStateException("File '" + toBeWritten.getAbsolutePath() + "' already exists");
-            }
-            writer = new FileWriter(toBeWritten, append);
-            template.merge(ctx, writer);
-        } catch (IOException e) {
-            throw new MojoExecutionException("Error creating file '" + name + "'", e);
-        } finally {
-            IOUtils.closeQuietly(writer);
-        }
-    }
-
-    protected VelocityContext newContext() {
-        final VelocityContext ctx = new VelocityContext();
-
-        ctx.put("utility", getUtility());
-        ctx.put("basePackage", basePackage);
-        ctx.put("schemaName", getUtility().getSchemaName());
-        ctx.put("namespace", getUtility().getNamespace());
-        ctx.put("namespaces", namespaces);
-        ctx.put("odataVersion", getVersion());
-
-        return ctx;
-    }
-
-    protected void parseObj(final File base, final String pkg, final String name, final String out)
-            throws MojoExecutionException {
-
-        parseObj(base, false, pkg, name, out, Collections.<String, Object>emptyMap());
-    }
-
-    protected void parseObj(
-            final File base,
-            final String pkg,
-            final String name,
-            final String out,
-            final Map<String, Object> objs)
-            throws MojoExecutionException {
-
-        parseObj(base, false, pkg, name, out, objs);
-    }
-
-    protected void parseObj(
-            final File base,
-            final boolean append,
-            final String pkg,
-            final String name,
-            final String out,
-            final Map<String, Object> objs)
-            throws MojoExecutionException {
-
-        final VelocityContext ctx = newContext();
-        ctx.put("package", pkg);
-
-        if (objs != null) {
-            for (Map.Entry<String, Object> obj : objs.entrySet()) {
-                if (StringUtils.isNotBlank(obj.getKey()) && obj.getValue() != null) {
-                    ctx.put(obj.getKey(), obj.getValue());
-                }
-            }
-        }
-
-        final Template template = Velocity.getTemplate(name + ".vm");
-        writeFile(out, base, ctx, template, append);
-    }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/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
new file mode 100644
index 0000000..b2023a7
--- /dev/null
+++ b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractPOJOGenMojo.java
@@ -0,0 +1,340 @@
+/*
+ * 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.pojogen;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.olingo.client.api.CommonODataClient;
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmComplexType;
+import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+import org.apache.olingo.commons.api.edm.EdmEntitySet;
+import org.apache.olingo.commons.api.edm.EdmEntityType;
+import org.apache.olingo.commons.api.edm.EdmEnumType;
+import org.apache.olingo.commons.api.edm.EdmSchema;
+import org.apache.olingo.commons.api.edm.EdmSingleton;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.Velocity;
+import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
+import org.codehaus.plexus.util.FileUtils;
+
+public abstract class AbstractPOJOGenMojo extends AbstractMojo {
+
+  /**
+   * Generated files base root.
+   */
+  @Parameter(property = "outputDirectory", required = true)
+  protected String outputDirectory;
+
+  /**
+   * OData service root URL.
+   */
+  @Parameter(property = "serviceRootURL", required = false)
+  protected String serviceRootURL;
+
+  /**
+   * Local file from which Edm information can be loaded.
+   */
+  @Parameter(property = "localEdm", required = false)
+  protected String localEdm;
+
+  /**
+   * Base package.
+   */
+  @Parameter(property = "basePackage", required = true)
+  protected String basePackage;
+
+  protected final Set<String> namespaces = new HashSet<String>();
+
+  protected static String TOOL_DIR = "ojc-plugin";
+
+  protected AbstractUtility utility;
+
+  protected abstract String getVersion();
+
+  protected File mkdir(final String path) {
+    final File dir = new File(outputDirectory + File.separator + TOOL_DIR + File.separator + path);
+
+    if (dir.exists()) {
+      if (!dir.isDirectory()) {
+        throw new IllegalArgumentException("Invalid path '" + path + "': it is not a directory");
+      }
+    } else {
+      dir.mkdirs();
+    }
+
+    return dir;
+  }
+
+  protected File mkPkgDir(final String path) {
+    return mkdir(basePackage.replace('.', File.separatorChar) + File.separator + path);
+  }
+
+  protected void writeFile(final String name, final File path, final VelocityContext ctx, final Template template,
+          final boolean append) throws MojoExecutionException {
+
+    if (!path.exists()) {
+      throw new IllegalArgumentException("Invalid base path '" + path.getAbsolutePath() + "'");
+    }
+
+    FileWriter writer = null;
+    try {
+      final File toBeWritten = new File(path, name);
+      if (!append && toBeWritten.exists()) {
+        throw new IllegalStateException("File '" + toBeWritten.getAbsolutePath() + "' already exists");
+      }
+      writer = new FileWriter(toBeWritten, append);
+      template.merge(ctx, writer);
+    } catch (IOException e) {
+      throw new MojoExecutionException("Error creating file '" + name + "'", e);
+    } finally {
+      IOUtils.closeQuietly(writer);
+    }
+  }
+
+  protected VelocityContext newContext() {
+    final VelocityContext ctx = new VelocityContext();
+
+    ctx.put("utility", getUtility());
+    ctx.put("basePackage", basePackage);
+    ctx.put("schemaName", getUtility().getSchemaName());
+    ctx.put("namespace", getUtility().getNamespace());
+    ctx.put("namespaces", namespaces);
+    ctx.put("odataVersion", getVersion());
+
+    return ctx;
+  }
+
+  protected void parseObj(final File base, final String pkg, final String name, final String out)
+          throws MojoExecutionException {
+
+    parseObj(base, false, pkg, name, out, Collections.<String, Object>emptyMap());
+  }
+
+  protected void parseObj(
+          final File base,
+          final String pkg,
+          final String name,
+          final String out,
+          final Map<String, Object> objs)
+          throws MojoExecutionException {
+
+    parseObj(base, false, pkg, name, out, objs);
+  }
+
+  protected void parseObj(
+          final File base,
+          final boolean append,
+          final String pkg,
+          final String name,
+          final String out,
+          final Map<String, Object> objs)
+          throws MojoExecutionException {
+
+    final VelocityContext ctx = newContext();
+    ctx.put("package", pkg);
+
+    if (objs != null) {
+      for (Map.Entry<String, Object> obj : objs.entrySet()) {
+        if (StringUtils.isNotBlank(obj.getKey()) && obj.getValue() != null) {
+          ctx.put(obj.getKey(), obj.getValue());
+        }
+      }
+    }
+
+    final Template template = Velocity.getTemplate(name + ".vm");
+    writeFile(out, base, ctx, template, append);
+  }
+
+  protected abstract void createUtility(Edm edm, EdmSchema schema, String basePackage);
+
+  protected abstract AbstractUtility getUtility();
+
+  protected abstract CommonODataClient<?> getClient();
+
+  private Edm getEdm() throws FileNotFoundException {
+    if (StringUtils.isEmpty(serviceRootURL) && StringUtils.isEmpty(localEdm)) {
+      throw new IllegalArgumentException("Must provide either serviceRootURL or localEdm");
+    }
+    if (StringUtils.isNotEmpty(serviceRootURL) && StringUtils.isNotEmpty(localEdm)) {
+      throw new IllegalArgumentException("Must provide either serviceRootURL or localEdm, not both");
+    }
+
+    Edm edm = null;
+    if (StringUtils.isNotEmpty(serviceRootURL)) {
+      edm = getClient().getRetrieveRequestFactory().getMetadataRequest(serviceRootURL).execute().getBody();
+    } else if (StringUtils.isNotEmpty(localEdm)) {
+      final FileInputStream fis = new FileInputStream(FileUtils.getFile(localEdm));
+      try {
+        edm = getClient().getReader().readMetadata(fis);
+      } finally {
+        IOUtils.closeQuietly(fis);
+      }
+    }
+
+    if (edm == null) {
+      throw new IllegalStateException("Metadata not found");
+    }
+    return edm;
+  }
+
+  @Override
+  public void execute() throws MojoExecutionException, MojoFailureException {
+    if (new File(outputDirectory + File.separator + TOOL_DIR).exists()) {
+      getLog().info("Nothing to do because " + TOOL_DIR + " directory already exists. Clean to update.");
+      return;
+    }
+
+    Velocity.addProperty(Velocity.RESOURCE_LOADER, "class");
+    Velocity.addProperty("class.resource.loader.class", ClasspathResourceLoader.class.getName());
+
+    try {
+      final Edm edm = getEdm();
+
+      for (EdmSchema schema : edm.getSchemas()) {
+        namespaces.add(schema.getNamespace().toLowerCase());
+      }
+
+      final Set<String> complexTypeNames = new HashSet<String>();
+      final File services = mkdir("META-INF/services");
+
+      for (EdmSchema schema : edm.getSchemas()) {
+        createUtility(edm, schema, basePackage);
+
+        // write package-info for the base package
+        final String schemaPath = utility.getNamespace().toLowerCase().replace('.', File.separatorChar);
+        final File base = mkPkgDir(schemaPath);
+        final String pkg = basePackage + "." + utility.getNamespace().toLowerCase();
+        parseObj(base, pkg, "package-info", "package-info.java");
+
+        // write package-info for types package
+        final File typesBaseDir = mkPkgDir(schemaPath + "/types");
+        final String typesPkg = pkg + ".types";
+        parseObj(typesBaseDir, typesPkg, "package-info", "package-info.java");
+
+        final Map<String, Object> objs = new HashMap<String, Object>();
+
+        // write types into types package
+        for (EdmEnumType enumType : schema.getEnumTypes()) {
+          final String className = utility.capitalize(enumType.getName());
+          objs.clear();
+          objs.put("enumType", enumType);
+          parseObj(typesBaseDir, typesPkg, "enumType", className + ".java", objs);
+        }
+
+        for (EdmComplexType complex : schema.getComplexTypes()) {
+          final String className = utility.capitalize(complex.getName());
+          complexTypeNames.add(typesPkg + "." + className);
+          objs.clear();
+          objs.put("complexType", complex);
+          parseObj(typesBaseDir, typesPkg, "complexType", className + ".java", objs);
+        }
+
+        for (EdmEntityType entity : schema.getEntityTypes()) {
+          objs.clear();
+          objs.put("entityType", entity);
+
+          final Map<String, String> keys;
+
+          EdmEntityType baseType = null;
+          if (entity.getBaseType() == null) {
+            keys = getUtility().getEntityKeyType(entity);
+          } else {
+            baseType = entity.getBaseType();
+            objs.put("baseType", getUtility().getJavaType(baseType.getFullQualifiedName().toString()));
+            while (baseType.getBaseType() != null) {
+              baseType = baseType.getBaseType();
+            }
+            keys = getUtility().getEntityKeyType(baseType);
+          }
+
+          if (keys.size() > 1) {
+            // create compound key class
+            final String keyClassName = utility.capitalize(baseType == null
+                    ? entity.getName()
+                    : baseType.getName()) + "Key";
+            objs.put("keyRef", keyClassName);
+
+            if (entity.getBaseType() == null) {
+              objs.put("keys", keys);
+              parseObj(typesBaseDir, typesPkg, "entityTypeKey", keyClassName + ".java", objs);
+            }
+          }
+
+          parseObj(typesBaseDir, typesPkg, "entityType",
+                  utility.capitalize(entity.getName()) + ".java", objs);
+          parseObj(typesBaseDir, typesPkg, "entityCollection",
+                  utility.capitalize(entity.getName()) + "Collection.java", objs);
+        }
+
+        // write container and top entity sets into the base package
+        for (EdmEntityContainer container : schema.getEntityContainers()) {
+          objs.clear();
+          objs.put("container", container);
+          objs.put("namespace", schema.getNamespace());
+
+          parseObj(base, pkg, "container",
+                  utility.capitalize(container.getName()) + ".java", objs);
+
+          for (EdmEntitySet entitySet : container.getEntitySets()) {
+            objs.clear();
+            objs.put("entitySet", entitySet);
+            parseObj(base, pkg, "entitySet",
+                    utility.capitalize(entitySet.getName()) + ".java", objs);
+          }
+
+          if (ODataServiceVersion.valueOf(getVersion().toUpperCase()).compareTo(ODataServiceVersion.V40) >= 0) {
+            for (EdmSingleton singleton : container.getSingletons()) {
+              objs.clear();
+              objs.put("singleton", singleton);
+              parseObj(base, pkg, "singleton",
+                      utility.capitalize(singleton.getName()) + ".java", objs);
+            }
+          }
+        }
+
+        parseObj(services, true, null, "services", "org.apache.olingo.ext.proxy.api.AbstractComplexType",
+                Collections.singletonMap("services", (Object) complexTypeNames));
+      }
+    } catch (Exception t) {
+      getLog().error(t);
+
+      throw (t instanceof MojoExecutionException)
+              ? (MojoExecutionException) t
+              : new MojoExecutionException("While executin mojo", t);
+    }
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractUtility.java
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractUtility.java b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractUtility.java
index 2930ace..32bfc6b 100644
--- a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractUtility.java
+++ b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractUtility.java
@@ -206,15 +206,15 @@ public abstract class AbstractUtility {
 
     return result;
   }
-  
-  public List<EdmOperation> justInheritedOperationsBoundTo(final EdmEntityType entity){
+
+  public List<EdmOperation> justInheritedOperationsBoundTo(final EdmEntityType entity) {
     final List<EdmOperation> result = new ArrayList<EdmOperation>();
-    if(entity.getBaseType()!=null){
+    if (entity.getBaseType() != null) {
       result.addAll(getFunctionsBoundTo(entity.getBaseType().getName(), false));
       result.addAll(getActionsBoundTo(entity.getBaseType().getName(), false));
       result.addAll(justInheritedOperationsBoundTo(entity.getBaseType()));
     }
-    
+
     return result;
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V3MetadataMojo.java
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V3MetadataMojo.java b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V3MetadataMojo.java
deleted file mode 100644
index 9ab6f48..0000000
--- a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V3MetadataMojo.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.olingo.ext.pojogen;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugins.annotations.LifecyclePhase;
-import org.apache.maven.plugins.annotations.Mojo;
-import java.io.File;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import org.apache.olingo.client.core.ODataClientFactory;
-import org.apache.olingo.commons.api.edm.Edm;
-import org.apache.olingo.commons.api.edm.EdmComplexType;
-import org.apache.olingo.commons.api.edm.EdmEntityContainer;
-import org.apache.olingo.commons.api.edm.EdmEntitySet;
-import org.apache.olingo.commons.api.edm.EdmEntityType;
-import org.apache.olingo.commons.api.edm.EdmEnumType;
-import org.apache.olingo.commons.api.edm.EdmSchema;
-import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
-import org.apache.velocity.app.Velocity;
-import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
-
-/**
- * POJOs generator.
- */
-@Mojo(name = "pojosV3", defaultPhase = LifecyclePhase.PROCESS_SOURCES)
-public class V3MetadataMojo extends AbstractMetadataMojo {
-
-  @Override
-  protected V3Utility getUtility() {
-    return (V3Utility) utility;
-  }
-
-  @Override
-  protected String getVersion() {
-    return ODataServiceVersion.V30.name().toLowerCase();
-  }
-
-  @Override
-  public void execute() throws MojoExecutionException {
-    if (new File(outputDirectory + File.separator + TOOL_DIR).exists()) {
-      getLog().info("Nothing to do because " + TOOL_DIR + " directory already exists. Clean to update.");
-      return;
-    }
-
-    try {
-      Velocity.addProperty(Velocity.RESOURCE_LOADER, "class");
-      Velocity.addProperty("class.resource.loader.class", ClasspathResourceLoader.class.getName());
-
-      final Edm metadata = ODataClientFactory.getV3().getRetrieveRequestFactory().
-              getMetadataRequest(serviceRootURL).execute().getBody();
-
-      if (metadata == null) {
-        throw new IllegalStateException("Metadata not found");
-      }
-
-      for (EdmSchema schema : metadata.getSchemas()) {
-        namespaces.add(schema.getNamespace().toLowerCase());
-      }
-
-      final Set<String> complexTypeNames = new HashSet<String>();
-      final File services = mkdir("META-INF/services");
-
-      for (EdmSchema schema : metadata.getSchemas()) {
-        utility = new V3Utility(metadata, schema, basePackage);
-
-        // write package-info for the base package
-        final String schemaPath = utility.getNamespace().toLowerCase().replace('.', File.separatorChar);
-        final File base = mkPkgDir(schemaPath);
-        final String pkg = basePackage + "." + utility.getNamespace().toLowerCase();
-        parseObj(base, pkg, "package-info", "package-info.java");
-
-        // write package-info for types package
-        final File typesBaseDir = mkPkgDir(schemaPath + "/types");
-        final String typesPkg = pkg + ".types";
-        parseObj(typesBaseDir, typesPkg, "package-info", "package-info.java");
-
-        final Map<String, Object> objs = new HashMap<String, Object>();
-
-        // write types into types package
-        for (EdmEnumType enumType : schema.getEnumTypes()) {
-          final String className = utility.capitalize(enumType.getName());
-          objs.clear();
-          objs.put("enumType", enumType);
-          parseObj(typesBaseDir, typesPkg, "enumType", className + ".java", objs);
-        }
-
-        for (EdmComplexType complex : schema.getComplexTypes()) {
-          final String className = utility.capitalize(complex.getName());
-          complexTypeNames.add(typesPkg + "." + className);
-          objs.clear();
-          objs.put("complexType", complex);
-          parseObj(typesBaseDir, typesPkg, "complexType", className + ".java", objs);
-        }
-
-        for (EdmEntityType entity : schema.getEntityTypes()) {
-          objs.clear();
-          objs.put("entityType", entity);
-
-          final Map<String, String> keys;
-
-          EdmEntityType baseType = null;
-          if (entity.getBaseType() == null) {
-            keys = getUtility().getEntityKeyType(entity);
-          } else {
-            baseType = entity.getBaseType();
-            objs.put("baseType", getUtility().getJavaType(baseType.getFullQualifiedName().toString()));
-            while (baseType.getBaseType() != null) {
-              baseType = baseType.getBaseType();
-            }
-            keys = getUtility().getEntityKeyType(baseType);
-          }
-
-          if (keys.size() > 1) {
-            // create compound key class
-            final String keyClassName = utility.capitalize(baseType == null
-                    ? entity.getName()
-                    : baseType.getName()) + "Key";
-            objs.put("keyRef", keyClassName);
-
-            if (entity.getBaseType() == null) {
-              objs.put("keys", keys);
-              parseObj(typesBaseDir, typesPkg, "entityTypeKey", keyClassName + ".java", objs);
-            }
-          }
-
-          parseObj(typesBaseDir, typesPkg, "entityType",
-                  utility.capitalize(entity.getName()) + ".java", objs);
-          parseObj(typesBaseDir, typesPkg, "entityCollection",
-                  utility.capitalize(entity.getName()) + "Collection.java", objs);
-        }
-
-        // write container and top entity sets into the base package
-        for (EdmEntityContainer container : schema.getEntityContainers()) {
-          objs.clear();
-          objs.put("container", container);
-          objs.put("namespace", schema.getNamespace());
-          parseObj(base, pkg, "container",
-                  utility.capitalize(container.getName()) + ".java", objs);
-
-          for (EdmEntitySet entitySet : container.getEntitySets()) {
-            objs.clear();
-            objs.put("entitySet", entitySet);
-            parseObj(base, pkg, "entitySet",
-                    utility.capitalize(entitySet.getName()) + ".java", objs);
-          }
-        }
-
-        parseObj(services, true, null, "services", "org.apache.olingo.ext.proxy.api.AbstractComplexType",
-                Collections.singletonMap("services", (Object) complexTypeNames));
-      }
-    } catch (Exception t) {
-      final StringWriter stringWriter = new StringWriter();
-      final PrintWriter printWriter = new PrintWriter(stringWriter);
-      t.printStackTrace(printWriter);
-      getLog().error(stringWriter.toString());
-
-      throw (t instanceof MojoExecutionException)
-              ? (MojoExecutionException) t
-              : new MojoExecutionException("While executing mojo", t);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V3POJOGenMojo.java
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V3POJOGenMojo.java b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V3POJOGenMojo.java
new file mode 100644
index 0000000..ead9a7c
--- /dev/null
+++ b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V3POJOGenMojo.java
@@ -0,0 +1,54 @@
+/*
+ * 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.pojogen;
+
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.olingo.client.api.CommonODataClient;
+import org.apache.olingo.client.core.ODataClientFactory;
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmSchema;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+
+/**
+ * POJOs generator.
+ */
+@Mojo(name = "v3pojoGen", defaultPhase = LifecyclePhase.PROCESS_SOURCES)
+public class V3POJOGenMojo extends AbstractPOJOGenMojo {
+
+  @Override
+  protected void createUtility(final Edm edm, final EdmSchema schema, final String basePackage) {
+    utility = new V3Utility(edm, schema, basePackage);
+  }
+
+  @Override
+  protected V3Utility getUtility() {
+    return (V3Utility) utility;
+  }
+
+  @Override
+  protected String getVersion() {
+    return ODataServiceVersion.V30.name().toLowerCase();
+  }
+
+  @Override
+  protected CommonODataClient<?> getClient() {
+    return ODataClientFactory.getV3();
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V4MetadataMojo.java
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V4MetadataMojo.java b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V4MetadataMojo.java
deleted file mode 100644
index 2751726..0000000
--- a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V4MetadataMojo.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.olingo.ext.pojogen;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugins.annotations.LifecyclePhase;
-import org.apache.maven.plugins.annotations.Mojo;
-import java.io.File;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import org.apache.olingo.client.core.ODataClientFactory;
-import org.apache.olingo.commons.api.edm.Edm;
-import org.apache.olingo.commons.api.edm.EdmComplexType;
-import org.apache.olingo.commons.api.edm.EdmEntityContainer;
-import org.apache.olingo.commons.api.edm.EdmEntitySet;
-import org.apache.olingo.commons.api.edm.EdmEntityType;
-import org.apache.olingo.commons.api.edm.EdmEnumType;
-import org.apache.olingo.commons.api.edm.EdmSchema;
-import org.apache.olingo.commons.api.edm.EdmSingleton;
-import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
-import org.apache.velocity.app.Velocity;
-import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
-
-/**
- * POJOs generator.
- */
-@Mojo(name = "pojosV4", defaultPhase = LifecyclePhase.PROCESS_SOURCES)
-public class V4MetadataMojo extends AbstractMetadataMojo {
-
-  @Override
-  protected V4Utility getUtility() {
-    return (V4Utility) utility;
-  }
-
-  @Override
-  protected String getVersion() {
-    return ODataServiceVersion.V40.name().toLowerCase();
-  }
-
-  @Override
-  public void execute() throws MojoExecutionException {
-    if (new File(outputDirectory + File.separator + TOOL_DIR).exists()) {
-      getLog().info("Nothing to do because " + TOOL_DIR + " directory already exists. Clean to update.");
-      return;
-    }
-
-    try {
-      Velocity.addProperty(Velocity.RESOURCE_LOADER, "class");
-      Velocity.addProperty("class.resource.loader.class", ClasspathResourceLoader.class.getName());
-
-      final Edm metadata =
-              ODataClientFactory.getV4().getRetrieveRequestFactory().getMetadataRequest(serviceRootURL).execute().
-              getBody();
-
-      if (metadata == null) {
-        throw new IllegalStateException("Metadata not found");
-      }
-
-      for (EdmSchema schema : metadata.getSchemas()) {
-        namespaces.add(schema.getNamespace().toLowerCase());
-      }
-
-      final Set<String> complexTypeNames = new HashSet<String>();
-      final File services = mkdir("META-INF/services");
-
-      for (EdmSchema schema : metadata.getSchemas()) {
-        utility = new V4Utility(metadata, schema, basePackage);
-
-        // write package-info for the base package
-        final String schemaPath = utility.getNamespace().toLowerCase().replace('.', File.separatorChar);
-        final File base = mkPkgDir(schemaPath);
-        final String pkg = basePackage + "." + utility.getNamespace().toLowerCase();
-        parseObj(base, pkg, "package-info", "package-info.java");
-
-        // write package-info for types package
-        final File typesBaseDir = mkPkgDir(schemaPath + "/types");
-        final String typesPkg = pkg + ".types";
-        parseObj(typesBaseDir, typesPkg, "package-info", "package-info.java");
-
-        final Map<String, Object> objs = new HashMap<String, Object>();
-
-        // write types into types package
-        for (EdmEnumType enumType : schema.getEnumTypes()) {
-          final String className = utility.capitalize(enumType.getName());
-          objs.clear();
-          objs.put("enumType", enumType);
-          parseObj(typesBaseDir, typesPkg, "enumType", className + ".java", objs);
-        }
-
-        for (EdmComplexType complex : schema.getComplexTypes()) {
-          final String className = utility.capitalize(complex.getName());
-          complexTypeNames.add(typesPkg + "." + className);
-          objs.clear();
-          objs.put("complexType", complex);
-          parseObj(typesBaseDir, typesPkg, "complexType", className + ".java", objs);
-        }
-
-        for (EdmEntityType entity : schema.getEntityTypes()) {
-          objs.clear();
-          objs.put("entityType", entity);
-
-          final Map<String, String> keys;
-
-          EdmEntityType baseType = null;
-          if (entity.getBaseType() == null) {
-            keys = getUtility().getEntityKeyType(entity);
-          } else {
-            baseType = entity.getBaseType();
-            objs.put("baseType", getUtility().getJavaType(baseType.getFullQualifiedName().toString()));
-            while (baseType.getBaseType() != null) {
-              baseType = baseType.getBaseType();
-            }
-            keys = getUtility().getEntityKeyType(baseType);
-          }
-
-          if (keys.size() > 1) {
-            // create compound key class
-            final String keyClassName = utility.capitalize(baseType == null
-                    ? entity.getName()
-                    : baseType.getName()) + "Key";
-            objs.put("keyRef", keyClassName);
-
-            if (entity.getBaseType() == null) {
-              objs.put("keys", keys);
-              parseObj(typesBaseDir, typesPkg, "entityTypeKey", keyClassName + ".java", objs);
-            }
-          }
-
-          parseObj(typesBaseDir, typesPkg, "entityType",
-                  utility.capitalize(entity.getName()) + ".java", objs);
-          parseObj(typesBaseDir, typesPkg, "entityCollection",
-                  utility.capitalize(entity.getName()) + "Collection.java", objs);
-        }
-
-        // write container and top entity sets into the base package
-        for (EdmEntityContainer container : schema.getEntityContainers()) {
-          objs.clear();
-          objs.put("container", container);
-          objs.put("namespace", schema.getNamespace());
-          
-          parseObj(base, pkg, "container",
-                  utility.capitalize(container.getName()) + ".java", objs);
-
-          for (EdmEntitySet entitySet : container.getEntitySets()) {
-            objs.clear();
-            objs.put("entitySet", entitySet);
-            parseObj(base, pkg, "entitySet",
-                    utility.capitalize(entitySet.getName()) + ".java", objs);
-          }
-
-          for (EdmSingleton singleton : container.getSingletons()) {
-            objs.clear();
-            objs.put("singleton", singleton);
-            parseObj(base, pkg, "singleton",
-                    utility.capitalize(singleton.getName()) + ".java", objs);
-          }
-        }
-
-        parseObj(services, true, null, "services", "org.apache.olingo.ext.proxy.api.AbstractComplexType",
-                Collections.singletonMap("services", (Object) complexTypeNames));
-      }
-    } catch (Exception t) {
-      final StringWriter stringWriter = new StringWriter();
-      final PrintWriter printWriter = new PrintWriter(stringWriter);
-      t.printStackTrace(printWriter);
-      getLog().error(stringWriter.toString());
-
-      throw (t instanceof MojoExecutionException)
-              ? (MojoExecutionException) t
-              : new MojoExecutionException("While executin mojo", t);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V4POJOGenMojo.java
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V4POJOGenMojo.java b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V4POJOGenMojo.java
new file mode 100644
index 0000000..13d97b7
--- /dev/null
+++ b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V4POJOGenMojo.java
@@ -0,0 +1,54 @@
+/*
+ * 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.pojogen;
+
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.olingo.client.api.v4.ODataClient;
+import org.apache.olingo.client.core.ODataClientFactory;
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmSchema;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+
+/**
+ * POJOs generator.
+ */
+@Mojo(name = "v4pojoGen", defaultPhase = LifecyclePhase.PROCESS_SOURCES)
+public class V4POJOGenMojo extends AbstractPOJOGenMojo {
+
+  @Override
+  protected void createUtility(final Edm edm, final EdmSchema schema, final String basePackage) {
+    utility = new V4Utility(edm, schema, basePackage);
+  }
+
+  @Override
+  protected V4Utility getUtility() {
+    return (V4Utility) utility;
+  }
+
+  @Override
+  protected String getVersion() {
+    return ODataServiceVersion.V40.name().toLowerCase();
+  }
+
+  @Override
+  protected ODataClient getClient() {
+    return ODataClientFactory.getV4();
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/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 82ef821..1114445 100644
--- a/ext/pojogen-maven-plugin/src/main/resources/entityType.vm
+++ b/ext/pojogen-maven-plugin/src/main/resources/entityType.vm
@@ -126,10 +126,10 @@ 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).size())
+#set( $inherited = $utility.justInheritedOperationsBoundTo($entityType) )
 #if( $inherited.size() > 0 || $functions.size() > 0 || $actions.size() > 0 )
     #if($inherited.size() > 0)
-    @Overide
+    @Override
     #end
     Operations operations();
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/fit/pom.xml
----------------------------------------------------------------------
diff --git a/fit/pom.xml b/fit/pom.xml
index 905f1cf..20081de 100644
--- a/fit/pom.xml
+++ b/fit/pom.xml
@@ -34,11 +34,6 @@
     <relativePath>..</relativePath>
   </parent>
 
-  <properties>
-    <war.maven.plugin.version>2.4</war.maven.plugin.version>
-    <invoker.maven.plugin.version>1.8</invoker.maven.plugin.version>
-  </properties>
-
   <dependencies>
     <dependency>
       <groupId>org.apache.olingo</groupId>
@@ -48,7 +43,7 @@
     
     <dependency>
       <groupId>org.apache.olingo</groupId>
-      <artifactId>client-proxy</artifactId>
+      <artifactId>olingo-client-proxy</artifactId>
       <version>${project.version}</version>
     </dependency>
 
@@ -115,7 +110,6 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-invoker-plugin</artifactId>
-        <version>${invoker.maven.plugin.version}</version>
         <inherited>true</inherited>
         <configuration>
           <debug>true</debug>
@@ -143,7 +137,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-war-plugin</artifactId>
-        <version>${war.maven.plugin.version}</version>
+        <inherited>true</inherited>
         <configuration>
           <webResources>
             <resource>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/fit/src/it/staticServiceV3/pom.xml
----------------------------------------------------------------------
diff --git a/fit/src/it/staticServiceV3/pom.xml b/fit/src/it/staticServiceV3/pom.xml
index 8e8c38b..cd27520 100644
--- a/fit/src/it/staticServiceV3/pom.xml
+++ b/fit/src/it/staticServiceV3/pom.xml
@@ -42,7 +42,7 @@
     </dependency>
     
     <dependency>
-      <artifactId>client-proxy</artifactId>
+      <artifactId>olingo-client-proxy</artifactId>
       <groupId>org.apache.olingo</groupId>
       <version>@project.version@</version>
     </dependency>
@@ -80,10 +80,10 @@
               <serviceRootURL>http://localhost:9080/stub/StaticService/V30/Static.svc</serviceRootURL>
               <basePackage>org.apache.olingo.fit.proxy.v3.staticservice</basePackage>
             </configuration>
-            <id>pojosV3</id>
+            <id>v3pojoGen</id>
             <phase>generate-sources</phase>
             <goals>
-              <goal>pojosV3</goal>
+              <goal>v3pojoGen</goal>
             </goals>
           </execution>
         </executions>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/fit/src/it/staticServiceV4/pom.xml
----------------------------------------------------------------------
diff --git a/fit/src/it/staticServiceV4/pom.xml b/fit/src/it/staticServiceV4/pom.xml
index 31a7ae2..5917364 100644
--- a/fit/src/it/staticServiceV4/pom.xml
+++ b/fit/src/it/staticServiceV4/pom.xml
@@ -42,7 +42,7 @@
     </dependency>
     
     <dependency>
-      <artifactId>client-proxy</artifactId>
+      <artifactId>olingo-client-proxy</artifactId>
       <groupId>org.apache.olingo</groupId>
       <version>@project.version@</version>
     </dependency>
@@ -80,10 +80,10 @@
               <serviceRootURL>http://localhost:9080/stub/StaticService/V40/Static.svc</serviceRootURL>
               <basePackage>org.apache.olingo.fit.proxy.v4.staticservice</basePackage>
             </configuration>
-            <id>pojosV4</id>
+            <id>v4pojoGen</id>
             <phase>generate-sources</phase>
             <goals>
-              <goal>pojosV4</goal>
+              <goal>v4pojoGen</goal>
             </goals>
           </execution>
         </executions>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 761127a..97615c8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -351,6 +351,18 @@
           <artifactId>jarjar-maven-plugin</artifactId>
           <version>1.8</version>
         </plugin>
+        
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-war-plugin</artifactId>
+          <version>2.4</version>
+        </plugin>
+        
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-invoker-plugin</artifactId>
+          <version>1.8</version>
+        </plugin>
       </plugins>
     </pluginManagement>
 


[4/4] git commit: Updating RAT excludes to make the build succeeed

Posted by il...@apache.org.
Updating RAT excludes to make the build succeeed


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

Branch: refs/heads/master
Commit: 322a3efd8dd55a1a625b2515aca36937b83ca033
Parents: feae9d0
Author: Francesco Chicchiriccò <--global>
Authored: Mon May 12 15:58:47 2014 +0200
Committer: Francesco Chicchiriccò <--global>
Committed: Mon May 12 15:58:47 2014 +0200

----------------------------------------------------------------------
 pom.xml | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/322a3efd/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index d503470..ac2cbe5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -448,6 +448,8 @@
                 <exclude>**/nb-configuration.xml</exclude>
                 <exclude>**/.externalToolBuilders/**</exclude>
                 <exclude>**/maven-eclipse.xml</exclude>
+                <exclude>**/checkstyle-*</exclude>
+                <exclude>**/.plxarc</exclude>
               </excludes>
             </configuration>
           </execution>


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

Posted by il...@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/feae9d02
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/feae9d02
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/feae9d02

Branch: refs/heads/master
Commit: feae9d022b7680a4158a2a36572a26b844941288
Parents: 288bbb7 330c556
Author: Francesco Chicchiriccò <--global>
Authored: Mon May 12 15:52:32 2014 +0200
Committer: Francesco Chicchiriccò <--global>
Committed: Mon May 12 15:52:32 2014 +0200

----------------------------------------------------------------------
 fit/pom.xml                                     |   53 +-
 .../org/apache/olingo/fit/ref/PingITCase.java   |   44 +
 lib/pom.xml                                     |   10 +-
 lib/ref/pom.xml                                 |   50 -
 lib/server-api/pom.xml                          |   44 +-
 .../apache/olingo/server/api/ODataHandler.java  |   28 +
 .../apache/olingo/server/api/ODataServer.java   |    4 +
 lib/server-core/pom.xml                         |   45 +-
 .../olingo/server/core/ODataHandlerImpl.java    |   81 +
 .../olingo/server/core/ODataServerImpl.java     |    9 +
 .../server/core/servlet/ODataServlet.java       |   86 -
 .../serializer/json/ServiceDocumentTest.java    |  133 -
 .../serializer/xml/MetadataDocumentTest.java    |  252 -
 .../server/core/testutil/EdmTechProvider.java   | 1976 -------
 .../core/testutil/EdmTechTestProvider.java      |  100 -
 .../server/core/testutil/StringUtils.java       |   52 -
 .../testutil/techprovider/ActionProvider.java   |  191 -
 .../techprovider/ComplexTypeProvider.java       |  175 -
 .../techprovider/ContainerProvider.java         |  361 --
 .../testutil/techprovider/EdmTechProvider.java  |  147 -
 .../techprovider/EntityTypeProvider.java        |  408 --
 .../testutil/techprovider/EnumTypeProvider.java |   47 -
 .../testutil/techprovider/FunctionProvider.java |  852 ---
 .../testutil/techprovider/PropertyProvider.java |  590 --
 .../testutil/techprovider/SchemaProvider.java   |  250 -
 .../techprovider/TypeDefinitionProvider.java    |   30 -
 .../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/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 +
 lib/server-ref/pom.xml                          |   83 +
 .../olingo/server/ref/ReferenceServlet.java     |   51 +
 .../server/ref/provider/ActionProvider.java     |  191 +
 .../ref/provider/ComplexTypeProvider.java       |  175 +
 .../server/ref/provider/ContainerProvider.java  |  361 ++
 .../server/ref/provider/EdmTechProvider.java    |  147 +
 .../server/ref/provider/EntityTypeProvider.java |  408 ++
 .../server/ref/provider/EnumTypeProvider.java   |   47 +
 .../server/ref/provider/FunctionProvider.java   |  852 +++
 .../server/ref/provider/PropertyProvider.java   |  590 ++
 .../server/ref/provider/SchemaProvider.java     |  250 +
 .../ref/provider/TypeDefinitionProvider.java    |   30 +
 .../src/main/resources/simplelogger.properties  |   20 +
 lib/server-ref/src/main/webapp/WEB-INF/web.xml  |   42 +
 lib/server-ref/src/main/webapp/index.html       |   32 +
 .../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 ++
 pom.xml                                         |    2 +-
 88 files changed, 14806 insertions(+), 16528 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/feae9d02/fit/pom.xml
----------------------------------------------------------------------
diff --cc fit/pom.xml
index 20081de,9947dd1..d03d970
--- a/fit/pom.xml
+++ b/fit/pom.xml
@@@ -40,10 -45,10 +40,10 @@@
        <artifactId>olingo-commons-core</artifactId>
        <version>${project.version}</version>
      </dependency>
-     
+ 
      <dependency>
        <groupId>org.apache.olingo</groupId>
 -      <artifactId>client-proxy</artifactId>
 +      <artifactId>olingo-client-proxy</artifactId>
        <version>${project.version}</version>
      </dependency>
  

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/feae9d02/pom.xml
----------------------------------------------------------------------


[2/4] git commit: [OLINGO-280] pojogen off-line generation implemented

Posted by il...@apache.org.
[OLINGO-280] pojogen off-line generation implemented


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

Branch: refs/heads/master
Commit: 288bbb7242ffbe0ccc4e5c2e924c1569842ce7a6
Parents: ed8e0e3
Author: Francesco Chicchiriccò <--global>
Authored: Mon May 12 15:52:17 2014 +0200
Committer: Francesco Chicchiriccò <--global>
Committed: Mon May 12 15:52:17 2014 +0200

----------------------------------------------------------------------
 ext/client-proxy/pom.xml                        |   2 +-
 ext/pojogen-maven-plugin/pom.xml                |  30 +-
 .../src/it/v3Sample/pom.xml                     |  93 +++
 .../it/v3Sample/src/test/resources/metadata.xml | 719 +++++++++++++++++++
 .../src/it/v3Sample/verify.groovy               |  20 +
 .../src/it/v4Sample/pom.xml                     |  93 +++
 .../it/v4Sample/src/test/resources/metadata.xml | 462 ++++++++++++
 .../src/it/v4Sample/verify.groovy               |  20 +
 .../ext/pojogen/AbstractMetadataMojo.java       | 160 -----
 .../olingo/ext/pojogen/AbstractPOJOGenMojo.java | 340 +++++++++
 .../olingo/ext/pojogen/AbstractUtility.java     |   8 +-
 .../olingo/ext/pojogen/V3MetadataMojo.java      | 184 -----
 .../olingo/ext/pojogen/V3POJOGenMojo.java       |  54 ++
 .../olingo/ext/pojogen/V4MetadataMojo.java      | 194 -----
 .../olingo/ext/pojogen/V4POJOGenMojo.java       |  54 ++
 .../src/main/resources/entityType.vm            |   4 +-
 fit/pom.xml                                     |  10 +-
 fit/src/it/staticServiceV3/pom.xml              |   6 +-
 fit/src/it/staticServiceV4/pom.xml              |   6 +-
 pom.xml                                         |  12 +
 20 files changed, 1911 insertions(+), 560 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/ext/client-proxy/pom.xml
----------------------------------------------------------------------
diff --git a/ext/client-proxy/pom.xml b/ext/client-proxy/pom.xml
index 39e742b..827e7e9 100644
--- a/ext/client-proxy/pom.xml
+++ b/ext/client-proxy/pom.xml
@@ -23,7 +23,7 @@
 
   <modelVersion>4.0.0</modelVersion>
 
-  <artifactId>client-proxy</artifactId>
+  <artifactId>olingo-client-proxy</artifactId>
   <packaging>jar</packaging>
   <name>${project.artifactId}</name>
   <description>Java client API for OData services: Proxy.</description>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/ext/pojogen-maven-plugin/pom.xml
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/pom.xml b/ext/pojogen-maven-plugin/pom.xml
index 3a77451..b84944f 100644
--- a/ext/pojogen-maven-plugin/pom.xml
+++ b/ext/pojogen-maven-plugin/pom.xml
@@ -43,7 +43,7 @@
   <dependencies>
     <dependency>
       <groupId>org.apache.olingo</groupId>
-      <artifactId>olingo-client-core</artifactId>
+      <artifactId>olingo-client-proxy</artifactId>
       <version>${project.version}</version>
     </dependency>
     
@@ -103,6 +103,34 @@
           </execution>
         </executions>
       </plugin>
+      
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-invoker-plugin</artifactId>
+        <inherited>true</inherited>
+        <configuration>
+          <debug>true</debug>
+          <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
+          <pomIncludes>
+            <pomInclude>*/pom.xml</pomInclude>
+          </pomIncludes>
+          <postBuildHookScript>verify</postBuildHookScript>
+          <goals>
+            <goal>clean</goal>
+            <goal>test-compile</goal>
+          </goals>
+        </configuration>
+        <executions>
+          <execution>
+            <id>integration-test</id>
+            <goals>
+              <goal>install</goal>
+              <goal>integration-test</goal>
+              <goal>verify</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>      
     </plugins>
     
     <resources>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/ext/pojogen-maven-plugin/src/it/v3Sample/pom.xml
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/it/v3Sample/pom.xml b/ext/pojogen-maven-plugin/src/it/v3Sample/pom.xml
new file mode 100644
index 0000000..bd6b698
--- /dev/null
+++ b/ext/pojogen-maven-plugin/src/it/v3Sample/pom.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>pojogen-maven-plugin-v3test</artifactId>
+  <groupId>org.apache.olingo</groupId>
+  <version>@project.version@</version>
+  <name>${project.artifactId}</name>
+  <description>A simple IT verifying the basic use case of pojogen-man-plugin.</description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+  
+  <dependencies>
+    <dependency>
+      <artifactId>pojogen-maven-plugin</artifactId>
+      <groupId>org.apache.olingo</groupId>
+      <version>@project.version@</version>
+      <scope>runtime</scope>
+    </dependency>
+    
+    <dependency>
+      <artifactId>olingo-client-proxy</artifactId>
+      <groupId>org.apache.olingo</groupId>
+      <version>@project.version@</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+        <version>1.8</version>
+        <executions>
+          <execution>
+            <phase>process-sources</phase>
+            <goals>
+              <goal>add-source</goal>
+            </goals>
+            <configuration>
+              <sources>
+                <source>${project.build.directory}/generated-sources</source>
+              </sources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      
+      <plugin>
+        <groupId>@project.groupId@</groupId>
+        <artifactId>pojogen-maven-plugin</artifactId>
+        <version>@project.version@</version>
+        <executions>
+          <execution>
+            <configuration>
+              <outputDirectory>${project.build.directory}/generated-sources</outputDirectory>
+              <localEdm>${project.basedir}/src/test/resources/metadata.xml</localEdm>
+              <basePackage>org.apache.olingo.fit.proxy.v3.staticservice</basePackage>
+            </configuration>
+            <id>v3pojoGen</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>v3pojoGen</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/ext/pojogen-maven-plugin/src/it/v3Sample/src/test/resources/metadata.xml
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/it/v3Sample/src/test/resources/metadata.xml b/ext/pojogen-maven-plugin/src/it/v3Sample/src/test/resources/metadata.xml
new file mode 100644
index 0000000..3c9a5ad
--- /dev/null
+++ b/ext/pojogen-maven-plugin/src/it/v3Sample/src/test/resources/metadata.xml
@@ -0,0 +1,719 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">
+  <edmx:DataServices m:DataServiceVersion="3.0" m:MaxDataServiceVersion="3.0" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
+    <Schema Namespace="Microsoft.Test.OData.Services.AstoriaDefaultService" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
+      <EntityType Name="AllSpatialTypes">
+        <Key>
+          <PropertyRef Name="Id" />
+        </Key>
+        <Property Name="Id" Type="Edm.Int32" Nullable="false" />
+        <Property Name="Geog" Type="Edm.Geography" SRID="Variable" />
+        <Property Name="GeogPoint" Type="Edm.GeographyPoint" SRID="Variable" />
+        <Property Name="GeogLine" Type="Edm.GeographyLineString" SRID="Variable" />
+        <Property Name="GeogPolygon" Type="Edm.GeographyPolygon" SRID="Variable" />
+        <Property Name="GeogCollection" Type="Edm.GeographyCollection" SRID="Variable" />
+        <Property Name="GeogMultiPoint" Type="Edm.GeographyMultiPoint" SRID="Variable" />
+        <Property Name="GeogMultiLine" Type="Edm.GeographyMultiLineString" SRID="Variable" />
+        <Property Name="GeogMultiPolygon" Type="Edm.GeographyMultiPolygon" SRID="Variable" />
+        <Property Name="Geom" Type="Edm.Geometry" SRID="Variable" />
+        <Property Name="GeomPoint" Type="Edm.GeometryPoint" SRID="Variable" />
+        <Property Name="GeomLine" Type="Edm.GeometryLineString" SRID="Variable" />
+        <Property Name="GeomPolygon" Type="Edm.GeometryPolygon" SRID="Variable" />
+        <Property Name="GeomCollection" Type="Edm.GeometryCollection" SRID="Variable" />
+        <Property Name="GeomMultiPoint" Type="Edm.GeometryMultiPoint" SRID="Variable" />
+        <Property Name="GeomMultiLine" Type="Edm.GeometryMultiLineString" SRID="Variable" />
+        <Property Name="GeomMultiPolygon" Type="Edm.GeometryMultiPolygon" SRID="Variable" />
+      </EntityType>
+      <EntityType Name="AllSpatialCollectionTypes" Abstract="true">
+        <Key>
+          <PropertyRef Name="Id" />
+        </Key>
+        <Property Name="Id" Type="Edm.Int32" Nullable="false" />
+      </EntityType>
+      <EntityType Name="Customer">
+        <Key>
+          <PropertyRef Name="CustomerId" />
+        </Key>
+        <Property Name="Thumbnail" Type="Edm.Stream" Nullable="false" />
+        <Property Name="Video" Type="Edm.Stream" Nullable="false" />
+        <Property Name="CustomerId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="Name" Type="Edm.String" m:FC_TargetPath="SyndicationSummary" m:FC_ContentKind="text" m:FC_KeepInContent="false" />
+        <Property Name="PrimaryContactInfo" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails" />
+        <Property Name="BackupContactInfo" Type="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails)" Nullable="false" />
+        <Property Name="Auditing" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.AuditInfo" />
+        <NavigationProperty Name="Orders" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer_Orders" ToRole="Orders" FromRole="Customer" />
+        <NavigationProperty Name="Logins" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer_Logins" ToRole="Logins" FromRole="Customer" />
+        <NavigationProperty Name="Husband" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer_Husband" ToRole="Husband" FromRole="Customer" />
+        <NavigationProperty Name="Wife" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer_Wife" ToRole="Wife" FromRole="Customer" />
+        <NavigationProperty Name="Info" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer_Info" ToRole="Info" FromRole="Customer" />
+      </EntityType>
+      <EntityType Name="Login">
+        <Key>
+          <PropertyRef Name="Username" />
+        </Key>
+        <Property Name="Username" Type="Edm.String" Nullable="false" />
+        <Property Name="CustomerId" Type="Edm.Int32" Nullable="false" />
+        <NavigationProperty Name="Customer" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Login_Customer" ToRole="Customer" FromRole="Login" />
+        <NavigationProperty Name="LastLogin" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Login_LastLogin" ToRole="LastLogin" FromRole="Login" />
+        <NavigationProperty Name="SentMessages" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Login_SentMessages" ToRole="SentMessages" FromRole="Login" />
+        <NavigationProperty Name="ReceivedMessages" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Login_ReceivedMessages" ToRole="ReceivedMessages" FromRole="Login" />
+        <NavigationProperty Name="Orders" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Login_Orders" ToRole="Orders" FromRole="Login" />
+      </EntityType>
+      <EntityType Name="RSAToken">
+        <Key>
+          <PropertyRef Name="Serial" />
+        </Key>
+        <Property Name="Serial" Type="Edm.String" Nullable="false" />
+        <Property Name="Issued" Type="Edm.DateTime" Nullable="false" />
+        <NavigationProperty Name="Login" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.RSAToken_Login" ToRole="Login" FromRole="RSAToken" />
+      </EntityType>
+      <EntityType Name="PageView">
+        <Key>
+          <PropertyRef Name="PageViewId" />
+        </Key>
+        <Property Name="PageViewId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="Username" Type="Edm.String" />
+        <Property Name="Viewed" Type="Edm.DateTimeOffset" Nullable="false" />
+        <Property Name="TimeSpentOnPage" Type="Edm.Time" Nullable="false" />
+        <Property Name="PageUrl" Type="Edm.String" />
+        <NavigationProperty Name="Login" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.PageView_Login" ToRole="Login" FromRole="PageView" />
+      </EntityType>
+      <EntityType Name="LastLogin">
+        <Key>
+          <PropertyRef Name="Username" />
+        </Key>
+        <Property Name="Username" Type="Edm.String" Nullable="false" />
+        <Property Name="LoggedIn" Type="Edm.DateTime" Nullable="false" />
+        <Property Name="LoggedOut" Type="Edm.DateTime" />
+        <Property Name="Duration" Type="Edm.Time" Nullable="false" />
+        <NavigationProperty Name="Login" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.LastLogin_Login" ToRole="Login" FromRole="LastLogin" />
+      </EntityType>
+      <EntityType Name="Message">
+        <Key>
+          <PropertyRef Name="FromUsername" />
+          <PropertyRef Name="MessageId" />
+        </Key>
+        <Property Name="MessageId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="FromUsername" Type="Edm.String" Nullable="false" />
+        <Property Name="ToUsername" Type="Edm.String" />
+        <Property Name="Sent" Type="Edm.DateTimeOffset" Nullable="false" m:FC_TargetPath="SyndicationPublished" m:FC_ContentKind="text" m:FC_KeepInContent="true" />
+        <Property Name="Subject" Type="Edm.String" m:FC_TargetPath="SyndicationTitle" m:FC_ContentKind="text" m:FC_KeepInContent="true" />
+        <Property Name="Body" Type="Edm.String" />
+        <Property Name="IsRead" Type="Edm.Boolean" Nullable="false" />
+        <NavigationProperty Name="Sender" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Message_Sender" ToRole="Sender" FromRole="Message" />
+        <NavigationProperty Name="Recipient" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Message_Recipient" ToRole="Recipient" FromRole="Message" />
+        <NavigationProperty Name="Attachments" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Message_Attachments" ToRole="Attachments" FromRole="Message" />
+      </EntityType>
+      <EntityType Name="MessageAttachment">
+        <Key>
+          <PropertyRef Name="AttachmentId" />
+        </Key>
+        <Property Name="AttachmentId" Type="Edm.Guid" Nullable="false" />
+        <Property Name="Attachment" Type="Edm.Binary" />
+      </EntityType>
+      <EntityType Name="Order">
+        <Key>
+          <PropertyRef Name="OrderId" />
+        </Key>
+        <Property Name="OrderId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="CustomerId" Type="Edm.Int32" />
+        <Property Name="Concurrency" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.ConcurrencyInfo" />
+        <NavigationProperty Name="Login" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Order_Login" ToRole="Login" FromRole="Order" />
+        <NavigationProperty Name="Customer" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Order_Customer" ToRole="Customer" FromRole="Order" />
+      </EntityType>
+      <EntityType Name="OrderLine">
+        <Key>
+          <PropertyRef Name="OrderId" />
+          <PropertyRef Name="ProductId" />
+        </Key>
+        <Property Name="OrderLineStream" Type="Edm.Stream" Nullable="false" />
+        <Property Name="OrderId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="ProductId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="Quantity" Type="Edm.Int32" Nullable="false" />
+        <Property Name="ConcurrencyToken" Type="Edm.String" ConcurrencyMode="Fixed" />
+        <NavigationProperty Name="Order" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.OrderLine_Order" ToRole="Order" FromRole="OrderLine" />
+        <NavigationProperty Name="Product" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.OrderLine_Product" ToRole="Product" FromRole="OrderLine" />
+      </EntityType>
+      <EntityType Name="Product">
+        <Key>
+          <PropertyRef Name="ProductId" />
+        </Key>
+        <Property Name="Picture" Type="Edm.Stream" Nullable="false" />
+        <Property Name="ProductId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="Description" Type="Edm.String" />
+        <Property Name="Dimensions" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Dimensions" />
+        <Property Name="BaseConcurrency" Type="Edm.String" ConcurrencyMode="Fixed" />
+        <Property Name="ComplexConcurrency" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.ConcurrencyInfo" />
+        <Property Name="NestedComplexConcurrency" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.AuditInfo" />
+        <NavigationProperty Name="RelatedProducts" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Product_RelatedProducts" ToRole="RelatedProducts" FromRole="Product" />
+        <NavigationProperty Name="Detail" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Product_Detail" ToRole="Detail" FromRole="Product" />
+        <NavigationProperty Name="Reviews" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Product_Reviews" ToRole="Reviews" FromRole="Product" />
+        <NavigationProperty Name="Photos" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Product_Photos" ToRole="Photos" FromRole="Product" />
+      </EntityType>
+      <EntityType Name="ProductDetail">
+        <Key>
+          <PropertyRef Name="ProductId" />
+        </Key>
+        <Property Name="ProductId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="Details" Type="Edm.String" />
+        <NavigationProperty Name="Product" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.ProductDetail_Product" ToRole="Product" FromRole="ProductDetail" />
+      </EntityType>
+      <EntityType Name="ProductReview">
+        <Key>
+          <PropertyRef Name="ProductId" />
+          <PropertyRef Name="ReviewId" />
+          <PropertyRef Name="RevisionId" />
+        </Key>
+        <Property Name="ProductId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="ReviewId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="Review" Type="Edm.String" />
+        <Property Name="RevisionId" Type="Edm.String" Nullable="false" />
+        <NavigationProperty Name="Product" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.ProductReview_Product" ToRole="Product" FromRole="ProductReview" />
+      </EntityType>
+      <EntityType Name="ProductPhoto">
+        <Key>
+          <PropertyRef Name="PhotoId" />
+          <PropertyRef Name="ProductId" />
+        </Key>
+        <Property Name="ProductId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="PhotoId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="Photo" Type="Edm.Binary" />
+      </EntityType>
+      <EntityType Name="CustomerInfo" m:HasStream="true">
+        <Key>
+          <PropertyRef Name="CustomerInfoId" />
+        </Key>
+        <Property Name="CustomerInfoId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="Information" Type="Edm.String" />
+      </EntityType>
+      <EntityType Name="Computer">
+        <Key>
+          <PropertyRef Name="ComputerId" />
+        </Key>
+        <Property Name="ComputerId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="Name" Type="Edm.String" />
+        <NavigationProperty Name="ComputerDetail" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Computer_ComputerDetail" ToRole="ComputerDetail" FromRole="Computer" />
+      </EntityType>
+      <EntityType Name="ComputerDetail">
+        <Key>
+          <PropertyRef Name="ComputerDetailId" />
+        </Key>
+        <Property Name="ComputerDetailId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="Manufacturer" Type="Edm.String" m:FC_TargetPath="SyndicationAuthorEmail" m:FC_ContentKind="text" m:FC_KeepInContent="true" />
+        <Property Name="Model" Type="Edm.String" m:FC_TargetPath="SyndicationAuthorUri" m:FC_ContentKind="text" m:FC_KeepInContent="true" />
+        <Property Name="Serial" Type="Edm.String" />
+        <Property Name="SpecificationsBag" Type="Collection(Edm.String)" Nullable="false" />
+        <Property Name="PurchaseDate" Type="Edm.DateTime" Nullable="false" />
+        <Property Name="Dimensions" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Dimensions" />
+        <NavigationProperty Name="Computer" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.ComputerDetail_Computer" ToRole="Computer" FromRole="ComputerDetail" />
+      </EntityType>
+      <EntityType Name="Driver">
+        <Key>
+          <PropertyRef Name="Name" />
+        </Key>
+        <Property Name="Name" Type="Edm.String" Nullable="false" />
+        <Property Name="BirthDate" Type="Edm.DateTime" Nullable="false" />
+        <NavigationProperty Name="License" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Driver_License" ToRole="License" FromRole="Driver" />
+      </EntityType>
+      <EntityType Name="License">
+        <Key>
+          <PropertyRef Name="Name" />
+        </Key>
+        <Property Name="Name" Type="Edm.String" Nullable="false" />
+        <Property Name="LicenseNumber" Type="Edm.String" />
+        <Property Name="LicenseClass" Type="Edm.String" m:FC_TargetPath="SyndicationContributorEmail" m:FC_ContentKind="text" m:FC_KeepInContent="false" />
+        <Property Name="Restrictions" Type="Edm.String" m:FC_TargetPath="SyndicationContributorUri" m:FC_ContentKind="text" m:FC_KeepInContent="false" />
+        <Property Name="ExpirationDate" Type="Edm.DateTime" Nullable="false" />
+        <NavigationProperty Name="Driver" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.License_Driver" ToRole="Driver" FromRole="License" />
+      </EntityType>
+      <EntityType Name="MappedEntityType">
+        <Key>
+          <PropertyRef Name="Id" />
+        </Key>
+        <Property Name="Id" Type="Edm.Int32" Nullable="false" />
+        <Property Name="Href" Type="Edm.String" />
+        <Property Name="Title" Type="Edm.String" />
+        <Property Name="HrefLang" Type="Edm.String" />
+        <Property Name="Type" Type="Edm.String" />
+        <Property Name="Length" Type="Edm.Int32" Nullable="false" />
+        <Property Name="BagOfPrimitiveToLinks" Type="Collection(Edm.String)" Nullable="false" />
+        <Property Name="Logo" Type="Edm.Binary" />
+        <Property Name="BagOfDecimals" Type="Collection(Edm.Decimal)" Nullable="false" />
+        <Property Name="BagOfDoubles" Type="Collection(Edm.Double)" Nullable="false" />
+        <Property Name="BagOfSingles" Type="Collection(Edm.Single)" Nullable="false" />
+        <Property Name="BagOfBytes" Type="Collection(Edm.Byte)" Nullable="false" />
+        <Property Name="BagOfInt16s" Type="Collection(Edm.Int16)" Nullable="false" />
+        <Property Name="BagOfInt32s" Type="Collection(Edm.Int32)" Nullable="false" />
+        <Property Name="BagOfInt64s" Type="Collection(Edm.Int64)" Nullable="false" />
+        <Property Name="BagOfGuids" Type="Collection(Edm.Guid)" Nullable="false" />
+        <Property Name="BagOfDateTime" Type="Collection(Edm.DateTime)" Nullable="false" />
+        <Property Name="BagOfComplexToCategories" Type="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.ComplexToCategory)" Nullable="false" />
+        <Property Name="ComplexPhone" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone" m:FC_TargetPath="SyndicationRights" m:FC_ContentKind="text" m:FC_SourcePath="PhoneNumber" m:FC_KeepInContent="true" />
+        <Property Name="ComplexContactDetails" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails" m:FC_TargetPath="SyndicationSummary" m:FC_ContentKind="text" m:FC_SourcePath="WorkPhone/Extension" m:FC_KeepInContent="true" />
+      </EntityType>
+      <EntityType Name="Car" m:HasStream="true">
+        <Key>
+          <PropertyRef Name="VIN" />
+        </Key>
+        <Property Name="Photo" Type="Edm.Stream" Nullable="false" />
+        <Property Name="Video" Type="Edm.Stream" Nullable="false" />
+        <Property Name="VIN" Type="Edm.Int32" Nullable="false" />
+        <Property Name="Description" Type="Edm.String" />
+      </EntityType>
+      <EntityType Name="Person">
+        <Key>
+          <PropertyRef Name="PersonId" />
+        </Key>
+        <Property Name="PersonId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="Name" Type="Edm.String" />
+        <NavigationProperty Name="PersonMetadata" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Person_PersonMetadata" ToRole="PersonMetadata" FromRole="Person" />
+      </EntityType>
+      <EntityType Name="PersonMetadata">
+        <Key>
+          <PropertyRef Name="PersonMetadataId" />
+        </Key>
+        <Property Name="PersonMetadataId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="PersonId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="PropertyName" Type="Edm.String" />
+        <Property Name="PropertyValue" Type="Edm.String" />
+        <NavigationProperty Name="Person" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.PersonMetadata_Person" ToRole="Person" FromRole="PersonMetadata" />
+      </EntityType>
+      <ComplexType Name="ContactDetails">
+        <Property Name="EmailBag" Type="Collection(Edm.String)" Nullable="false" />
+        <Property Name="AlternativeNames" Type="Collection(Edm.String)" Nullable="false" />
+        <Property Name="ContactAlias" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases" />
+        <Property Name="HomePhone" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone" />
+        <Property Name="WorkPhone" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone" />
+        <Property Name="MobilePhoneBag" Type="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)" Nullable="false" />
+      </ComplexType>
+      <ComplexType Name="AuditInfo">
+        <Property Name="ModifiedDate" Type="Edm.DateTime" Nullable="false" />
+        <Property Name="ModifiedBy" Type="Edm.String" />
+        <Property Name="Concurrency" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.ConcurrencyInfo" />
+      </ComplexType>
+      <ComplexType Name="ConcurrencyInfo">
+        <Property Name="Token" Type="Edm.String" />
+        <Property Name="QueriedDateTime" Type="Edm.DateTime" />
+      </ComplexType>
+      <ComplexType Name="Dimensions">
+        <Property Name="Width" Type="Edm.Decimal" Nullable="false" />
+        <Property Name="Height" Type="Edm.Decimal" Nullable="false" />
+        <Property Name="Depth" Type="Edm.Decimal" Nullable="false" />
+      </ComplexType>
+      <ComplexType Name="ComplexToCategory">
+        <Property Name="Term" Type="Edm.String" />
+        <Property Name="Scheme" Type="Edm.String" />
+        <Property Name="Label" Type="Edm.String" />
+      </ComplexType>
+      <ComplexType Name="Phone">
+        <Property Name="PhoneNumber" Type="Edm.String" />
+        <Property Name="Extension" Type="Edm.String" />
+      </ComplexType>
+      <ComplexType Name="Aliases">
+        <Property Name="AlternativeNames" Type="Collection(Edm.String)" Nullable="false" />
+      </ComplexType>
+      <EntityType Name="AllSpatialCollectionTypes_Simple" BaseType="Microsoft.Test.OData.Services.AstoriaDefaultService.AllSpatialCollectionTypes">
+        <Property Name="ManyGeogPoint" Type="Collection(Edm.GeographyPoint)" Nullable="false" SRID="Variable" />
+        <Property Name="ManyGeogLine" Type="Collection(Edm.GeographyLineString)" Nullable="false" SRID="Variable" />
+        <Property Name="ManyGeogPolygon" Type="Collection(Edm.GeographyPolygon)" Nullable="false" SRID="Variable" />
+        <Property Name="ManyGeomPoint" Type="Collection(Edm.GeometryPoint)" Nullable="false" SRID="Variable" />
+        <Property Name="ManyGeomLine" Type="Collection(Edm.GeometryLineString)" Nullable="false" SRID="Variable" />
+        <Property Name="ManyGeomPolygon" Type="Collection(Edm.GeometryPolygon)" Nullable="false" SRID="Variable" />
+      </EntityType>
+      <EntityType Name="ProductPageView" BaseType="Microsoft.Test.OData.Services.AstoriaDefaultService.PageView">
+        <Property Name="ProductId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="ConcurrencyToken" Type="Edm.String" ConcurrencyMode="Fixed" />
+      </EntityType>
+      <EntityType Name="BackOrderLine" BaseType="Microsoft.Test.OData.Services.AstoriaDefaultService.OrderLine" />
+      <EntityType Name="BackOrderLine2" BaseType="Microsoft.Test.OData.Services.AstoriaDefaultService.BackOrderLine" />
+      <EntityType Name="DiscontinuedProduct" BaseType="Microsoft.Test.OData.Services.AstoriaDefaultService.Product">
+        <Property Name="Discontinued" Type="Edm.DateTime" Nullable="false" />
+        <Property Name="ReplacementProductId" Type="Edm.Int32" />
+        <Property Name="DiscontinuedPhone" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone" />
+        <Property Name="ChildConcurrencyToken" Type="Edm.String" ConcurrencyMode="Fixed" />
+      </EntityType>
+      <EntityType Name="Contractor" BaseType="Microsoft.Test.OData.Services.AstoriaDefaultService.Person">
+        <Property Name="ContratorCompanyId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="BillingRate" Type="Edm.Int32" Nullable="false" />
+        <Property Name="TeamContactPersonId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="JobDescription" Type="Edm.String" />
+      </EntityType>
+      <EntityType Name="Employee" BaseType="Microsoft.Test.OData.Services.AstoriaDefaultService.Person">
+        <Property Name="ManagersPersonId" Type="Edm.Int32" Nullable="false" />
+        <Property Name="Salary" Type="Edm.Int32" Nullable="false" />
+        <Property Name="Title" Type="Edm.String" />
+        <NavigationProperty Name="Manager" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.Employee_Manager" ToRole="Manager" FromRole="Employee" />
+      </EntityType>
+      <EntityType Name="SpecialEmployee" BaseType="Microsoft.Test.OData.Services.AstoriaDefaultService.Employee">
+        <Property Name="CarsVIN" Type="Edm.Int32" Nullable="false" />
+        <Property Name="Bonus" Type="Edm.Int32" Nullable="false" />
+        <Property Name="IsFullyVested" Type="Edm.Boolean" Nullable="false" />
+        <NavigationProperty Name="Car" Relationship="Microsoft.Test.OData.Services.AstoriaDefaultService.SpecialEmployee_Car" ToRole="Car" FromRole="SpecialEmployee" />
+      </EntityType>
+      <ComplexType Name="ComplexWithAllPrimitiveTypes">
+        <Property Name="Binary" Type="Edm.Binary" />
+        <Property Name="Boolean" Type="Edm.Boolean" Nullable="false" />
+        <Property Name="Byte" Type="Edm.Byte" Nullable="false" />
+        <Property Name="DateTime" Type="Edm.DateTime" Nullable="false" />
+        <Property Name="Decimal" Type="Edm.Decimal" Nullable="false" />
+        <Property Name="Double" Type="Edm.Double" Nullable="false" />
+        <Property Name="Int16" Type="Edm.Int16" Nullable="false" />
+        <Property Name="Int32" Type="Edm.Int32" Nullable="false" />
+        <Property Name="Int64" Type="Edm.Int64" Nullable="false" />
+        <Property Name="SByte" Type="Edm.SByte" Nullable="false" />
+        <Property Name="String" Type="Edm.String" />
+        <Property Name="Single" Type="Edm.Single" Nullable="false" />
+        <Property Name="GeographyPoint" Type="Edm.GeographyPoint" SRID="Variable" />
+        <Property Name="GeometryPoint" Type="Edm.GeometryPoint" SRID="Variable" />
+      </ComplexType>
+      <Association Name="Customer_Orders">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Order" Role="Orders" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer" Role="Customer" Multiplicity="*" />
+      </Association>
+      <Association Name="Customer_Logins">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Login" Role="Logins" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer" Role="Customer" Multiplicity="*" />
+      </Association>
+      <Association Name="Customer_Husband">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer" Role="Husband" Multiplicity="0..1" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer" Role="Customer" Multiplicity="*" />
+      </Association>
+      <Association Name="Customer_Wife">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer" Role="Wife" Multiplicity="0..1" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer" Role="Customer" Multiplicity="*" />
+      </Association>
+      <Association Name="Customer_Info">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.CustomerInfo" Role="Info" Multiplicity="0..1" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer" Role="Customer" Multiplicity="*" />
+      </Association>
+      <Association Name="Login_Customer">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Login" Role="Login" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer" Role="Customer" Multiplicity="0..1" />
+      </Association>
+      <Association Name="Login_LastLogin">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Login" Role="Login" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.LastLogin" Role="LastLogin" Multiplicity="0..1" />
+      </Association>
+      <Association Name="Login_SentMessages">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Message" Role="SentMessages" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Login" Role="Login" Multiplicity="*" />
+      </Association>
+      <Association Name="Login_ReceivedMessages">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Message" Role="ReceivedMessages" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Login" Role="Login" Multiplicity="*" />
+      </Association>
+      <Association Name="Login_Orders">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Order" Role="Orders" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Login" Role="Login" Multiplicity="*" />
+      </Association>
+      <Association Name="RSAToken_Login">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.RSAToken" Role="RSAToken" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Login" Role="Login" Multiplicity="0..1" />
+      </Association>
+      <Association Name="PageView_Login">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.PageView" Role="PageView" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Login" Role="Login" Multiplicity="0..1" />
+      </Association>
+      <Association Name="LastLogin_Login">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Login" Role="Login" Multiplicity="0..1" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.LastLogin" Role="LastLogin" Multiplicity="*" />
+      </Association>
+      <Association Name="Message_Sender">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Message" Role="Message" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Login" Role="Sender" Multiplicity="0..1" />
+      </Association>
+      <Association Name="Message_Recipient">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Message" Role="Message" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Login" Role="Recipient" Multiplicity="0..1" />
+      </Association>
+      <Association Name="Message_Attachments">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.MessageAttachment" Role="Attachments" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Message" Role="Message" Multiplicity="*" />
+      </Association>
+      <Association Name="Order_Login">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Order" Role="Order" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Login" Role="Login" Multiplicity="0..1" />
+      </Association>
+      <Association Name="Order_Customer">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Order" Role="Order" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer" Role="Customer" Multiplicity="0..1" />
+      </Association>
+      <Association Name="OrderLine_Order">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.OrderLine" Role="OrderLine" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Order" Role="Order" Multiplicity="0..1" />
+      </Association>
+      <Association Name="OrderLine_Product">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Product" Role="Product" Multiplicity="0..1" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.OrderLine" Role="OrderLine" Multiplicity="*" />
+      </Association>
+      <Association Name="Product_RelatedProducts">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Product" Role="RelatedProducts" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Product" Role="Product" Multiplicity="*" />
+      </Association>
+      <Association Name="Product_Detail">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.ProductDetail" Role="Detail" Multiplicity="0..1" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Product" Role="Product" Multiplicity="*" />
+      </Association>
+      <Association Name="Product_Reviews">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.ProductReview" Role="Reviews" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Product" Role="Product" Multiplicity="*" />
+      </Association>
+      <Association Name="Product_Photos">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.ProductPhoto" Role="Photos" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Product" Role="Product" Multiplicity="*" />
+      </Association>
+      <Association Name="ProductDetail_Product">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.ProductDetail" Role="ProductDetail" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Product" Role="Product" Multiplicity="0..1" />
+      </Association>
+      <Association Name="ProductReview_Product">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.ProductReview" Role="ProductReview" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Product" Role="Product" Multiplicity="0..1" />
+      </Association>
+      <Association Name="Computer_ComputerDetail">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.ComputerDetail" Role="ComputerDetail" Multiplicity="0..1" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Computer" Role="Computer" Multiplicity="*" />
+      </Association>
+      <Association Name="ComputerDetail_Computer">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.ComputerDetail" Role="ComputerDetail" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Computer" Role="Computer" Multiplicity="0..1" />
+      </Association>
+      <Association Name="Driver_License">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.License" Role="License" Multiplicity="0..1" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Driver" Role="Driver" Multiplicity="*" />
+      </Association>
+      <Association Name="License_Driver">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.License" Role="License" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Driver" Role="Driver" Multiplicity="0..1" />
+      </Association>
+      <Association Name="Person_PersonMetadata">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.PersonMetadata" Role="PersonMetadata" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Person" Role="Person" Multiplicity="*" />
+      </Association>
+      <Association Name="PersonMetadata_Person">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.PersonMetadata" Role="PersonMetadata" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Person" Role="Person" Multiplicity="0..1" />
+      </Association>
+      <Association Name="Employee_Manager">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Employee" Role="Manager" Multiplicity="0..1" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Employee" Role="Employee" Multiplicity="*" />
+      </Association>
+      <Association Name="SpecialEmployee_Car">
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.SpecialEmployee" Role="SpecialEmployee" Multiplicity="*" />
+        <End Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Car" Role="Car" Multiplicity="0..1" />
+      </Association>
+      <EntityContainer Name="DefaultContainer" m:IsDefaultEntityContainer="true">
+        <EntitySet Name="AllGeoTypesSet" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.AllSpatialTypes" />
+        <EntitySet Name="AllGeoCollectionTypesSet" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.AllSpatialCollectionTypes" />
+        <EntitySet Name="Customer" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer" />
+        <EntitySet Name="Login" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.Login" />
+        <EntitySet Name="RSAToken" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.RSAToken" />
+        <EntitySet Name="PageView" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.PageView" />
+        <EntitySet Name="LastLogin" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.LastLogin" />
+        <EntitySet Name="Message" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.Message" />
+        <EntitySet Name="MessageAttachment" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.MessageAttachment" />
+        <EntitySet Name="Order" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.Order" />
+        <EntitySet Name="OrderLine" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.OrderLine" />
+        <EntitySet Name="Product" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.Product" />
+        <EntitySet Name="ProductDetail" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.ProductDetail" />
+        <EntitySet Name="ProductReview" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.ProductReview" />
+        <EntitySet Name="ProductPhoto" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.ProductPhoto" />
+        <EntitySet Name="CustomerInfo" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.CustomerInfo" />
+        <EntitySet Name="Computer" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.Computer" />
+        <EntitySet Name="ComputerDetail" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.ComputerDetail" />
+        <EntitySet Name="Driver" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.Driver" />
+        <EntitySet Name="License" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.License" />
+        <EntitySet Name="MappedEntityType" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.MappedEntityType" />
+        <EntitySet Name="Car" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.Car" />
+        <EntitySet Name="Person" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.Person" />
+        <EntitySet Name="PersonMetadata" EntityType="Microsoft.Test.OData.Services.AstoriaDefaultService.PersonMetadata" />
+        <FunctionImport Name="GetPrimitiveString" ReturnType="Edm.String" m:HttpMethod="GET" />
+        <FunctionImport Name="GetSpecificCustomer" ReturnType="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Customer)" EntitySet="Customer" m:HttpMethod="GET">
+          <Parameter Name="Name" Type="Edm.String" />
+        </FunctionImport>
+        <FunctionImport Name="GetCustomerCount" ReturnType="Edm.Int32" m:HttpMethod="GET" />
+        <FunctionImport Name="GetArgumentPlusOne" ReturnType="Edm.Int32" m:HttpMethod="GET">
+          <Parameter Name="arg1" Type="Edm.Int32" Nullable="false" />
+        </FunctionImport>
+        <FunctionImport Name="EntityProjectionReturnsCollectionOfComplexTypes" ReturnType="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails)" m:HttpMethod="GET" />
+        <FunctionImport Name="ResetDataSource" m:HttpMethod="POST" />
+        <FunctionImport Name="InStreamErrorGetCustomer" ReturnType="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Customer)" EntitySet="Customer" m:HttpMethod="GET" />
+        <FunctionImport Name="IncreaseSalaries" IsBindable="true" m:IsAlwaysBindable="true">
+          <Parameter Name="employees" Type="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Employee)" />
+          <Parameter Name="n" Type="Edm.Int32" Nullable="false" />
+        </FunctionImport>
+        <FunctionImport Name="Sack" IsBindable="true" m:IsAlwaysBindable="true">
+          <Parameter Name="employee" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Employee" />
+        </FunctionImport>
+        <FunctionImport Name="GetComputer" ReturnType="Microsoft.Test.OData.Services.AstoriaDefaultService.Computer" IsBindable="true" EntitySet="Computer" m:IsAlwaysBindable="true">
+          <Parameter Name="computer" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Computer" />
+        </FunctionImport>
+        <FunctionImport Name="ChangeProductDimensions" IsBindable="true" m:IsAlwaysBindable="true">
+          <Parameter Name="product" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Product" />
+          <Parameter Name="dimensions" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.Dimensions" />
+        </FunctionImport>
+        <FunctionImport Name="ResetComputerDetailsSpecifications" IsBindable="true" m:IsAlwaysBindable="true">
+          <Parameter Name="computerDetail" Type="Microsoft.Test.OData.Services.AstoriaDefaultService.ComputerDetail" />
+          <Parameter Name="specifications" Type="Collection(Edm.String)" Nullable="false" />
+          <Parameter Name="purchaseTime" Type="Edm.DateTime" Nullable="false" />
+        </FunctionImport>
+        <AssociationSet Name="Customer_Orders" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer_Orders">
+          <End Role="Customer" EntitySet="Customer" />
+          <End Role="Orders" EntitySet="Order" />
+        </AssociationSet>
+        <AssociationSet Name="Customer_Logins" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer_Logins">
+          <End Role="Customer" EntitySet="Customer" />
+          <End Role="Logins" EntitySet="Login" />
+        </AssociationSet>
+        <AssociationSet Name="Customer_Husband" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer_Husband">
+          <End Role="Customer" EntitySet="Customer" />
+          <End Role="Husband" EntitySet="Customer" />
+        </AssociationSet>
+        <AssociationSet Name="Customer_Wife" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer_Wife">
+          <End Role="Customer" EntitySet="Customer" />
+          <End Role="Wife" EntitySet="Customer" />
+        </AssociationSet>
+        <AssociationSet Name="Customer_Info" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer_Info">
+          <End Role="Customer" EntitySet="Customer" />
+          <End Role="Info" EntitySet="CustomerInfo" />
+        </AssociationSet>
+        <AssociationSet Name="Login_Customer" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Login_Customer">
+          <End Role="Login" EntitySet="Login" />
+          <End Role="Customer" EntitySet="Customer" />
+        </AssociationSet>
+        <AssociationSet Name="Login_LastLogin" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Login_LastLogin">
+          <End Role="Login" EntitySet="Login" />
+          <End Role="LastLogin" EntitySet="LastLogin" />
+        </AssociationSet>
+        <AssociationSet Name="Login_SentMessages" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Login_SentMessages">
+          <End Role="Login" EntitySet="Login" />
+          <End Role="SentMessages" EntitySet="Message" />
+        </AssociationSet>
+        <AssociationSet Name="Login_ReceivedMessages" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Login_ReceivedMessages">
+          <End Role="Login" EntitySet="Login" />
+          <End Role="ReceivedMessages" EntitySet="Message" />
+        </AssociationSet>
+        <AssociationSet Name="Login_Orders" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Login_Orders">
+          <End Role="Login" EntitySet="Login" />
+          <End Role="Orders" EntitySet="Order" />
+        </AssociationSet>
+        <AssociationSet Name="RSAToken_Login" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.RSAToken_Login">
+          <End Role="RSAToken" EntitySet="RSAToken" />
+          <End Role="Login" EntitySet="Login" />
+        </AssociationSet>
+        <AssociationSet Name="PageView_Login" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.PageView_Login">
+          <End Role="PageView" EntitySet="PageView" />
+          <End Role="Login" EntitySet="Login" />
+        </AssociationSet>
+        <AssociationSet Name="LastLogin_Login" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.LastLogin_Login">
+          <End Role="LastLogin" EntitySet="LastLogin" />
+          <End Role="Login" EntitySet="Login" />
+        </AssociationSet>
+        <AssociationSet Name="Message_Sender" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Message_Sender">
+          <End Role="Message" EntitySet="Message" />
+          <End Role="Sender" EntitySet="Login" />
+        </AssociationSet>
+        <AssociationSet Name="Message_Recipient" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Message_Recipient">
+          <End Role="Message" EntitySet="Message" />
+          <End Role="Recipient" EntitySet="Login" />
+        </AssociationSet>
+        <AssociationSet Name="Message_Attachments" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Message_Attachments">
+          <End Role="Message" EntitySet="Message" />
+          <End Role="Attachments" EntitySet="MessageAttachment" />
+        </AssociationSet>
+        <AssociationSet Name="Order_Login" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Order_Login">
+          <End Role="Order" EntitySet="Order" />
+          <End Role="Login" EntitySet="Login" />
+        </AssociationSet>
+        <AssociationSet Name="Order_Customer" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Order_Customer">
+          <End Role="Order" EntitySet="Order" />
+          <End Role="Customer" EntitySet="Customer" />
+        </AssociationSet>
+        <AssociationSet Name="OrderLine_Order" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.OrderLine_Order">
+          <End Role="OrderLine" EntitySet="OrderLine" />
+          <End Role="Order" EntitySet="Order" />
+        </AssociationSet>
+        <AssociationSet Name="OrderLine_Product" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.OrderLine_Product">
+          <End Role="OrderLine" EntitySet="OrderLine" />
+          <End Role="Product" EntitySet="Product" />
+        </AssociationSet>
+        <AssociationSet Name="Product_RelatedProducts" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Product_RelatedProducts">
+          <End Role="Product" EntitySet="Product" />
+          <End Role="RelatedProducts" EntitySet="Product" />
+        </AssociationSet>
+        <AssociationSet Name="Product_Detail" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Product_Detail">
+          <End Role="Product" EntitySet="Product" />
+          <End Role="Detail" EntitySet="ProductDetail" />
+        </AssociationSet>
+        <AssociationSet Name="Product_Reviews" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Product_Reviews">
+          <End Role="Product" EntitySet="Product" />
+          <End Role="Reviews" EntitySet="ProductReview" />
+        </AssociationSet>
+        <AssociationSet Name="Product_Photos" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Product_Photos">
+          <End Role="Product" EntitySet="Product" />
+          <End Role="Photos" EntitySet="ProductPhoto" />
+        </AssociationSet>
+        <AssociationSet Name="ProductDetail_Product" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.ProductDetail_Product">
+          <End Role="ProductDetail" EntitySet="ProductDetail" />
+          <End Role="Product" EntitySet="Product" />
+        </AssociationSet>
+        <AssociationSet Name="ProductReview_Product" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.ProductReview_Product">
+          <End Role="ProductReview" EntitySet="ProductReview" />
+          <End Role="Product" EntitySet="Product" />
+        </AssociationSet>
+        <AssociationSet Name="Computer_ComputerDetail" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Computer_ComputerDetail">
+          <End Role="Computer" EntitySet="Computer" />
+          <End Role="ComputerDetail" EntitySet="ComputerDetail" />
+        </AssociationSet>
+        <AssociationSet Name="ComputerDetail_Computer" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.ComputerDetail_Computer">
+          <End Role="ComputerDetail" EntitySet="ComputerDetail" />
+          <End Role="Computer" EntitySet="Computer" />
+        </AssociationSet>
+        <AssociationSet Name="Driver_License" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Driver_License">
+          <End Role="Driver" EntitySet="Driver" />
+          <End Role="License" EntitySet="License" />
+        </AssociationSet>
+        <AssociationSet Name="License_Driver" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.License_Driver">
+          <End Role="License" EntitySet="License" />
+          <End Role="Driver" EntitySet="Driver" />
+        </AssociationSet>
+        <AssociationSet Name="Employee_Manager" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Employee_Manager">
+          <End Role="Employee" EntitySet="Person" />
+          <End Role="Manager" EntitySet="Person" />
+        </AssociationSet>
+        <AssociationSet Name="SpecialEmployee_Car" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.SpecialEmployee_Car">
+          <End Role="SpecialEmployee" EntitySet="Person" />
+          <End Role="Car" EntitySet="Car" />
+        </AssociationSet>
+        <AssociationSet Name="Person_PersonMetadata" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.Person_PersonMetadata">
+          <End Role="Person" EntitySet="Person" />
+          <End Role="PersonMetadata" EntitySet="PersonMetadata" />
+        </AssociationSet>
+        <AssociationSet Name="PersonMetadata_Person" Association="Microsoft.Test.OData.Services.AstoriaDefaultService.PersonMetadata_Person">
+          <End Role="PersonMetadata" EntitySet="PersonMetadata" />
+          <End Role="Person" EntitySet="Person" />
+        </AssociationSet>
+      </EntityContainer>
+    </Schema>
+  </edmx:DataServices>
+</edmx:Edmx>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/ext/pojogen-maven-plugin/src/it/v3Sample/verify.groovy
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/it/v3Sample/verify.groovy b/ext/pojogen-maven-plugin/src/it/v3Sample/verify.groovy
new file mode 100644
index 0000000..9b74ad2
--- /dev/null
+++ b/ext/pojogen-maven-plugin/src/it/v3Sample/verify.groovy
@@ -0,0 +1,20 @@
+/**
+ * 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.
+ */
+File basepkg = new File( basedir, "target/generated-sources/ojc-plugin/org/apache/olingo/fit/proxy/v3" );
+assert basepkg.isDirectory() && basepkg.listFiles().length>0;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/288bbb72/ext/pojogen-maven-plugin/src/it/v4Sample/pom.xml
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/it/v4Sample/pom.xml b/ext/pojogen-maven-plugin/src/it/v4Sample/pom.xml
new file mode 100644
index 0000000..b918061
--- /dev/null
+++ b/ext/pojogen-maven-plugin/src/it/v4Sample/pom.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>pojogen-maven-plugin-v4test</artifactId>
+  <groupId>org.apache.olingo</groupId>
+  <version>@project.version@</version>
+  <name>${project.artifactId}</name>
+  <description>A simple IT verifying the basic use case of pojogen-man-plugin.</description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+  
+  <dependencies>
+    <dependency>
+      <artifactId>pojogen-maven-plugin</artifactId>
+      <groupId>org.apache.olingo</groupId>
+      <version>@project.version@</version>
+      <scope>runtime</scope>
+    </dependency>
+    
+    <dependency>
+      <artifactId>olingo-client-proxy</artifactId>
+      <groupId>org.apache.olingo</groupId>
+      <version>@project.version@</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+        <version>1.8</version>
+        <executions>
+          <execution>
+            <phase>process-sources</phase>
+            <goals>
+              <goal>add-source</goal>
+            </goals>
+            <configuration>
+              <sources>
+                <source>${project.build.directory}/generated-sources</source>
+              </sources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      
+      <plugin>
+        <groupId>@project.groupId@</groupId>
+        <artifactId>pojogen-maven-plugin</artifactId>
+        <version>@project.version@</version>
+        <executions>
+          <execution>
+            <configuration>
+              <outputDirectory>${project.build.directory}/generated-sources</outputDirectory>
+              <localEdm>${project.basedir}/src/test/resources/metadata.xml</localEdm>
+              <basePackage>org.apache.olingo.fit.proxy.v4.staticservice</basePackage>
+            </configuration>
+            <id>v4pojoGen</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>v4pojoGen</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>