You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2025/03/01 13:37:29 UTC

(olingo-odata2) branch master updated: [OLINGO-1636] Upgrade Olingo ODataV2 to support JDK 17

This is an automated email from the ASF dual-hosted git repository.

mibo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/olingo-odata2.git


The following commit(s) were added to refs/heads/master by this push:
     new 8a63b95c [OLINGO-1636] Upgrade Olingo ODataV2 to support JDK 17
8a63b95c is described below

commit 8a63b95c6c13d3892aa265477f873696c635bed6
Author: Iliyan Velichkov <ve...@gmail.com>
AuthorDate: Wed Dec 13 09:54:19 2023 +0200

    [OLINGO-1636] Upgrade Olingo ODataV2 to support JDK 17
    
    add build.yml
    
    add workflows
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    change java from 1.6 to 1.8
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    build with java 8
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    skip tests in workflows
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    fix compilation
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    set version 3.0.0-SNAPSHOT
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    enable tests execution
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    add release workflow
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    update release.yml
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    version set to 3.0.1 for release
    
    version set to 3.0.2-SNAPSHOT for development
    
    deploy jars
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    add distributionManagement
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    change job name
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    version set to 3.0.2 for release
    
    version set to 3.0.3-SNAPSHOT for development
    
    make olingo compatible with Spring Boot 3
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    use java 8
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    use java 11
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    use java 17
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    javax.ws.rs -> jakarta.ws.rs
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    adapt tests
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    more test adaptations
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    adapt test
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    fix docs
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    adapt tests
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    more adaptations
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
    
    [OLINGO-1636] adapts tests
    
    Signed-off-by: Iliyan Velichkov <ve...@gmail.com>
---
 .github/workflows/build.yml                        |   28 +
 .github/workflows/maven.yml                        |    4 +-
 .github/workflows/pull-request.yml                 |   33 +
 .github/workflows/release.yml                      |  106 +
 .gitignore                                         |    1 +
 .../annotation-processor-api/pom.xml               |    2 +-
 .../annotation-processor-core/pom.xml              |    2 +-
 .../annotation-processor-ref/pom.xml               |    4 +-
 .../processor/ref/model/ResourceHelper.java        |  136 +-
 .../processor/ref/AbstractRefXmlTest.java          |  118 +-
 .../annotation-processor-web/pom.xml               |   14 +-
 .../src/main/resources/META-INF/LICENSE            |    4 +-
 .../src/main/webapp/WEB-INF/web.xml                |    2 +-
 odata2-annotation-processor/pom.xml                |    2 +-
 odata2-dist/janos/pom.xml                          |    2 +-
 odata2-dist/janos/src/main/resources/LICENSE       |    4 +-
 odata2-dist/javadoc/pom.xml                        |    2 +-
 odata2-dist/jpa/pom.xml                            |    8 +-
 odata2-dist/jpa/src/main/assembly/jpa-assembly.xml |    2 +-
 odata2-dist/jpa/src/main/resources/LICENSE         |    6 +-
 odata2-dist/lib/pom.xml                            |    2 +-
 odata2-dist/lib/src/main/resources/LICENSE         |    4 +-
 odata2-dist/pom.xml                                |    2 +-
 odata2-dist/ref/pom.xml                            |    3 +-
 odata2-dist/ref/src/main/resources/LICENSE         |    6 +-
 odata2-jpa-processor/jpa-api/pom.xml               |   21 +-
 .../odata2/jpa/processor/api/ODataJPAContext.java  |    8 +-
 .../jpa/processor/api/ODataJPAProcessor.java       |    2 +-
 .../api/ODataJPAQueryExtensionEntityListener.java  |   28 +-
 .../jpa/processor/api/ODataJPAServiceFactory.java  |    4 +-
 .../api/ODataJPATombstoneEntityListener.java       |   12 +-
 .../jpa/processor/api/model/JPAEdmBaseView.java    |    4 +-
 .../processor/api/model/JPAEdmComplexTypeView.java |    4 +-
 .../processor/api/model/JPAEdmEntityTypeView.java  |  101 +-
 .../processor/api/model/JPAEdmPropertyView.java    |    8 +-
 .../api/model/mapping/JPAAttributeMapType.java     |  285 ++-
 .../api/model/mapping/JPAEdmMappingModel.java      |   90 +-
 .../model/mapping/JPAEdmMappingModelFactory.java   |  132 +-
 .../model/mapping/JPAEmbeddableTypeMapType.java    |  234 ++-
 .../model/mapping/JPAEmbeddableTypesMapType.java   |  105 +-
 .../api/model/mapping/JPAEntityTypeMapType.java    |  345 ++--
 .../api/model/mapping/JPAEntityTypesMapType.java   |  105 +-
 .../model/mapping/JPAPersistenceUnitMapType.java   |  224 +--
 .../api/model/mapping/JPARelationshipMapType.java  |  235 ++-
 .../processor/api/model/mapping/package-info.java  |   38 +-
 odata2-jpa-processor/jpa-core/pom.xml              |   22 +-
 .../jpa/processor/core/ODataJPAContextImpl.java    |    4 +-
 .../core/ODataJPATransactionLocalDefault.java      |    4 +-
 .../jpa/processor/core/access/data/JPAEntity.java  |  930 +++++----
 .../jpa/processor/core/access/data/JPALink.java    |    2 +-
 .../jpa/processor/core/access/data/JPAPage.java    |    2 +-
 .../core/access/data/JPAProcessorImpl.java         |    6 +-
 .../core/access/data/JPAQueryBuilder.java          |   10 +-
 .../access/model/JPAEdmMappingModelService.java    |  413 ++--
 .../core/access/model/JPAEdmNameBuilder.java       |    8 +-
 .../core/access/model/JPATypeConverter.java        |   12 +-
 .../processor/core/model/JPAEdmAssociationEnd.java |   10 +-
 .../processor/core/model/JPAEdmBaseViewImpl.java   |    2 +-
 .../processor/core/model/JPAEdmComplexType.java    |    4 +-
 .../jpa/processor/core/model/JPAEdmEntityType.java |   24 +-
 .../jpa/processor/core/model/JPAEdmFacets.java     |    4 +-
 .../jpa/processor/core/model/JPAEdmModel.java      |    2 +-
 .../jpa/processor/core/model/JPAEdmProperty.java   |   22 +-
 .../model/JPAEdmReferentialConstraintRole.java     |    2 +-
 .../processor/core/ODataJPAContextImplTest.java    |    4 +-
 .../core/ODataJPADefaultProcessorTest.java         | 1146 ++++++-----
 .../core/ODataJPAResponseBuilderTest.java          | 1397 ++++++-------
 .../data/JPAEntityParserForStaticMethodTest.java   |  578 +++---
 .../core/access/data/JPAEntityParserTest.java      | 1268 ++++++------
 .../core/access/data/JPAPageBuilderTest.java       |   10 +-
 .../core/access/data/JPAProcessorImplTest.java     |   18 +-
 .../core/access/data/JPAQueryBuilderTest.java      |    4 +-
 .../model/JPAEdmMappingModelServiceTest.java       |  378 ++--
 .../core/access/model/JPATypeConverterTest.java    |    8 +-
 .../core/jpql/JPQLBuilderFactoryTest.java          |  649 +++---
 .../processor/core/mock/ODataJPAContextMock.java   |  191 +-
 .../core/mock/ODataJPAServiceFactoryMock.java      |   60 +-
 .../processor/core/mock/OnJPAWriteContentMock.java |   65 +-
 .../mock/data/EntityWithXmlAdapterOnProperty.java  |    2 +-
 .../jpa/processor/core/mock/data/JPATypeMock.java  |    2 +-
 .../jpa/processor/core/mock/data/XmlAdapter.java   |   47 +-
 .../core/mock/model/JPAAttributeMock.java          |    6 +-
 .../core/mock/model/JPAEmbeddableMock.java         |   18 +-
 .../core/mock/model/JPAEmbeddableTypeMock.java     |   18 +-
 .../core/mock/model/JPAEntityTypeMock.java         |   24 +-
 .../core/mock/model/JPAJavaMemberMock.java         |    2 +-
 .../core/mock/model/JPAManagedTypeMock.java        |   18 +-
 .../core/mock/model/JPAMetaModelMock.java          |    8 +-
 .../core/mock/model/JPAPluralAttributeMock.java    |   12 +-
 .../core/mock/model/JPASingularAttributeMock.java  |   10 +-
 .../core/model/JPAEdmAssociationEndTest.java       |    2 +-
 .../core/model/JPAEdmAssociationTest.java          |    6 +-
 .../core/model/JPAEdmBaseViewImplTest.java         |    2 +-
 .../core/model/JPAEdmComplexTypeTest.java          |    6 +-
 .../core/model/JPAEdmEntityContainerTest.java      |    6 +-
 .../processor/core/model/JPAEdmEntitySetTest.java  |    6 +-
 .../processor/core/model/JPAEdmEntityTypeTest.java |    6 +-
 .../jpa/processor/core/model/JPAEdmKeyTest.java    |    2 +-
 .../jpa/processor/core/model/JPAEdmModelTest.java  |    6 +-
 .../core/model/JPAEdmNavigationPropertyTest.java   |    8 +-
 .../processor/core/model/JPAEdmPropertyTest.java   |   22 +-
 .../model/JPAEdmReferentialConstraintRoleTest.java |    6 +-
 .../model/JPAEdmReferentialConstraintTest.java     |    6 +-
 .../jpa/processor/core/model/JPAEdmSchemaTest.java |    2 +-
 .../processor/core/model/JPAEdmTestModelView.java  |    8 +-
 odata2-jpa-processor/jpa-ref/pom.xml               |    8 +-
 .../ref/converter/BlobToByteConverter.java         |    4 +-
 .../ref/converter/ClobToStringConverter.java       |    4 +-
 .../jpa/processor/ref/converter/UUIDConverter.java |    4 +-
 .../ref/factory/JPAEntityManagerFactory.java       |    4 +-
 .../ref/listeners/CustomerQueryExtension.java      |    4 +-
 .../listeners/SalesOrderItemTombstoneListener.java |    4 +-
 .../ref/listeners/SalesOrderTombstoneListener.java |    6 +-
 .../odata2/jpa/processor/ref/model/Address.java    |    4 +-
 .../odata2/jpa/processor/ref/model/Category.java   |   12 +-
 .../odata2/jpa/processor/ref/model/Customer.java   |   24 +-
 .../jpa/processor/ref/model/CustomerBase.java      |    6 +-
 .../odata2/jpa/processor/ref/model/Material.java   |   20 +-
 .../odata2/jpa/processor/ref/model/Note.java       |   22 +-
 .../jpa/processor/ref/model/SalesOrderHeader.java  |   24 +-
 .../jpa/processor/ref/model/SalesOrderItem.java    |   16 +-
 .../jpa/processor/ref/model/SalesOrderItemKey.java |    4 +-
 .../odata2/jpa/processor/ref/model/SampleGuid.java |   12 +-
 .../odata2/jpa/processor/ref/model/Store.java      |   12 +-
 .../src/main/resources/META-INF/persistence.xml    |    8 +-
 odata2-jpa-processor/jpa-web/pom.xml               |   18 +-
 .../processor/ref/extension/OnDBWriteContent.java  |   63 +-
 .../ref/extension/SalesOrderHeaderProcessor.java   |    6 +-
 .../jpa/processor/ref/util/DataGenerator.java      |    4 +-
 .../jpa-web/src/main/resources/META-INF/LICENSE    |    6 +-
 .../jpa-web/src/main/webapp/WEB-INF/web.xml        |    2 +-
 .../jpa-web/src/main/webapp/index.jsp              |    8 +-
 odata2-jpa-processor/pom.xml                       |    2 +-
 odata2-lib/odata-annotation/pom.xml                |    2 +-
 odata2-lib/odata-api/pom.xml                       |    2 +-
 .../org/apache/olingo/odata2/api/package-info.java |    4 +-
 odata2-lib/odata-client-api/pom.xml                |    3 +-
 odata2-lib/odata-client-core/pom.xml               |    4 +-
 .../core/ep/deserializer/XmlEntryDeserializer.java | 1045 +++++-----
 .../ep/deserializer/XmlPropertyDeserializer.java   |  310 ++-
 .../client/core/ep/JSON_XMLErrorConsumerTest.java  |   92 +-
 .../JsonErrorDocumentDeserializerTest.java         |  403 ++--
 .../core/ep/deserializer/XmlErrorDocumentTest.java |  434 ++--
 odata2-lib/odata-core/pom.xml                      |  115 +-
 .../olingo/odata2/core/debug/DebugInfoServer.java  |    2 +-
 .../core/debug/ODataDebugResponseWrapper.java      |    2 +-
 .../ep/consumer/AtomServiceDocumentConsumer.java   |  483 +++--
 .../org/apache/olingo/odata2/core/rest/MERGE.java  |    2 +-
 .../odata2/core/rest/ODataExceptionMapperImpl.java |   24 +-
 .../odata2/core/rest/ODataExceptionWrapper.java    |   10 +-
 .../odata2/core/rest/ODataRedirectLocator.java     |   14 +-
 .../olingo/odata2/core/rest/ODataRootLocator.java  |   24 +-
 .../olingo/odata2/core/rest/ODataSubLocator.java   |  345 ++--
 .../org/apache/olingo/odata2/core/rest/PATCH.java  |    2 +-
 .../apache/olingo/odata2/core/rest/RestUtil.java   |   28 +-
 .../odata2/core/rest/SubLocatorParameter.java      |   22 +-
 .../odata2/core/rest/app/ODataApplication.java     |   14 +-
 .../odata2/core/servlet/ODataExceptionWrapper.java |    2 +-
 .../olingo/odata2/core/servlet/ODataServlet.java   |  748 +++----
 .../olingo/odata2/core/servlet/RestUtil.java       |    2 +-
 .../core/uri/expression/FilterParserImpl.java      | 1840 +++++++++--------
 .../apache/olingo/odata2/core/DispatcherTest.java  |  808 ++++----
 .../odata2/core/ODataExceptionWrapperTest.java     |    6 +-
 .../core/ODataRequestHandlerValidationTest.java    | 1376 +++++++------
 .../olingo/odata2/core/batch/BatchHandlerTest.java |  404 ++--
 .../odata2/core/batch/BatchRequestParserTest.java  | 2070 ++++++++------------
 .../odata2/core/batch/BatchResponseParserTest.java |  794 +++-----
 .../odata2/core/batch/BatchResponseTest.java       |  456 ++---
 .../odata2/core/commons/ContentTypeTest.java       |    2 +-
 .../olingo/odata2/core/commons/XmlHelperTest.java  |  338 ++--
 .../core/debug/ODataDebugResponseWrapperTest.java  |    2 +-
 .../odata2/core/ep/ProviderFacadeImplTest.java     |  796 ++++----
 .../consumer/AtomServiceDocumentConsumerTest.java  |  519 ++---
 .../ep/consumer/JsonErrorDocumentConsumerTest.java |  402 ++--
 .../consumer/JsonServiceDocumentConsumerTest.java  |  110 +-
 .../ep/consumer/ServiceDocumentConsumerTest.java   |  169 +-
 .../ep/consumer/XmlErrorDocumentConsumerTest.java  |  433 ++--
 .../core/rest/ODataExceptionMapperImplTest.java    |   16 +-
 .../odata2/core/servlet/ODataServletTest.java      |  658 ++++---
 .../olingo/odata2/core/servlet/RestUtilTest.java   |    2 +-
 .../core/uri/expression/TestAbapCompatibility.java | 1140 ++++++-----
 odata2-lib/odata-fit/pom.xml                       |   65 +-
 .../olingo/odata2/fit/basic/AbstractBasicTest.java |    2 +-
 .../odata2/fit/basic/AcceptHeaderTypeTest.java     |    2 +-
 .../olingo/odata2/fit/basic/BasicHttpTest.java     |  545 +++---
 .../basic/ContentNegotiationDollarFormatTest.java  |    4 +-
 .../olingo/odata2/fit/basic/ContextTest.java       |    6 +-
 .../olingo/odata2/fit/basic/DebugDisabledTest.java |    2 +-
 .../olingo/odata2/fit/basic/ErrorResponseTest.java |    2 +-
 .../olingo/odata2/fit/basic/FitLoadTest.java       |    4 +-
 .../fit/basic/HttpExceptionResponseTest.java       |  196 +-
 .../odata2/fit/basic/LanguageNegotiationTest.java  |  157 +-
 .../olingo/odata2/fit/basic/MetadataTest.java      |    2 +-
 .../odata2/fit/basic/ServiceResolutionTest.java    |  560 +++---
 .../olingo/odata2/fit/basic/UrlRewriteTest.java    |  286 +--
 .../misc/CxfCacheUriInfoIssueService1Factory.java  |    2 +-
 .../misc/CxfCacheUriInfoIssueService2Factory.java  |    2 +-
 .../odata2/fit/misc/CxfCacheUriInfoIssueTest.java  |    2 +-
 .../odata2/fit/misc/ODataApplicationTest.java      |    2 +-
 odata2-lib/odata-ref/pom.xml                       |   15 +-
 .../apache/olingo/odata2/ref/model/Employee.java   |  336 ++--
 .../org/apache/olingo/odata2/ref/model/Photo.java  |  261 ++-
 odata2-lib/odata-testutil/pom.xml                  |   25 +-
 .../odata2/testutil/helper/LocaleAsserter.java     |   16 +
 .../SampleClassForInvalidMessageReferences.java    |   56 +-
 .../olingo/odata2/testutil/server/TestServer.java  |  274 ++-
 odata2-lib/odata-web/pom.xml                       |   10 +-
 .../odata-web/src/main/resources/META-INF/LICENSE  |    4 +-
 .../odata-web/src/main/webapp/WEB-INF/web.xml      |    2 +-
 odata2-lib/pom.xml                                 |    2 +-
 odata2-sample/cars-annotation-archetype/pom.xml    |    4 +-
 .../src/main/resources/archetype-resources/pom.xml |   17 +-
 .../src/main/webapp/WEB-INF/web.xml                |    2 +-
 odata2-sample/cars-jpa-archetype/pom.xml           |    2 +-
 .../src/main/resources/archetype-resources/pom.xml |    7 -
 .../src/main/java/model/Address.java               |    4 +-
 .../src/main/java/model/Car.java                   |   16 +-
 .../src/main/java/model/Driver.java                |   14 +-
 .../src/main/java/model/Key.java                   |    4 +-
 .../src/main/java/model/Manufacturer.java          |   16 +-
 .../java/service/ODataJPACarServiceFactory.java    |   12 +-
 .../src/main/resources/META-INF/persistence.xml    |    8 +-
 .../src/main/webapp/WEB-INF/web.xml                |    2 +-
 odata2-sample/cars-service-archetype/pom.xml       |    4 +-
 .../src/main/resources/archetype-resources/pom.xml |   13 +-
 .../src/main/webapp/WEB-INF/web.xml                |    2 +-
 odata2-sample/pom.xml                              |    2 +-
 odata2-spring/pom.xml                              |   11 +-
 .../olingo/odata2/spring/OlingoRootLocator.java    |    2 +-
 pom.xml                                            |  244 ++-
 src/checkstyle/config.xml                          |    4 +-
 231 files changed, 14960 insertions(+), 15064 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 00000000..72b632a8
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,28 @@
+name: Build
+on:
+  push:
+    branches: 
+      - main
+      - master
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v3
+      with:
+        fetch-depth: 0
+    - name: Cache local Maven repository
+      uses: actions/cache@v3
+      with:
+        path: ~/.m2/repository
+        key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+        restore-keys: ${{ runner.os }}-maven-
+    - name: Set up JDK Corretto
+      uses: actions/setup-java@v3
+      with:
+        distribution: 'corretto'
+        java-version: '17'
+        architecture: x64
+    - name: Maven Build
+      run: mvn clean install
+   
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 64e1e103..25eca780 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -24,10 +24,10 @@ jobs:
 
     steps:
     - uses: actions/checkout@v3
-    - name: Set up JDK 8 (Corretto)
+    - name: Set up JDK (Corretto)
       uses: actions/setup-java@v3
       with:
-        java-version: '8'
+        java-version: '17'
         distribution: 'corretto'
         cache: maven
     - name: Build with Maven
diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml
new file mode 100644
index 00000000..162c8d2f
--- /dev/null
+++ b/.github/workflows/pull-request.yml
@@ -0,0 +1,33 @@
+name: Pull Request
+
+on:
+  pull_request:
+    branches: 
+      - main
+      - master
+concurrency:
+  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
+  cancel-in-progress: true
+jobs:
+  build:        
+    runs-on: ${{ matrix.os }}-latest
+    strategy:
+      matrix:
+        os: [ubuntu, windows]
+    steps:
+    - uses: actions/checkout@v3
+      with:
+        fetch-depth: 0
+    - name: Cache local Maven repository
+      uses: actions/cache@v3
+      with:
+        path: ~/.m2/repository
+        key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+        restore-keys: ${{ runner.os }}-maven-
+    - name: Set up JDK Corretto
+      uses: actions/setup-java@v3
+      with:
+        distribution: 'corretto'
+        java-version: 17
+    - name: Maven Build
+      run: mvn clean install
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 00000000..c579644c
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,106 @@
+name: Release
+
+on:
+  workflow_dispatch:
+    inputs:
+      releaseVersion:
+        description: Release Version
+        required: true
+        default: 3.0.0
+      snapshotVersion:
+        description: Snapshot Version
+        required: true
+        default: 3.0.1-SNAPSHOT
+
+run-name: 'version set to ${{ github.event.inputs.releaseVersion }} for release'
+
+jobs:
+  release-project:
+    runs-on: ubuntu-latest
+    steps:
+
+    - uses: actions/checkout@v3
+      with:
+        token: ${{ secrets.GITHUB_TOKEN }}
+        fetch-depth: 0
+
+    - name: Cache local Maven repository
+      uses: actions/cache@v3
+      with:
+        path: ~/.m2/repository
+        key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+        restore-keys: ${{ runner.os }}-maven-
+
+    - name: Set up JDK Corretto
+      uses: actions/setup-java@v3
+      with:
+        distribution: 'corretto'
+        java-version: '17'
+        architecture: x64
+
+    - name: "Configure Git"
+      run: |
+        git fetch
+        git checkout ${{ github.event.inputs.branch }}
+        git config user.name "$GITHUB_ACTOR"
+        git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
+
+    - name: "Maven: Set Release Version"
+      run: mvn versions:set -DnewVersion=${{ github.event.inputs.releaseVersion }}
+
+    - name: Setup Maven settings.xml
+      uses: whelk-io/maven-settings-xml-action@v11
+      with:
+        servers:
+          '[
+            {
+              "id": "github",
+              "username": "${env.GITHUB_USERNAME}",
+              "password": "${env.GITHUB_TOKEN}"
+            }
+          ]'
+
+    - name: Build Project
+      run: mvn clean install
+
+    - name: Publish to GitHub Packages Apache Maven
+      run: mvn deploy
+      env:
+        GITHUB_USERNAME: x-access-token
+        GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
+        BUILD_ENV: 'github-actions'
+
+    - name: "Git: Commit Release Version"
+      run: |
+        git add '**pom.xml'
+        git commit -m "version set to ${{ github.event.inputs.releaseVersion }} for release"
+
+    - name: "Maven: Set Snapshot Version"
+      run: mvn versions:set -DnewVersion=${{ github.event.inputs.snapshotVersion }}
+
+    - name: "Git: Commit Snapshot Version"
+      run: |
+        git add '**pom.xml'
+        git commit -m "version set to ${{ github.event.inputs.snapshotVersion }} for development"
+
+    - name: Create Release
+      id: create_release
+      uses: actions/create-release@v1
+      env:
+        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
+      with:
+        tag_name: ${{ github.event.inputs.releaseVersion }}
+        release_name: Release ${{ github.event.inputs.releaseVersion }}
+        body: |
+          Changes in this Release:
+          - First Change
+          - Second Change
+        draft: false
+        prerelease: false
+
+    - name: "Git: Push Changes"
+      run: |
+        git checkout -B ${{ github.event.inputs.releaseVersion }}
+        git push --set-upstream origin ${{ github.event.inputs.releaseVersion }}
+        git checkout -B master
+        git push --set-upstream origin master
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index e000e0dc..b30725e7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,4 @@ classes
 .DS_Store
 nb-configuration.xml
 context.xml
+*.versionsBackup
\ No newline at end of file
diff --git a/odata2-annotation-processor/annotation-processor-api/pom.xml b/odata2-annotation-processor/annotation-processor-api/pom.xml
index 120163da..d5cf999f 100644
--- a/odata2-annotation-processor/annotation-processor-api/pom.xml
+++ b/odata2-annotation-processor/annotation-processor-api/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.olingo</groupId>
     <artifactId>olingo-odata2-annotation-processor</artifactId>
-    <version>2.0.13</version>
+    <version>3.0.0-SNAPSHOT</version>
     <relativePath>..</relativePath>
   </parent>
 
diff --git a/odata2-annotation-processor/annotation-processor-core/pom.xml b/odata2-annotation-processor/annotation-processor-core/pom.xml
index b57a282f..85d46807 100644
--- a/odata2-annotation-processor/annotation-processor-core/pom.xml
+++ b/odata2-annotation-processor/annotation-processor-core/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.apache.olingo</groupId>
     <artifactId>olingo-odata2-annotation-processor</artifactId>
-    <version>2.0.13</version>
+    <version>3.0.0-SNAPSHOT</version>
     <relativePath>..</relativePath>
   </parent>
 
diff --git a/odata2-annotation-processor/annotation-processor-ref/pom.xml b/odata2-annotation-processor/annotation-processor-ref/pom.xml
index 3f62b39a..143638eb 100644
--- a/odata2-annotation-processor/annotation-processor-ref/pom.xml
+++ b/odata2-annotation-processor/annotation-processor-ref/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.apache.olingo</groupId>
     <artifactId>olingo-odata2-annotation-processor</artifactId>
-    <version>2.0.13</version>
+    <version>3.0.0-SNAPSHOT</version>
     <relativePath>..</relativePath>
   </parent>
 
@@ -90,7 +90,6 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
-      <version>${slf4j.version}</version>
     </dependency>
     <!-- Test dependencies -->
     <dependency>
@@ -102,7 +101,6 @@
     <dependency>
       <groupId>xmlunit</groupId>
       <artifactId>xmlunit</artifactId>
-      <version>${xmlunit.version}</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
diff --git a/odata2-annotation-processor/annotation-processor-ref/src/main/java/org/apache/olingo/odata2/annotation/processor/ref/model/ResourceHelper.java b/odata2-annotation-processor/annotation-processor-ref/src/main/java/org/apache/olingo/odata2/annotation/processor/ref/model/ResourceHelper.java
index 7d64bc41..511169f1 100644
--- a/odata2-annotation-processor/annotation-processor-ref/src/main/java/org/apache/olingo/odata2/annotation/processor/ref/model/ResourceHelper.java
+++ b/odata2-annotation-processor/annotation-processor-ref/src/main/java/org/apache/olingo/odata2/annotation/processor/ref/model/ResourceHelper.java
@@ -1,20 +1,16 @@
 /*******************************************************************************
- * 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
- * 
+ * 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.
+ *
+ * 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.odata2.annotation.processor.ref.model;
 
@@ -23,7 +19,6 @@ import java.awt.image.WritableRaster;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-
 import javax.imageio.ImageIO;
 
 /**
@@ -31,66 +26,69 @@ import javax.imageio.ImageIO;
  */
 public class ResourceHelper {
 
-  public static byte[] loadAsByte(final String resource) {
-    return load(resource, new byte[0]);
-  }
-
-  public static byte[] load(final String resource, final byte[] defaultResult) {
-    InputStream instream = null;
-    try {
-      instream = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource);
-      if (instream == null) {
-        return defaultResult;
-      }
-      ByteArrayOutputStream stream = new ByteArrayOutputStream();
-      int b = 0;
-      while ((b = instream.read()) != -1) {
-        stream.write(b);
-      }
+    public static byte[] loadAsByte(final String resource) {
+        return load(resource, new byte[0]);
+    }
 
-      return stream.toByteArray();
-    } catch (IOException e) {
-      throw new RuntimeException(e);
-    } finally {
-      if (instream != null) {
+    public static byte[] load(final String resource, final byte[] defaultResult) {
+        InputStream instream = null;
         try {
-          instream.close();
-        } catch (IOException ex) {}
-      }
+            instream = Thread.currentThread()
+                             .getContextClassLoader()
+                             .getResourceAsStream(resource);
+            if (instream == null) {
+                return defaultResult;
+            }
+            ByteArrayOutputStream stream = new ByteArrayOutputStream();
+            int b = 0;
+            while ((b = instream.read()) != -1) {
+                stream.write(b);
+            }
+
+            return stream.toByteArray();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (instream != null) {
+                try {
+                    instream.close();
+                } catch (IOException ex) {
+                }
+            }
+        }
+    }
+
+    public enum Format {
+        BMP, JPEG, PNG, GIF
     }
-  }
 
-  public enum Format {
-    BMP, JPEG, PNG, GIF
-  };
+    public static byte[] generateImage() {
+        return generateImage(Format.PNG);
+    }
 
-  public static byte[] generateImage() {
-    return generateImage(Format.PNG);
-  }
+    public static byte[] generateImage(final Format format) {
+        try {
+            int width = 320;
+            int height = 320;
+            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_BINARY);
+            WritableRaster raster = image.getRaster();
 
-  public static byte[] generateImage(final Format format) {
-    try {
-      int width = 320;
-      int height = 320;
-      BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_BINARY);
-      WritableRaster raster = image.getRaster();
+            int mod = format.ordinal() + 2;
+            for (int h = 0; h < height; h++) {
+                for (int w = 0; w < width; w++) {
+                    if (((h / 32) + (w / 32)) % mod == 0) {
+                        raster.setSample(w, h, 0, 0);
+                    } else {
+                        raster.setSample(w, h, 0, 1);
+                    }
+                }
+            }
 
-      int mod = format.ordinal() + 2;
-      for (int h = 0; h < height; h++) {
-        for (int w = 0; w < width; w++) {
-          if (((h / 32) + (w / 32)) % mod == 0) {
-            raster.setSample(w, h, 0, 0);
-          } else {
-            raster.setSample(w, h, 0, 1);
-          }
+            ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
+            ImageIO.write(image, format.name(), out);
+            return out.toByteArray();
+        } catch (IOException ex) {
+            return new byte[0];
         }
-      }
-
-      ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
-      ImageIO.write(image, format.name(), out);
-      return out.toByteArray();
-    } catch (IOException ex) {
-      return new byte[0];
     }
-  }
 }
diff --git a/odata2-annotation-processor/annotation-processor-ref/src/test/java/org/apache/olingo/odata2/annotation/processor/ref/AbstractRefXmlTest.java b/odata2-annotation-processor/annotation-processor-ref/src/test/java/org/apache/olingo/odata2/annotation/processor/ref/AbstractRefXmlTest.java
index 635e605b..13867b9c 100644
--- a/odata2-annotation-processor/annotation-processor-ref/src/test/java/org/apache/olingo/odata2/annotation/processor/ref/AbstractRefXmlTest.java
+++ b/odata2-annotation-processor/annotation-processor-ref/src/test/java/org/apache/olingo/odata2/annotation/processor/ref/AbstractRefXmlTest.java
@@ -1,30 +1,24 @@
 /*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
+ * 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.
+ *
+ * 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.odata2.annotation.processor.ref;
 
 import static org.custommonkey.xmlunit.XMLAssert.assertXpathExists;
-
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Map;
-
 import org.apache.http.HttpResponse;
 import org.apache.olingo.odata2.api.commons.HttpStatusCodes;
 import org.apache.olingo.odata2.api.edm.Edm;
@@ -38,59 +32,59 @@ import org.xml.sax.SAXException;
 
 /**
  * Abstract base class for tests employing the reference scenario reading or writing XML.
- * 
+ *
  */
 @Ignore("no test methods")
 public class AbstractRefXmlTest extends AbstractRefTest {
-  public AbstractRefXmlTest(final ServletType servletType) {
-    super(servletType);
-  }
-
-  @Before
-  public void setXmlNamespacePrefixes() {
-    Map<String, String> prefixMap = new HashMap<String, String>();
-    prefixMap.put(Edm.PREFIX_ATOM, Edm.NAMESPACE_ATOM_2005);
-    prefixMap.put(Edm.PREFIX_APP, Edm.NAMESPACE_APP_2007);
-    prefixMap.put(Edm.PREFIX_D, Edm.NAMESPACE_D_2007_08);
-    prefixMap.put(Edm.PREFIX_M, Edm.NAMESPACE_M_2007_08);
-    prefixMap.put(Edm.PREFIX_EDM, Edm.NAMESPACE_EDM_2008_09);
-    prefixMap.put(Edm.PREFIX_EDMX, Edm.NAMESPACE_EDMX_2007_06);
-    prefixMap.put(Edm.PREFIX_XML, Edm.NAMESPACE_XML_1998);
-    XMLUnit.setXpathNamespaceContext(new SimpleNamespaceContext(prefixMap));
-  }
-
-  @Override
-  protected void badRequest(final String uri) throws Exception {
-    final HttpResponse response = callUri(uri, HttpStatusCodes.BAD_REQUEST);
-    validateXmlError(getBody(response));
-  }
+    public AbstractRefXmlTest(final ServletType servletType) {
+        super(servletType);
+    }
 
-  @Override
-  protected void notFound(final String uri) throws Exception {
-    final HttpResponse response = callUri(uri, HttpStatusCodes.NOT_FOUND);
-    validateXmlError(getBody(response));
-  }
+    @Before
+    public void setXmlNamespacePrefixes() {
+        Map<String, String> prefixMap = new HashMap<String, String>();
+        prefixMap.put(Edm.PREFIX_ATOM, Edm.NAMESPACE_ATOM_2005);
+        prefixMap.put(Edm.PREFIX_APP, Edm.NAMESPACE_APP_2007);
+        prefixMap.put(Edm.PREFIX_D, Edm.NAMESPACE_D_2007_08);
+        prefixMap.put(Edm.PREFIX_M, Edm.NAMESPACE_M_2007_08);
+        prefixMap.put(Edm.PREFIX_EDM, Edm.NAMESPACE_EDM_2008_09);
+        prefixMap.put(Edm.PREFIX_EDMX, Edm.NAMESPACE_EDMX_2007_06);
+        prefixMap.put(Edm.PREFIX_XML, Edm.NAMESPACE_XML_1998);
+        XMLUnit.setXpathNamespaceContext(new SimpleNamespaceContext(prefixMap));
+    }
 
-  protected void validateXmlError(final String xml) throws XpathException, IOException, SAXException {
-    assertXpathExists("/m:error", xml);
-    assertXpathExists("/m:error/m:code", xml);
-    assertXpathExists("/m:error/m:message[@xml:lang=\"en\"]", xml);
-  }
+    @Override
+    protected void badRequest(final String uri) throws Exception {
+        final HttpResponse response = callUri(uri, HttpStatusCodes.BAD_REQUEST);
+        validateXmlError(getBody(response));
+    }
 
-  protected String readFile(final String filename) throws IOException {
-    InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(filename);
-    if (in == null) {
-      throw new IOException("Requested file '" + filename + "' was not found.");
+    @Override
+    protected void notFound(final String uri) throws Exception {
+        final HttpResponse response = callUri(uri, HttpStatusCodes.NOT_FOUND);
+        validateXmlError(getBody(response));
     }
 
-    byte[] tmp = new byte[8192];
-    int count = in.read(tmp);
-    StringBuffer b = new StringBuffer();
-    while (count >= 0) {
-      b.append(new String(tmp, 0, count));
-      count = in.read(tmp);
+    protected void validateXmlError(final String xml) throws XpathException, IOException, SAXException {
+        assertXpathExists("/m:error", xml);
+        assertXpathExists("/m:error/m:code", xml);
+        assertXpathExists("/m:error/m:message[@xml:lang=\"en\"]", xml);
     }
 
-    return b.toString();
-  }
+    protected String readFile(final String filename) throws IOException {
+        InputStream in = AbstractRefXmlTest.class.getResourceAsStream(filename);
+        if (in == null) {
+            throw new IOException("Requested file '" + filename + "' was not found.");
+        }
+
+        byte[] tmp = new byte[8192];
+        int count = in.read(tmp);
+        StringBuffer b = new StringBuffer();
+        while (count >= 0) {
+            b.append(new String(tmp, 0, count));
+            count = in.read(tmp);
+        }
+
+        return b.toString();
+    }
 }
diff --git a/odata2-annotation-processor/annotation-processor-web/pom.xml b/odata2-annotation-processor/annotation-processor-web/pom.xml
index 797d8dac..5f00dff2 100644
--- a/odata2-annotation-processor/annotation-processor-web/pom.xml
+++ b/odata2-annotation-processor/annotation-processor-web/pom.xml
@@ -20,14 +20,10 @@
   <parent>
     <groupId>org.apache.olingo</groupId>
     <artifactId>olingo-odata2-annotation-processor</artifactId>
-    <version>2.0.13</version>
+    <version>3.0.0-SNAPSHOT</version>
     <relativePath>..</relativePath>
   </parent>
 
-  <properties>
-    <version.slf4j>1.7.1</version.slf4j>
-  </properties>
-
   <build>
     <resources>
       <resource>
@@ -61,13 +57,6 @@
   </build>
 
   <dependencies>
-    <dependency>
-      <!-- required because of auto detection of web facet 2.5 -->
-      <groupId>javax.servlet</groupId>
-      <artifactId>servlet-api</artifactId>
-      <version>2.5</version>
-      <scope>provided</scope>
-    </dependency>
     <dependency>
       <groupId>org.apache.cxf</groupId>
       <artifactId>cxf-rt-frontend-jaxrs</artifactId>
@@ -86,7 +75,6 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
-      <version>${version.slf4j}</version>
     </dependency>
   </dependencies>
 
diff --git a/odata2-annotation-processor/annotation-processor-web/src/main/resources/META-INF/LICENSE b/odata2-annotation-processor/annotation-processor-web/src/main/resources/META-INF/LICENSE
index 6547e963..28751de4 100644
--- a/odata2-annotation-processor/annotation-processor-web/src/main/resources/META-INF/LICENSE
+++ b/odata2-annotation-processor/annotation-processor-web/src/main/resources/META-INF/LICENSE
@@ -497,8 +497,8 @@
 
 
 =====================================================================
-  - javax.ws.rs-api (http://jax-rs-spec.java.net) 
-    javax.ws.rs:javax.ws.rs-api:jar:2.0-m10
+  - jakarta.ws.rs-api (http://jax-rs-spec.java.net) 
+    jakarta.ws.rs:jakarta.ws.rs-api:jar:2.0-m10
   - JAXB Reference Implementation (http://jaxb.java.net/) 
     com.sun.xml.bind:jaxb-impl:jar:2.2.6
     License: CDDL 1.1  (https://glassfish.java.net/public/CDDL+GPL_1_1.html)    
diff --git a/odata2-annotation-processor/annotation-processor-web/src/main/webapp/WEB-INF/web.xml b/odata2-annotation-processor/annotation-processor-web/src/main/webapp/WEB-INF/web.xml
index 2e4635ec..15eca607 100644
--- a/odata2-annotation-processor/annotation-processor-web/src/main/webapp/WEB-INF/web.xml
+++ b/odata2-annotation-processor/annotation-processor-web/src/main/webapp/WEB-INF/web.xml
@@ -30,7 +30,7 @@
 		<servlet-name>ReferenceScenarioServlet</servlet-name>
 		<servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
 		<init-param>
-			<param-name>javax.ws.rs.Application</param-name>
+			<param-name>jakarta.ws.rs.Application</param-name>
 			<param-value>org.apache.olingo.odata2.core.rest.app.ODataApplication</param-value>
 		</init-param>
 		<init-param>
diff --git a/odata2-annotation-processor/pom.xml b/odata2-annotation-processor/pom.xml
index d830a1c5..3f3f19c7 100644
--- a/odata2-annotation-processor/pom.xml
+++ b/odata2-annotation-processor/pom.xml
@@ -18,7 +18,7 @@
     <parent>
         <groupId>org.apache.olingo</groupId>
         <artifactId>olingo-odata2-parent</artifactId>
-        <version>2.0.13</version>
+        <version>3.0.0-SNAPSHOT</version>
         <relativePath>..</relativePath>
     </parent>
 
diff --git a/odata2-dist/janos/pom.xml b/odata2-dist/janos/pom.xml
index f4b3926e..37704a27 100644
--- a/odata2-dist/janos/pom.xml
+++ b/odata2-dist/janos/pom.xml
@@ -17,7 +17,7 @@
     <parent>
         <groupId>org.apache.olingo</groupId>
         <artifactId>olingo-odata2-dist</artifactId>
-        <version>2.0.13</version>
+        <version>3.0.0-SNAPSHOT</version>
         <relativePath>..</relativePath>
     </parent>
 
diff --git a/odata2-dist/janos/src/main/resources/LICENSE b/odata2-dist/janos/src/main/resources/LICENSE
index 932a86ec..d832967e 100644
--- a/odata2-dist/janos/src/main/resources/LICENSE
+++ b/odata2-dist/janos/src/main/resources/LICENSE
@@ -205,8 +205,8 @@
 
 
 =====================================================================
-  - javax.ws.rs-api (http://jax-rs-spec.java.net) 
-    javax.ws.rs:javax.ws.rs-api:jar:2.0-m10
+  - jakarta.ws.rs-api (http://jax-rs-spec.java.net) 
+    jakarta.ws.rs:jakarta.ws.rs-api:jar:2.0-m10
     License: CDDL 1.1  (https://glassfish.java.net/public/CDDL+GPL_1_1.html)    
 =====================================================================
 
diff --git a/odata2-dist/javadoc/pom.xml b/odata2-dist/javadoc/pom.xml
index 841a18b8..59b4cd35 100644
--- a/odata2-dist/javadoc/pom.xml
+++ b/odata2-dist/javadoc/pom.xml
@@ -17,7 +17,7 @@
     <parent>
         <groupId>org.apache.olingo</groupId>
         <artifactId>olingo-odata2-dist</artifactId>
-        <version>2.0.13</version>
+        <version>3.0.0-SNAPSHOT</version>
         <relativePath>..</relativePath>
     </parent>
 
diff --git a/odata2-dist/jpa/pom.xml b/odata2-dist/jpa/pom.xml
index 6264163f..32cae72c 100644
--- a/odata2-dist/jpa/pom.xml
+++ b/odata2-dist/jpa/pom.xml
@@ -17,7 +17,7 @@
     <parent>
         <groupId>org.apache.olingo</groupId>
         <artifactId>olingo-odata2-dist</artifactId>
-        <version>2.0.13</version>
+        <version>3.0.0-SNAPSHOT</version>
         <relativePath>..</relativePath>
     </parent>
 
@@ -99,11 +99,5 @@
             <version>${project.version}</version>
             <scope>compile</scope>
         </dependency>
-        <dependency>
-            <groupId>org.eclipse.persistence</groupId>
-            <artifactId>javax.persistence</artifactId>
-            <version>${version.javax.persistence}</version>
-            <scope>compile</scope>
-        </dependency>
     </dependencies>
 </project>
diff --git a/odata2-dist/jpa/src/main/assembly/jpa-assembly.xml b/odata2-dist/jpa/src/main/assembly/jpa-assembly.xml
index 9c0c7b8d..4b89c473 100644
--- a/odata2-dist/jpa/src/main/assembly/jpa-assembly.xml
+++ b/odata2-dist/jpa/src/main/assembly/jpa-assembly.xml
@@ -28,7 +28,7 @@
                 <include>org.apache.olingo:olingo-odata2-api-annotation</include>
                 <include>org.apache.olingo:olingo-odata2-jpa-processor-api</include>
                 <include>org.apache.olingo:olingo-odata2-jpa-processor-core</include>
-                <include>org.eclipse.persistence:javax.persistence</include>
+                <include>jakarta.persistence:jakarta.persistence-api</include>
             </includes>
         </dependencySet>
     </dependencySets>
diff --git a/odata2-dist/jpa/src/main/resources/LICENSE b/odata2-dist/jpa/src/main/resources/LICENSE
index e2f9f31a..765b0c15 100644
--- a/odata2-dist/jpa/src/main/resources/LICENSE
+++ b/odata2-dist/jpa/src/main/resources/LICENSE
@@ -204,8 +204,8 @@
    
 
 =====================================================================
-  - javax.ws.rs-api (http://jax-rs-spec.java.net) 
-    javax.ws.rs:javax.ws.rs-api:jar:2.0-m10
+  - jakarta.ws.rs-api (http://jax-rs-spec.java.net) 
+    jakarta.ws.rs:jakarta.ws.rs-api:jar:2.0-m10
     License: CDDL 1.1  (https://glassfish.java.net/public/CDDL+GPL_1_1.html)    
 =====================================================================
 
@@ -587,7 +587,7 @@
 =====================================================================
 
   - Javax Persistence (http://www.eclipse.org/eclipselink) 
-    org.eclipse.persistence:javax.persistence:jar:2.0.5
+    jakarta.persistence:jakarta.persistence-api:jar:2.0.5
     License: Eclipse Public License v1.0  (http://www.eclipse.org/legal/epl-v10.html)    
     License: Eclipse Distribution License v. 1.0  
     (http://www.eclipse.org/org/documents/edl-v10.php)
diff --git a/odata2-dist/lib/pom.xml b/odata2-dist/lib/pom.xml
index 012687cd..e8e23da8 100644
--- a/odata2-dist/lib/pom.xml
+++ b/odata2-dist/lib/pom.xml
@@ -17,7 +17,7 @@
     <parent>
         <groupId>org.apache.olingo</groupId>
         <artifactId>olingo-odata2-dist</artifactId>
-        <version>2.0.13</version>
+        <version>3.0.0-SNAPSHOT</version>
         <relativePath>..</relativePath>
     </parent>
 
diff --git a/odata2-dist/lib/src/main/resources/LICENSE b/odata2-dist/lib/src/main/resources/LICENSE
index 932a86ec..d832967e 100644
--- a/odata2-dist/lib/src/main/resources/LICENSE
+++ b/odata2-dist/lib/src/main/resources/LICENSE
@@ -205,8 +205,8 @@
 
 
 =====================================================================
-  - javax.ws.rs-api (http://jax-rs-spec.java.net) 
-    javax.ws.rs:javax.ws.rs-api:jar:2.0-m10
+  - jakarta.ws.rs-api (http://jax-rs-spec.java.net) 
+    jakarta.ws.rs:jakarta.ws.rs-api:jar:2.0-m10
     License: CDDL 1.1  (https://glassfish.java.net/public/CDDL+GPL_1_1.html)    
 =====================================================================
 
diff --git a/odata2-dist/pom.xml b/odata2-dist/pom.xml
index 3aa08424..d0ab591b 100644
--- a/odata2-dist/pom.xml
+++ b/odata2-dist/pom.xml
@@ -17,7 +17,7 @@
     <parent>
         <groupId>org.apache.olingo</groupId>
         <artifactId>olingo-odata2-parent</artifactId>
-        <version>2.0.13</version>
+        <version>3.0.0-SNAPSHOT</version>
         <relativePath>..</relativePath>
     </parent>
 
diff --git a/odata2-dist/ref/pom.xml b/odata2-dist/ref/pom.xml
index 199f6e89..5e2c5473 100644
--- a/odata2-dist/ref/pom.xml
+++ b/odata2-dist/ref/pom.xml
@@ -17,7 +17,7 @@
     <parent>
         <groupId>org.apache.olingo</groupId>
         <artifactId>olingo-odata2-dist</artifactId>
-        <version>2.0.13</version>
+        <version>3.0.0-SNAPSHOT</version>
         <relativePath>..</relativePath>
     </parent>
 
@@ -117,7 +117,6 @@
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
-            <version>1.7.1</version>
         </dependency>
     </dependencies>
 </project>
diff --git a/odata2-dist/ref/src/main/resources/LICENSE b/odata2-dist/ref/src/main/resources/LICENSE
index 00b68b50..c99a4b6d 100644
--- a/odata2-dist/ref/src/main/resources/LICENSE
+++ b/odata2-dist/ref/src/main/resources/LICENSE
@@ -497,8 +497,8 @@
 
 
 =====================================================================
-  - javax.ws.rs-api (http://jax-rs-spec.java.net) 
-    javax.ws.rs:javax.ws.rs-api:jar:2.0-m10
+  - jakarta.ws.rs-api (http://jax-rs-spec.java.net) 
+    jakarta.ws.rs:jakarta.ws.rs-api:jar:2.0-m10
   - JAXB Reference Implementation (http://jaxb.java.net/) 
     com.sun.xml.bind:jaxb-impl:jar:2.2.6
     License: CDDL 1.1  (https://glassfish.java.net/public/CDDL+GPL_1_1.html)    
@@ -917,7 +917,7 @@
   - EclipseLink (non-OSGi) (http://www.eclipse.org/eclipselink) 
     org.eclipse.persistence:eclipselink:jar:2.5.0
   - Javax Persistence (http://www.eclipse.org/eclipselink) 
-    org.eclipse.persistence:javax.persistence:jar:2.0.5
+    jakarta.persistence:jakarta.persistence-api:jar:2.0.5
     License: Eclipse Public License v1.0  (http://www.eclipse.org/legal/epl-v10.html)    
     License: Eclipse Distribution License v. 1.0  
     (http://www.eclipse.org/org/documents/edl-v10.php)
diff --git a/odata2-jpa-processor/jpa-api/pom.xml b/odata2-jpa-processor/jpa-api/pom.xml
index 872f2ae9..5db331ae 100644
--- a/odata2-jpa-processor/jpa-api/pom.xml
+++ b/odata2-jpa-processor/jpa-api/pom.xml
@@ -17,28 +17,30 @@
          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"
+<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>
 
 	<parent>
 		<groupId>org.apache.olingo</groupId>
 		<artifactId>olingo-odata2-jpa-processor</artifactId>
-		<version>2.0.13</version>
+		<version>3.0.0-SNAPSHOT</version>
 		<relativePath>../</relativePath>
 	</parent>
 
 	<artifactId>olingo-odata2-jpa-processor-api</artifactId>
 	<packaging>jar</packaging>
 	<name>${project.artifactId}</name>
-	
+
 	<build>
 		<plugins>
 			<plugin>
 				<artifactId>maven-jar-plugin</artifactId>
 				<configuration>
 					<archive>
-						<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+						<manifestFile>
+							${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
 					</archive>
 				</configuration>
 			</plugin>
@@ -72,13 +74,16 @@
 			</plugin>
 		</plugins>
 	</build>
-	
+
 	<dependencies>
+		<dependency>
+			<groupId>jakarta.xml.bind</groupId>
+			<artifactId>jakarta.xml.bind-api</artifactId>
+		</dependency>
 		<!-- JPA Support -->
 		<dependency>
-			<groupId>org.eclipse.persistence</groupId>
-			<artifactId>javax.persistence</artifactId>
-			<version>${version.javax.persistence}</version>
+			<groupId>jakarta.persistence</groupId>
+			<artifactId>jakarta.persistence-api</artifactId>
 		</dependency>
 
 		<!-- OData Java Library -->
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAContext.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAContext.java
index 7cb54d9f..1c98759f 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAContext.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAContext.java
@@ -18,8 +18,8 @@
  ******************************************************************************/
 package org.apache.olingo.odata2.jpa.processor.api;
 
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
 
 import org.apache.olingo.odata2.api.edm.provider.EdmProvider;
 import org.apache.olingo.odata2.api.processor.ODataContext;
@@ -111,7 +111,7 @@ public interface ODataJPAContext {
    * context.
    * 
    * @param emf
-   * is of type {@link javax.persistence.EntityManagerFactory}
+   * is of type {@link jakarta.persistence.EntityManagerFactory}
    * 
    */
   public void setEntityManagerFactory(EntityManagerFactory emf);
@@ -159,7 +159,7 @@ public interface ODataJPAContext {
    * Hence all entities that are accessed within JPA processor are managed by
    * single entity manager.
    * 
-   * @return an instance of type {@link javax.persistence.EntityManager}
+   * @return an instance of type {@link jakarta.persistence.EntityManager}
    */
   public EntityManager getEntityManager();
 
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAProcessor.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAProcessor.java
index 0c355f56..7a669025 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAProcessor.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAProcessor.java
@@ -18,7 +18,7 @@
  ******************************************************************************/
 package org.apache.olingo.odata2.jpa.processor.api;
 
-import javax.persistence.EntityManager;
+import jakarta.persistence.EntityManager;
 
 import org.apache.olingo.odata2.api.processor.ODataSingleProcessor;
 import org.apache.olingo.odata2.jpa.processor.api.access.JPAProcessor;
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAQueryExtensionEntityListener.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAQueryExtensionEntityListener.java
index e2c09d5b..892267de 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAQueryExtensionEntityListener.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAQueryExtensionEntityListener.java
@@ -21,8 +21,8 @@ package org.apache.olingo.odata2.jpa.processor.api;
 import java.util.List;
 import java.util.Locale;
 
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.Query;
 
 import org.apache.olingo.odata2.api.exception.ODataApplicationException;
 import org.apache.olingo.odata2.api.uri.info.DeleteUriInfo;
@@ -41,8 +41,8 @@ public abstract class ODataJPAQueryExtensionEntityListener extends ODataJPATombs
   /**
    * Override this method to build JPA Query for OData request - GetEntitySet; SELECT *
    * @param uriInfo is a reference to OData request
-   * @param em is a reference to {@link javax.persistence.EntityManager}
-   * @return an instance of type {@link javax.persistence.Query}
+   * @param em is a reference to {@link jakarta.persistence.EntityManager}
+   * @return an instance of type {@link jakarta.persistence.Query}
    */
   public Query getQuery(GetEntitySetUriInfo uriInfo, EntityManager em) throws ODataJPARuntimeException {
     return null;
@@ -52,8 +52,8 @@ public abstract class ODataJPAQueryExtensionEntityListener extends ODataJPATombs
    * Override this method to build JPA Query for OData request - GetEntity; SELECT SINGLE with key in WHERE
    * clause
    * @param uriInfo is a reference to OData request
-   * @param em is a reference to {@link javax.persistence.EntityManager}
-   * @return an instance of type {@link javax.persistence.Query}
+   * @param em is a reference to {@link jakarta.persistence.EntityManager}
+   * @return an instance of type {@link jakarta.persistence.Query}
    */
   public Query getQuery(GetEntityUriInfo uriInfo, EntityManager em) throws ODataJPARuntimeException {
     return null;
@@ -63,8 +63,8 @@ public abstract class ODataJPAQueryExtensionEntityListener extends ODataJPATombs
    * Override this method to build JPA Query for OData request - GetEntity Count; SELECT SINGLE with key in WHERE
    * clause
    * @param uriInfo is a reference to OData request
-   * @param em is a reference to {@link javax.persistence.EntityManager}
-   * @return an instance of type {@link javax.persistence.Query}
+   * @param em is a reference to {@link jakarta.persistence.EntityManager}
+   * @return an instance of type {@link jakarta.persistence.Query}
    */
   public Query getQuery(GetEntityCountUriInfo uriInfo, EntityManager em) throws ODataJPARuntimeException {
     return null;
@@ -73,8 +73,8 @@ public abstract class ODataJPAQueryExtensionEntityListener extends ODataJPATombs
   /**
    * Override this method to build JPA Query for OData request - GetEntitySet Count; SELECT COUNT(*)
    * @param uriInfo is a reference to OData request
-   * @param em is a reference to {@link javax.persistence.EntityManager}
-   * @return an instance of type {@link javax.persistence.Query}
+   * @param em is a reference to {@link jakarta.persistence.EntityManager}
+   * @return an instance of type {@link jakarta.persistence.Query}
    */
   public Query getQuery(GetEntitySetCountUriInfo uriInfo, EntityManager em) throws ODataJPARuntimeException {
     return null;
@@ -84,8 +84,8 @@ public abstract class ODataJPAQueryExtensionEntityListener extends ODataJPATombs
    * Override this method to build JPA Query for OData request - Update; SELECT SINGLE with key in WHERE
    * clause
    * @param uriInfo is a reference to OData request
-   * @param em is a reference to {@link javax.persistence.EntityManager}
-   * @return an instance of type {@link javax.persistence.Query}
+   * @param em is a reference to {@link jakarta.persistence.EntityManager}
+   * @return an instance of type {@link jakarta.persistence.Query}
    */
   public Query getQuery(PutMergePatchUriInfo uriInfo, EntityManager em) throws ODataJPARuntimeException {
     return null;
@@ -95,8 +95,8 @@ public abstract class ODataJPAQueryExtensionEntityListener extends ODataJPATombs
    * Override this method to build JPA Query for OData request - Delete; SELECT SINGLE with key in WHERE
    * clause
    * @param uriInfo is a reference to OData request
-   * @param em is a reference to {@link javax.persistence.EntityManager}
-   * @return an instance of type {@link javax.persistence.Query}
+   * @param em is a reference to {@link jakarta.persistence.EntityManager}
+   * @return an instance of type {@link jakarta.persistence.Query}
    */
   public Query getQuery(DeleteUriInfo uriInfo, EntityManager em) throws ODataJPARuntimeException {
     return null;
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAServiceFactory.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAServiceFactory.java
index 6089be08..9a56135f 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAServiceFactory.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPAServiceFactory.java
@@ -59,7 +59,7 @@ import org.apache.olingo.odata2.jpa.processor.api.factory.ODataJPAFactory;
  *  <servlet-name>ReferenceScenarioServlet</servlet-name>
  *  <servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
  *  <init-param>
- *    <param-name>javax.ws.rs.Application</param-name>
+ *    <param-name>jakarta.ws.rs.Application</param-name>
  *    <param-value>org.apache.olingo.odata2.core.rest.ODataApplication</param-value>
  *  </init-param>
  *  <init-param>
@@ -85,7 +85,7 @@ public abstract class ODataJPAServiceFactory extends ODataServiceFactory {
 
   /**
    * Implement this method and initialize OData JPA Context. It is mandatory
-   * to set an instance of type {@link javax.persistence.EntityManagerFactory} into the context. An exception of type
+   * to set an instance of type {@link jakarta.persistence.EntityManagerFactory} into the context. An exception of type
    * {@link org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPARuntimeException} is thrown if
    * EntityManagerFactory is not initialized. <br>
    * <br>
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPATombstoneEntityListener.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPATombstoneEntityListener.java
index 0dfc9356..a19804a1 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPATombstoneEntityListener.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/ODataJPATombstoneEntityListener.java
@@ -20,8 +20,8 @@ package org.apache.olingo.odata2.jpa.processor.api;
 
 import java.util.List;
 
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.Query;
 
 import org.apache.olingo.odata2.api.uri.info.GetEntitySetUriInfo;
 import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPARuntimeException;
@@ -40,20 +40,20 @@ public abstract class ODataJPATombstoneEntityListener {
   }
 
   /**
-   * Implement this method to create a {@link javax.persistence.Query} object. The Query object can be created from
+   * Implement this method to create a {@link jakarta.persistence.Query} object. The Query object can be created from
    * OData requests. The query instance thus created can be used for handling delta JPA entities. The delta token passed
    * from OData request can
    * be accessed from {@link com.sap.core.odata.processor.api.jpa.ODataJPATombstoneContext}.
    * @param resultsView is a reference to OData request
-   * @param em is a reference to {@link javax.persistence.EntityManager}
-   * @return an instance of type {@link javax.persistence.Query}
+   * @param em is a reference to {@link jakarta.persistence.EntityManager}
+   * @return an instance of type {@link jakarta.persistence.Query}
    */
   public abstract Query getQuery(GetEntitySetUriInfo resultsView, EntityManager em) throws ODataJPARuntimeException;
 
   /**
    * Implement this method to create a delta token.
    * @param deltas is list of delta JPA Entities
-   * @param query is an instance of type {@link javax.persistence.Query} that was used for handling delta entites
+   * @param query is an instance of type {@link jakarta.persistence.Query} that was used for handling delta entites
    * @return a delta token of type String
    */
   public abstract String generateDeltaToken(List<Object> deltas, Query query);
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmBaseView.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmBaseView.java
index 56aa8b30..82fa48c8 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmBaseView.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmBaseView.java
@@ -18,7 +18,7 @@
  ******************************************************************************/
 package org.apache.olingo.odata2.jpa.processor.api.model;
 
-import javax.persistence.metamodel.Metamodel;
+import jakarta.persistence.metamodel.Metamodel;
 
 import org.apache.olingo.odata2.jpa.processor.api.access.JPAEdmBuilder;
 import org.apache.olingo.odata2.jpa.processor.api.access.JPAEdmMappingModelAccess;
@@ -46,7 +46,7 @@ public interface JPAEdmBaseView {
   /**
    * The method returns the Java Persistence MetaModel
    * 
-   * @return a meta model of type {@link javax.persistence.metamodel.Metamodel}
+   * @return a meta model of type {@link jakarta.persistence.metamodel.Metamodel}
    */
   public Metamodel getJPAMetaModel();
 
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmComplexTypeView.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmComplexTypeView.java
index 3b5a8840..6f53d063 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmComplexTypeView.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmComplexTypeView.java
@@ -58,9 +58,9 @@ public interface JPAEdmComplexTypeView extends JPAEdmBaseView {
    * The method returns an JPA embeddable type that is currently being
    * processed.
    * 
-   * @return an instance of type {@link javax.persistence.metamodel.EmbeddableType}
+   * @return an instance of type {@link jakarta.persistence.metamodel.EmbeddableType}
    */
-  public javax.persistence.metamodel.EmbeddableType<?> getJPAEmbeddableType();
+  public jakarta.persistence.metamodel.EmbeddableType<?> getJPAEmbeddableType();
 
   /**
    * The method returns a consistent list of EDM complex types.
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmEntityTypeView.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmEntityTypeView.java
index 80de0848..17a2563e 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmEntityTypeView.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmEntityTypeView.java
@@ -1,76 +1,69 @@
 /*******************************************************************************
- * 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
- * 
+ * 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.
+ *
+ * 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.odata2.jpa.processor.api.model;
 
 import java.util.List;
-
 import org.apache.olingo.odata2.api.edm.provider.EntityType;
 
 /**
- * A view on Java Persistence entity types and EDM entity types. Java
- * persistence entity types are converted into EDM entity types.
+ * A view on Java Persistence entity types and EDM entity types. Java persistence entity types are
+ * converted into EDM entity types.
  * <p>
- * The implementation of the view provides access to EDM entity types for the
- * given JPA EDM model. The view acts as a container for consistent list of EDM
- * entity types. An EDM entity type is said to be consistent only if it has at
- * least one consistent EDM property and at least one consistent EDM key.
- * 
- * 
+ * The implementation of the view provides access to EDM entity types for the given JPA EDM model.
+ * The view acts as a container for consistent list of EDM entity types. An EDM entity type is said
+ * to be consistent only if it has at least one consistent EDM property and at least one consistent
+ * EDM key.
+ *
+ *
  * <p>
+ *
  * @org.apache.olingo.odata2.DoNotImplement
  * @see org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmPropertyView
  * @see org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmKeyView
  * @see org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmNavigationPropertyView
- * 
+ *
  */
 public interface JPAEdmEntityTypeView extends JPAEdmBaseView {
-  /**
-   * The method returns an EDM entity currently being processed.
-   * 
-   * @return an instance of type {@link org.apache.olingo.odata2.api.edm.provider.EntityType}
-   */
-  public EntityType getEdmEntityType();
+    /**
+     * The method returns an EDM entity currently being processed.
+     *
+     * @return an instance of type {@link org.apache.olingo.odata2.api.edm.provider.EntityType}
+     */
+    EntityType getEdmEntityType();
 
-  /**
-   * The method returns java persistence Entity type currently being
-   * processed.
-   * 
-   * @return an instance of type {@link javax.persistence.metamodel.EntityType}
-   */
-  public javax.persistence.metamodel.EntityType<?> getJPAEntityType();
+    /**
+     * The method returns java persistence Entity type currently being processed.
+     *
+     * @return an instance of type {@link javax.persistence.metamodel.EntityType}
+     */
+    jakarta.persistence.metamodel.EntityType<?> getJPAEntityType();
 
-  /**
-   * The method returns a consistent list of EDM entity types for a given java
-   * persistence meta model.
-   * 
-   * @return a list of {@link org.apache.olingo.odata2.api.edm.provider.EntityType}
-   */
-  public List<EntityType> getConsistentEdmEntityTypes();
+    /**
+     * The method returns a consistent list of EDM entity types for a given java persistence meta model.
+     *
+     * @return a list of {@link org.apache.olingo.odata2.api.edm.provider.EntityType}
+     */
+    List<EntityType> getConsistentEdmEntityTypes();
 
-  /**
-   * The method searches in the consistent list of EDM entity types for the
-   * given EDM entity type's name.
-   * 
-   * @param jpaEntityTypeName
-   * is the name of EDM entity type
-   * @return a reference to EDM entity type if found else null
-   */
-  public EntityType searchEdmEntityType(String jpaEntityTypeName);
+    /**
+     * The method searches in the consistent list of EDM entity types for the given EDM entity type's
+     * name.
+     *
+     * @param jpaEntityTypeName is the name of EDM entity type
+     * @return a reference to EDM entity type if found else null
+     */
+    EntityType searchEdmEntityType(String jpaEntityTypeName);
 
 }
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmPropertyView.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmPropertyView.java
index 3ce66d64..1eca444e 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmPropertyView.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmPropertyView.java
@@ -20,7 +20,7 @@ package org.apache.olingo.odata2.jpa.processor.api.model;
 
 import java.util.List;
 
-import javax.persistence.metamodel.Attribute;
+import jakarta.persistence.metamodel.Attribute;
 
 import org.apache.olingo.odata2.api.edm.provider.Property;
 import org.apache.olingo.odata2.api.edm.provider.SimpleProperty;
@@ -74,16 +74,16 @@ public interface JPAEdmPropertyView extends JPAEdmBaseView {
   /**
    * The method returns a JPA Attribute for the given JPA entity type.
    * 
-   * @return an instance of type {@link javax.persistence.metamodel.Attribute
+   * @return an instance of type {@link jakarta.persistence.metamodel.Attribute
    * <?, ?>}
    */
   Attribute<?, ?> getJPAAttribute();
 
   /**
-   * The method returns a JPA Attribute referenced by a JPA Attribute in the {@link javax.persistence.JoinColumn}
+   * The method returns a JPA Attribute referenced by a JPA Attribute in the {@link jakarta.persistence.JoinColumn}
    * annotation for the given JPA entity type .
    * 
-   * @return an instance of type {@link javax.persistence.metamodel.Attribute
+   * @return an instance of type {@link jakarta.persistence.metamodel.Attribute
    * <?, ?>}
    */
   Attribute<?, ?> getJPAReferencedAttribute();
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAAttributeMapType.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAAttributeMapType.java
index e7bcbe97..cb899a42 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAAttributeMapType.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAAttributeMapType.java
@@ -1,45 +1,40 @@
 /*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
+ * 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.
+ *
+ * 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.odata2.jpa.processor.api.model.mapping;
 
 import java.util.ArrayList;
 import java.util.List;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlValue;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlAttribute;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlType;
+import jakarta.xml.bind.annotation.XmlValue;
 
 /**
- * 
- * The default name for EDM
- * property is derived from JPA attribute name. This can be overriden
- * using
+ *
+ * The default name for EDM property is derived from JPA attribute name. This can be overriden using
  * JPAAttributeMapType.
- * 
- * 
- * <p>Java class for JPAAttributeMapType complex type.
- * 
- * <p>The following schema fragment specifies the expected content contained within this class.
- * 
+ *
+ *
+ * <p>
+ * Java class for JPAAttributeMapType complex type.
+ *
+ * <p>
+ * The following schema fragment specifies the expected content contained within this class.
+ *
  * <pre>
  * &lt;complexType name="JPAAttributeMapType">
  * &lt;complexContent>
@@ -60,143 +55,139 @@ import javax.xml.bind.annotation.XmlValue;
  * &lt;/complexContent>
  * &lt;/complexType>
  * </pre>
- * 
- * 
+ *
+ *
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "JPAAttributeMapType", propOrder = { "jpaAttribute" })
+@XmlType(name = "JPAAttributeMapType", propOrder = {"jpaAttribute"})
 public class JPAAttributeMapType {
 
-  @XmlElement(name = "JPAAttribute")
-  protected List<JPAAttributeMapType.JPAAttribute> jpaAttribute;
-
-  /**
-   * Gets the value of the jpaAttribute property.
-   * 
-   * <p>
-   * This accessor method returns a reference to the live list,
-   * not a snapshot. Therefore any modification you make to the
-   * returned list will be present inside the JAXB object.
-   * This is why there is not a <CODE>set</CODE> method for the jpaAttribute property.
-   * 
-   * <p>
-   * For example, to add a new item, do as follows:
-   * <pre>
-   * getJPAAttribute().add(newItem);
-   * </pre>
-   * 
-   * 
-   * <p>
-   * Objects of the following type(s) are allowed in the list {@link JPAAttributeMapType.JPAAttribute }
-   * 
-   * 
-   */
-  public List<JPAAttributeMapType.JPAAttribute> getJPAAttribute() {
-    if (jpaAttribute == null) {
-      jpaAttribute = new ArrayList<JPAAttributeMapType.JPAAttribute>();
-    }
-    return jpaAttribute;
-  }
-
-  /**
-   * <p>Java class for anonymous complex type.
-   * 
-   * <p>The following schema fragment specifies the expected content contained within this class.
-   * 
-   * <pre>
-   * &lt;complexType>
-   * &lt;simpleContent>
-   * &lt;extension base="&lt;http://www.w3.org/2001/XMLSchema>string">
-   * &lt;attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-   * &lt;attribute name="exclude" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
-   * &lt;/extension>
-   * &lt;/simpleContent>
-   * &lt;/complexType>
-   * </pre>
-   * 
-   * 
-   */
-  @XmlAccessorType(XmlAccessType.FIELD)
-  @XmlType(name = "", propOrder = { "value" })
-  public static class JPAAttribute {
-
-    @XmlValue
-    protected String value;
-    @XmlAttribute(name = "name", required = true)
-    protected String name;
-    @XmlAttribute(name = "exclude")
-    protected Boolean exclude;
+    @XmlElement(name = "JPAAttribute")
+    protected List<JPAAttributeMapType.JPAAttribute> jpaAttribute;
 
     /**
-     * Gets the value of the value property.
+     * Gets the value of the jpaAttribute property.
      * 
-     * @return
-     * possible object is {@link String }
+     * <p>
+     * This accessor method returns a reference to the live list, not a snapshot. Therefore any
+     * modification you make to the returned list will be present inside the JAXB object. This is why
+     * there is not a <CODE>set</CODE> method for the jpaAttribute property.
      * 
-     */
-    public String getValue() {
-      return value;
-    }
-
-    /**
-     * Sets the value of the value property.
+     * <p>
+     * For example, to add a new item, do as follows:
+     *
+     * <pre>
+     * getJPAAttribute().add(newItem);
+     * </pre>
      * 
-     * @param value
-     * allowed object is {@link String }
      * 
-     */
-    public void setValue(final String value) {
-      this.value = value;
-    }
-
-    /**
-     * Gets the value of the name property.
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link JPAAttributeMapType.JPAAttribute }
      * 
-     * @return
-     * possible object is {@link String }
      * 
      */
-    public String getName() {
-      return name;
+    public List<JPAAttributeMapType.JPAAttribute> getJPAAttribute() {
+        if (jpaAttribute == null) {
+            jpaAttribute = new ArrayList<JPAAttributeMapType.JPAAttribute>();
+        }
+        return jpaAttribute;
     }
 
     /**
-     * Sets the value of the name property.
+     * <p>
+     * Java class for anonymous complex type.
      * 
-     * @param value
-     * allowed object is {@link String }
+     * <p>
+     * The following schema fragment specifies the expected content contained within this class.
      * 
-     */
-    public void setName(final String value) {
-      name = value;
-    }
-
-    /**
-     * Gets the value of the exclude property.
+     * <pre>
+     * &lt;complexType>
+     * &lt;simpleContent>
+     * &lt;extension base="&lt;http://www.w3.org/2001/XMLSchema>string">
+     * &lt;attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+     * &lt;attribute name="exclude" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
+     * &lt;/extension>
+     * &lt;/simpleContent>
+     * &lt;/complexType>
+     * </pre>
      * 
-     * @return
-     * possible object is {@link Boolean }
      * 
      */
-    public boolean isExclude() {
-      if (exclude == null) {
-        return false;
-      } else {
-        return exclude;
-      }
-    }
+    @XmlAccessorType(XmlAccessType.FIELD)
+    @XmlType(name = "", propOrder = {"value"})
+    public static class JPAAttribute {
 
-    /**
-     * Sets the value of the exclude property.
-     * 
-     * @param value
-     * allowed object is {@link Boolean }
-     * 
-     */
-    public void setExclude(final Boolean value) {
-      exclude = value;
-    }
+        @XmlValue
+        protected String value;
+        @XmlAttribute(name = "name", required = true)
+        protected String name;
+        @XmlAttribute(name = "exclude")
+        protected Boolean exclude;
 
-  }
+        /**
+         * Gets the value of the value property.
+         * 
+         * @return possible object is {@link String }
+         * 
+         */
+        public String getValue() {
+            return value;
+        }
+
+        /**
+         * Sets the value of the value property.
+         * 
+         * @param value allowed object is {@link String }
+         * 
+         */
+        public void setValue(final String value) {
+            this.value = value;
+        }
+
+        /**
+         * Gets the value of the name property.
+         * 
+         * @return possible object is {@link String }
+         * 
+         */
+        public String getName() {
+            return name;
+        }
+
+        /**
+         * Sets the value of the name property.
+         * 
+         * @param value allowed object is {@link String }
+         * 
+         */
+        public void setName(final String value) {
+            name = value;
+        }
+
+        /**
+         * Gets the value of the exclude property.
+         * 
+         * @return possible object is {@link Boolean }
+         * 
+         */
+        public boolean isExclude() {
+            if (exclude == null) {
+                return false;
+            }
+            return exclude;
+        }
+
+        /**
+         * Sets the value of the exclude property.
+         * 
+         * @param value allowed object is {@link Boolean }
+         * 
+         */
+        public void setExclude(final Boolean value) {
+            exclude = value;
+        }
+
+    }
 
 }
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEdmMappingModel.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEdmMappingModel.java
index a4175d48..b2b255cb 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEdmMappingModel.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEdmMappingModel.java
@@ -1,37 +1,32 @@
 /*******************************************************************************
- * 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
- * 
+ * 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.
+ *
+ * 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.odata2.jpa.processor.api.model.mapping;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlRootElement;
+import jakarta.xml.bind.annotation.XmlType;
 
 /**
  * <p>
  * Java class for anonymous complex type.
- * 
+ *
  * <p>
- * The following schema fragment specifies the expected content contained within
- * this class.
- * 
+ * The following schema fragment specifies the expected content contained within this class.
+ *
  * <pre>
  * &lt;complexType>
  * &lt;complexContent>
@@ -44,36 +39,35 @@ import javax.xml.bind.annotation.XmlType;
  * &lt;/complexContent>
  * &lt;/complexType>
  * </pre>
- * 
- * 
+ *
+ *
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "", propOrder = { "persistenceUnit" })
+@XmlType(name = "", propOrder = {"persistenceUnit"})
 @XmlRootElement(name = "JPAEDMMappingModel")
 public class JPAEdmMappingModel {
 
-  @XmlElement(name = "PersistenceUnit", required = true)
-  protected JPAPersistenceUnitMapType persistenceUnit;
+    @XmlElement(name = "PersistenceUnit", required = true)
+    protected JPAPersistenceUnitMapType persistenceUnit;
 
-  /**
-   * Gets the value of the persistenceUnit property.
-   * 
-   * @return possible object is {@link JPAPersistenceUnitMapType }
-   * 
-   */
-  public JPAPersistenceUnitMapType getPersistenceUnit() {
-    return persistenceUnit;
-  }
+    /**
+     * Gets the value of the persistenceUnit property.
+     *
+     * @return possible object is {@link JPAPersistenceUnitMapType }
+     *
+     */
+    public JPAPersistenceUnitMapType getPersistenceUnit() {
+        return persistenceUnit;
+    }
 
-  /**
-   * Sets the value of the persistenceUnit property.
-   * 
-   * @param value
-   * allowed object is {@link JPAPersistenceUnitMapType }
-   * 
-   */
-  public void setPersistenceUnit(final JPAPersistenceUnitMapType value) {
-    persistenceUnit = value;
-  }
+    /**
+     * Sets the value of the persistenceUnit property.
+     *
+     * @param value allowed object is {@link JPAPersistenceUnitMapType }
+     *
+     */
+    public void setPersistenceUnit(final JPAPersistenceUnitMapType value) {
+        persistenceUnit = value;
+    }
 
 }
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEdmMappingModelFactory.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEdmMappingModelFactory.java
index 84f8b282..5ab4991b 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEdmMappingModelFactory.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEdmMappingModelFactory.java
@@ -1,85 +1,83 @@
 /*******************************************************************************
- * 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
- * 
+ * 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.
+ *
+ * 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.odata2.jpa.processor.api.model.mapping;
 
-import javax.xml.bind.annotation.XmlRegistry;
+import jakarta.xml.bind.annotation.XmlRegistry;
 
 /**
- * This object contains factory methods for each Java content interface and Java
- * element interface generated in the
- * org.apache.olingo.odata2.processor.api.jpa.model.mapping package.
+ * This object contains factory methods for each Java content interface and Java element interface
+ * generated in the org.apache.olingo.odata2.processor.api.jpa.model.mapping package.
  * <p>
- * An ObjectFactory allows you to programatically construct new instances of the
- * Java representation for XML content. The Java representation of XML content
- * can consist of schema derived interfaces and classes representing the binding
- * of schema type definitions, element declarations and model groups. Factory
- * methods for each of these are provided in this class.
- * 
+ * An ObjectFactory allows you to programatically construct new instances of the Java representation
+ * for XML content. The Java representation of XML content can consist of schema derived interfaces
+ * and classes representing the binding of schema type definitions, element declarations and model
+ * groups. Factory methods for each of these are provided in this class.
+ *
  */
 @XmlRegistry
 public class JPAEdmMappingModelFactory {
 
-  /**
-   * Create a new ObjectFactory that can be used to create new instances of
-   * schema derived classes for package:
-   * org.apache.olingo.odata2.processor.api.jpa.model.mapping
-   * 
-   */
-  public JPAEdmMappingModelFactory() {}
+    /**
+     * Create a new ObjectFactory that can be used to create new instances of schema derived classes for
+     * package: org.apache.olingo.odata2.processor.api.jpa.model.mapping
+     * 
+     */
+    public JPAEdmMappingModelFactory() {}
 
-  /**
-   * Create an instance of {@link org.apache.olingo.odata2.jpa.processor.api.model.mapping.JPARelationshipMapType }
-   * 
-   */
-  public JPARelationshipMapType createJPARelationshipMapType() {
-    return new JPARelationshipMapType();
-  }
+    /**
+     * Create an instance of
+     * {@link org.apache.olingo.odata2.jpa.processor.api.model.mapping.JPARelationshipMapType }
+     * 
+     */
+    public JPARelationshipMapType createJPARelationshipMapType() {
+        return new JPARelationshipMapType();
+    }
 
-  /**
-   * Create an instance of {@link org.apache.olingo.odata2.jpa.processor.api.model.mapping.JPAAttributeMapType }
-   * 
-   */
-  public JPAAttributeMapType createJPAAttributeMapType() {
-    return new JPAAttributeMapType();
-  }
+    /**
+     * Create an instance of
+     * {@link org.apache.olingo.odata2.jpa.processor.api.model.mapping.JPAAttributeMapType }
+     * 
+     */
+    public JPAAttributeMapType createJPAAttributeMapType() {
+        return new JPAAttributeMapType();
+    }
 
-  /**
-   * Create an instance of {@link org.apache.olingo.odata2.jpa.processor.api.model.mapping.JPAEdmMappingModel }
-   * 
-   */
-  public JPAEdmMappingModel createJPAEDMMappingModel() {
-    return new JPAEdmMappingModel();
-  }
+    /**
+     * Create an instance of
+     * {@link org.apache.olingo.odata2.jpa.processor.api.model.mapping.JPAEdmMappingModel }
+     * 
+     */
+    public JPAEdmMappingModel createJPAEDMMappingModel() {
+        return new JPAEdmMappingModel();
+    }
 
-  /**
-   * Create an instance of {@link org.apache.olingo.odata2.jpa.processor.api.model.mapping.JPAPersistenceUnitMapType }
-   * 
-   */
-  public JPAPersistenceUnitMapType createJPAPersistenceUnitMapType() {
-    return new JPAPersistenceUnitMapType();
-  }
+    /**
+     * Create an instance of
+     * {@link org.apache.olingo.odata2.jpa.processor.api.model.mapping.JPAPersistenceUnitMapType }
+     * 
+     */
+    public JPAPersistenceUnitMapType createJPAPersistenceUnitMapType() {
+        return new JPAPersistenceUnitMapType();
+    }
 
-  /**
-   * Create an instance of {@link org.apache.olingo.odata2.jpa.processor.api.model.mapping.JPAEmbeddableTypeMapType }
-   * 
-   */
-  public JPAEmbeddableTypeMapType createJPAEmbeddableTypeMapType() {
-    return new JPAEmbeddableTypeMapType();
-  }
+    /**
+     * Create an instance of
+     * {@link org.apache.olingo.odata2.jpa.processor.api.model.mapping.JPAEmbeddableTypeMapType }
+     * 
+     */
+    public JPAEmbeddableTypeMapType createJPAEmbeddableTypeMapType() {
+        return new JPAEmbeddableTypeMapType();
+    }
 }
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEmbeddableTypeMapType.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEmbeddableTypeMapType.java
index e6406738..47803af2 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEmbeddableTypeMapType.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEmbeddableTypeMapType.java
@@ -1,40 +1,37 @@
 /*******************************************************************************
- * 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
- * 
+ * 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.
+ *
+ * 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.odata2.jpa.processor.api.model.mapping;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlType;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlAttribute;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlType;
 
 /**
- * 
- * The default name for EDM
- * complex type is derived from JPA Embeddable type name. This can be
+ *
+ * The default name for EDM complex type is derived from JPA Embeddable type name. This can be
  * overriden using JPAEmbeddableTypeMapType.
- * 
- * 
- * <p>Java class for JPAEmbeddableTypeMapType complex type.
- * 
- * <p>The following schema fragment specifies the expected content contained within this class.
- * 
+ *
+ *
+ * <p>
+ * Java class for JPAEmbeddableTypeMapType complex type.
+ *
+ * <p>
+ * The following schema fragment specifies the expected content contained within this class.
+ *
  * <pre>
  * &lt;complexType name="JPAEmbeddableTypeMapType">
  * &lt;complexContent>
@@ -50,112 +47,103 @@ import javax.xml.bind.annotation.XmlType;
  * &lt;/complexContent>
  * &lt;/complexType>
  * </pre>
- * 
- * 
+ *
+ *
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "JPAEmbeddableTypeMapType", propOrder = { "edmComplexType", "jpaAttributes" })
+@XmlType(name = "JPAEmbeddableTypeMapType", propOrder = {"edmComplexType", "jpaAttributes"})
 public class JPAEmbeddableTypeMapType {
 
-  @XmlElement(name = "EDMComplexType")
-  protected String edmComplexType;
-  @XmlElement(name = "JPAAttributes", required = true)
-  protected JPAAttributeMapType jpaAttributes;
-  @XmlAttribute(name = "name", required = true)
-  protected String name;
-  @XmlAttribute(name = "exclude")
-  protected Boolean exclude;
+    @XmlElement(name = "EDMComplexType")
+    protected String edmComplexType;
+    @XmlElement(name = "JPAAttributes", required = true)
+    protected JPAAttributeMapType jpaAttributes;
+    @XmlAttribute(name = "name", required = true)
+    protected String name;
+    @XmlAttribute(name = "exclude")
+    protected Boolean exclude;
 
-  /**
-   * Gets the value of the edmComplexType property.
-   * 
-   * @return
-   * possible object is {@link String }
-   * 
-   */
-  public String getEDMComplexType() {
-    return edmComplexType;
-  }
+    /**
+     * Gets the value of the edmComplexType property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getEDMComplexType() {
+        return edmComplexType;
+    }
 
-  /**
-   * Sets the value of the edmComplexType property.
-   * 
-   * @param value
-   * allowed object is {@link String }
-   * 
-   */
-  public void setEDMComplexType(final String value) {
-    edmComplexType = value;
-  }
+    /**
+     * Sets the value of the edmComplexType property.
+     * 
+     * @param value allowed object is {@link String }
+     * 
+     */
+    public void setEDMComplexType(final String value) {
+        edmComplexType = value;
+    }
 
-  /**
-   * Gets the value of the jpaAttributes property.
-   * 
-   * @return
-   * possible object is {@link JPAAttributeMapType }
-   * 
-   */
-  public JPAAttributeMapType getJPAAttributes() {
-    return jpaAttributes;
-  }
+    /**
+     * Gets the value of the jpaAttributes property.
+     * 
+     * @return possible object is {@link JPAAttributeMapType }
+     * 
+     */
+    public JPAAttributeMapType getJPAAttributes() {
+        return jpaAttributes;
+    }
 
-  /**
-   * Sets the value of the jpaAttributes property.
-   * 
-   * @param value
-   * allowed object is {@link JPAAttributeMapType }
-   * 
-   */
-  public void setJPAAttributes(final JPAAttributeMapType value) {
-    jpaAttributes = value;
-  }
+    /**
+     * Sets the value of the jpaAttributes property.
+     * 
+     * @param value allowed object is {@link JPAAttributeMapType }
+     * 
+     */
+    public void setJPAAttributes(final JPAAttributeMapType value) {
+        jpaAttributes = value;
+    }
 
-  /**
-   * Gets the value of the name property.
-   * 
-   * @return
-   * possible object is {@link String }
-   * 
-   */
-  public String getName() {
-    return name;
-  }
+    /**
+     * Gets the value of the name property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getName() {
+        return name;
+    }
 
-  /**
-   * Sets the value of the name property.
-   * 
-   * @param value
-   * allowed object is {@link String }
-   * 
-   */
-  public void setName(final String value) {
-    name = value;
-  }
+    /**
+     * Sets the value of the name property.
+     * 
+     * @param value allowed object is {@link String }
+     * 
+     */
+    public void setName(final String value) {
+        name = value;
+    }
 
-  /**
-   * Gets the value of the exclude property.
-   * 
-   * @return
-   * possible object is {@link Boolean }
-   * 
-   */
-  public boolean isExclude() {
-    if (exclude == null) {
-      return false;
-    } else {
-      return exclude;
+    /**
+     * Gets the value of the exclude property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public boolean isExclude() {
+        if (exclude == null) {
+            return false;
+        }
+        return exclude;
     }
-  }
 
-  /**
-   * Sets the value of the exclude property.
-   * 
-   * @param value
-   * allowed object is {@link Boolean }
-   * 
-   */
-  public void setExclude(final Boolean value) {
-    exclude = value;
-  }
+    /**
+     * Sets the value of the exclude property.
+     * 
+     * @param value allowed object is {@link Boolean }
+     * 
+     */
+    public void setExclude(final Boolean value) {
+        exclude = value;
+    }
 
 }
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEmbeddableTypesMapType.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEmbeddableTypesMapType.java
index 62931244..6bec5a12 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEmbeddableTypesMapType.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEmbeddableTypesMapType.java
@@ -1,39 +1,33 @@
 /*******************************************************************************
- * 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
- * 
+ * 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.
+ *
+ * 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.odata2.jpa.processor.api.model.mapping;
 
 import java.util.ArrayList;
 import java.util.List;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlType;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlType;
 
 /**
  * <p>
  * Java class for JPAEmbeddableTypesMapType complex type.
- * 
+ *
  * <p>
- * The following schema fragment specifies the expected content contained within
- * this class.
- * 
+ * The following schema fragment specifies the expected content contained within this class.
+ *
  * <pre>
  * &lt;complexType name="JPAEmbeddableTypesMapType">
  * &lt;complexContent>
@@ -47,43 +41,42 @@ import javax.xml.bind.annotation.XmlType;
  * &lt;/complexContent>
  * &lt;/complexType>
  * </pre>
- * 
- * 
+ *
+ *
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "JPAEmbeddableTypesMapType", propOrder = { "jpaEmbeddableType" })
+@XmlType(name = "JPAEmbeddableTypesMapType", propOrder = {"jpaEmbeddableType"})
 public class JPAEmbeddableTypesMapType {
 
-  @XmlElement(name = "JPAEmbeddableType")
-  protected List<JPAEmbeddableTypeMapType> jpaEmbeddableType;
+    @XmlElement(name = "JPAEmbeddableType")
+    protected List<JPAEmbeddableTypeMapType> jpaEmbeddableType;
 
-  /**
-   * Gets the value of the jpaEmbeddableType property.
-   * 
-   * <p>
-   * This accessor method returns a reference to the live list, not a
-   * snapshot. Therefore any modification you make to the returned list will
-   * be present inside the JAXB object. This is why there is not a
-   * <CODE>set</CODE> method for the jpaEmbeddableType property.
-   * 
-   * <p>
-   * For example, to add a new item, do as follows:
-   * 
-   * <pre>
-   * getJPAEmbeddableType().add(newItem);
-   * </pre>
-   * 
-   * 
-   * <p>
-   * Objects of the following type(s) are allowed in the list {@link JPAEmbeddableTypeMapType }
-   * 
-   * 
-   */
-  public List<JPAEmbeddableTypeMapType> getJPAEmbeddableType() {
-    if (jpaEmbeddableType == null) {
-      jpaEmbeddableType = new ArrayList<JPAEmbeddableTypeMapType>();
+    /**
+     * Gets the value of the jpaEmbeddableType property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list, not a snapshot. Therefore any
+     * modification you make to the returned list will be present inside the JAXB object. This is why
+     * there is not a <CODE>set</CODE> method for the jpaEmbeddableType property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * 
+     * <pre>
+     * getJPAEmbeddableType().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list {@link JPAEmbeddableTypeMapType }
+     * 
+     * 
+     */
+    public List<JPAEmbeddableTypeMapType> getJPAEmbeddableType() {
+        if (jpaEmbeddableType == null) {
+            jpaEmbeddableType = new ArrayList<JPAEmbeddableTypeMapType>();
+        }
+        return jpaEmbeddableType;
     }
-    return jpaEmbeddableType;
-  }
 
 }
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEntityTypeMapType.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEntityTypeMapType.java
index 22e18192..8c989234 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEntityTypeMapType.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEntityTypeMapType.java
@@ -1,40 +1,37 @@
 /*******************************************************************************
- * 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
- * 
+ * 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.
+ *
+ * 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.odata2.jpa.processor.api.model.mapping;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlType;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlAttribute;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlType;
 
 /**
- * 
- * The default name for EDM
- * entity type is derived from JPA entity type name. This can be
- * overriden using JPAEntityTypeMapType.
- * 
- * 
- * <p>Java class for JPAEntityTypeMapType complex type.
- * 
- * <p>The following schema fragment specifies the expected content contained within this class.
- * 
+ *
+ * The default name for EDM entity type is derived from JPA entity type name. This can be overriden
+ * using JPAEntityTypeMapType.
+ *
+ *
+ * <p>
+ * Java class for JPAEntityTypeMapType complex type.
+ *
+ * <p>
+ * The following schema fragment specifies the expected content contained within this class.
+ *
  * <pre>
  * &lt;complexType name="JPAEntityTypeMapType">
  * &lt;complexContent>
@@ -53,161 +50,147 @@ import javax.xml.bind.annotation.XmlType;
  * &lt;/complexContent>
  * &lt;/complexType>
  * </pre>
- * 
- * 
+ *
+ *
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "JPAEntityTypeMapType", propOrder = { "edmEntityType", "edmEntitySet", "jpaAttributes",
-    "jpaRelationships" })
+@XmlType(name = "JPAEntityTypeMapType", propOrder = {"edmEntityType", "edmEntitySet", "jpaAttributes", "jpaRelationships"})
 public class JPAEntityTypeMapType {
 
-  @XmlElement(name = "EDMEntityType")
-  protected String edmEntityType;
-  @XmlElement(name = "EDMEntitySet")
-  protected String edmEntitySet;
-  @XmlElement(name = "JPAAttributes", required = true)
-  protected JPAAttributeMapType jpaAttributes;
-  @XmlElement(name = "JPARelationships", required = true)
-  protected JPARelationshipMapType jpaRelationships;
-  @XmlAttribute(name = "name", required = true)
-  protected String name;
-  @XmlAttribute(name = "exclude")
-  protected Boolean exclude;
-
-  /**
-   * Gets the value of the edmEntityType property.
-   * 
-   * @return
-   * possible object is {@link String }
-   * 
-   */
-  public String getEDMEntityType() {
-    return edmEntityType;
-  }
-
-  /**
-   * Sets the value of the edmEntityType property.
-   * 
-   * @param value
-   * allowed object is {@link String }
-   * 
-   */
-  public void setEDMEntityType(final String value) {
-    edmEntityType = value;
-  }
-
-  /**
-   * Gets the value of the edmEntitySet property.
-   * 
-   * @return
-   * possible object is {@link String }
-   * 
-   */
-  public String getEDMEntitySet() {
-    return edmEntitySet;
-  }
-
-  /**
-   * Sets the value of the edmEntitySet property.
-   * 
-   * @param value
-   * allowed object is {@link String }
-   * 
-   */
-  public void setEDMEntitySet(final String value) {
-    edmEntitySet = value;
-  }
-
-  /**
-   * Gets the value of the jpaAttributes property.
-   * 
-   * @return
-   * possible object is {@link JPAAttributeMapType }
-   * 
-   */
-  public JPAAttributeMapType getJPAAttributes() {
-    return jpaAttributes;
-  }
-
-  /**
-   * Sets the value of the jpaAttributes property.
-   * 
-   * @param value
-   * allowed object is {@link JPAAttributeMapType }
-   * 
-   */
-  public void setJPAAttributes(final JPAAttributeMapType value) {
-    jpaAttributes = value;
-  }
-
-  /**
-   * Gets the value of the jpaRelationships property.
-   * 
-   * @return
-   * possible object is {@link JPARelationshipMapType }
-   * 
-   */
-  public JPARelationshipMapType getJPARelationships() {
-    return jpaRelationships;
-  }
-
-  /**
-   * Sets the value of the jpaRelationships property.
-   * 
-   * @param value
-   * allowed object is {@link JPARelationshipMapType }
-   * 
-   */
-  public void setJPARelationships(final JPARelationshipMapType value) {
-    jpaRelationships = value;
-  }
-
-  /**
-   * Gets the value of the name property.
-   * 
-   * @return
-   * possible object is {@link String }
-   * 
-   */
-  public String getName() {
-    return name;
-  }
-
-  /**
-   * Sets the value of the name property.
-   * 
-   * @param value
-   * allowed object is {@link String }
-   * 
-   */
-  public void setName(final String value) {
-    name = value;
-  }
-
-  /**
-   * Gets the value of the exclude property.
-   * 
-   * @return
-   * possible object is {@link Boolean }
-   * 
-   */
-  public boolean isExclude() {
-    if (exclude == null) {
-      return false;
-    } else {
-      return exclude;
+    @XmlElement(name = "EDMEntityType")
+    protected String edmEntityType;
+    @XmlElement(name = "EDMEntitySet")
+    protected String edmEntitySet;
+    @XmlElement(name = "JPAAttributes", required = true)
+    protected JPAAttributeMapType jpaAttributes;
+    @XmlElement(name = "JPARelationships", required = true)
+    protected JPARelationshipMapType jpaRelationships;
+    @XmlAttribute(name = "name", required = true)
+    protected String name;
+    @XmlAttribute(name = "exclude")
+    protected Boolean exclude;
+
+    /**
+     * Gets the value of the edmEntityType property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getEDMEntityType() {
+        return edmEntityType;
+    }
+
+    /**
+     * Sets the value of the edmEntityType property.
+     * 
+     * @param value allowed object is {@link String }
+     * 
+     */
+    public void setEDMEntityType(final String value) {
+        edmEntityType = value;
+    }
+
+    /**
+     * Gets the value of the edmEntitySet property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getEDMEntitySet() {
+        return edmEntitySet;
+    }
+
+    /**
+     * Sets the value of the edmEntitySet property.
+     * 
+     * @param value allowed object is {@link String }
+     * 
+     */
+    public void setEDMEntitySet(final String value) {
+        edmEntitySet = value;
+    }
+
+    /**
+     * Gets the value of the jpaAttributes property.
+     * 
+     * @return possible object is {@link JPAAttributeMapType }
+     * 
+     */
+    public JPAAttributeMapType getJPAAttributes() {
+        return jpaAttributes;
+    }
+
+    /**
+     * Sets the value of the jpaAttributes property.
+     * 
+     * @param value allowed object is {@link JPAAttributeMapType }
+     * 
+     */
+    public void setJPAAttributes(final JPAAttributeMapType value) {
+        jpaAttributes = value;
+    }
+
+    /**
+     * Gets the value of the jpaRelationships property.
+     * 
+     * @return possible object is {@link JPARelationshipMapType }
+     * 
+     */
+    public JPARelationshipMapType getJPARelationships() {
+        return jpaRelationships;
+    }
+
+    /**
+     * Sets the value of the jpaRelationships property.
+     * 
+     * @param value allowed object is {@link JPARelationshipMapType }
+     * 
+     */
+    public void setJPARelationships(final JPARelationshipMapType value) {
+        jpaRelationships = value;
+    }
+
+    /**
+     * Gets the value of the name property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Sets the value of the name property.
+     * 
+     * @param value allowed object is {@link String }
+     * 
+     */
+    public void setName(final String value) {
+        name = value;
+    }
+
+    /**
+     * Gets the value of the exclude property.
+     * 
+     * @return possible object is {@link Boolean }
+     * 
+     */
+    public boolean isExclude() {
+        if (exclude == null) {
+            return false;
+        }
+        return exclude;
+    }
+
+    /**
+     * Sets the value of the exclude property.
+     * 
+     * @param value allowed object is {@link Boolean }
+     * 
+     */
+    public void setExclude(final Boolean value) {
+        exclude = value;
     }
-  }
-
-  /**
-   * Sets the value of the exclude property.
-   * 
-   * @param value
-   * allowed object is {@link Boolean }
-   * 
-   */
-  public void setExclude(final Boolean value) {
-    exclude = value;
-  }
 
 }
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEntityTypesMapType.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEntityTypesMapType.java
index 7a72e084..afacacec 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEntityTypesMapType.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAEntityTypesMapType.java
@@ -1,39 +1,33 @@
 /*******************************************************************************
- * 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
- * 
+ * 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.
+ *
+ * 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.odata2.jpa.processor.api.model.mapping;
 
 import java.util.ArrayList;
 import java.util.List;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlType;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlType;
 
 /**
  * <p>
  * Java class for JPAEntityTypesMapType complex type.
- * 
+ *
  * <p>
- * The following schema fragment specifies the expected content contained within
- * this class.
- * 
+ * The following schema fragment specifies the expected content contained within this class.
+ *
  * <pre>
  * &lt;complexType name="JPAEntityTypesMapType">
  * &lt;complexContent>
@@ -47,43 +41,42 @@ import javax.xml.bind.annotation.XmlType;
  * &lt;/complexContent>
  * &lt;/complexType>
  * </pre>
- * 
- * 
+ *
+ *
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "JPAEntityTypesMapType", propOrder = { "jpaEntityType" })
+@XmlType(name = "JPAEntityTypesMapType", propOrder = {"jpaEntityType"})
 public class JPAEntityTypesMapType {
 
-  @XmlElement(name = "JPAEntityType")
-  protected List<JPAEntityTypeMapType> jpaEntityType;
+    @XmlElement(name = "JPAEntityType")
+    protected List<JPAEntityTypeMapType> jpaEntityType;
 
-  /**
-   * Gets the value of the jpaEntityType property.
-   * 
-   * <p>
-   * This accessor method returns a reference to the live list, not a
-   * snapshot. Therefore any modification you make to the returned list will
-   * be present inside the JAXB object. This is why there is not a
-   * <CODE>set</CODE> method for the jpaEntityType property.
-   * 
-   * <p>
-   * For example, to add a new item, do as follows:
-   * 
-   * <pre>
-   * getJPAEntityType().add(newItem);
-   * </pre>
-   * 
-   * 
-   * <p>
-   * Objects of the following type(s) are allowed in the list {@link JPAEntityTypeMapType }
-   * 
-   * 
-   */
-  public List<JPAEntityTypeMapType> getJPAEntityType() {
-    if (jpaEntityType == null) {
-      jpaEntityType = new ArrayList<JPAEntityTypeMapType>();
+    /**
+     * Gets the value of the jpaEntityType property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list, not a snapshot. Therefore any
+     * modification you make to the returned list will be present inside the JAXB object. This is why
+     * there is not a <CODE>set</CODE> method for the jpaEntityType property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * 
+     * <pre>
+     * getJPAEntityType().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list {@link JPAEntityTypeMapType }
+     * 
+     * 
+     */
+    public List<JPAEntityTypeMapType> getJPAEntityType() {
+        if (jpaEntityType == null) {
+            jpaEntityType = new ArrayList<JPAEntityTypeMapType>();
+        }
+        return jpaEntityType;
     }
-    return jpaEntityType;
-  }
 
 }
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAPersistenceUnitMapType.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAPersistenceUnitMapType.java
index 22260eac..7ce8c0aa 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAPersistenceUnitMapType.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPAPersistenceUnitMapType.java
@@ -1,42 +1,37 @@
 /*******************************************************************************
- * 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
- * 
+ * 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.
+ *
+ * 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.odata2.jpa.processor.api.model.mapping;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlType;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlAttribute;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlType;
 
 /**
- * 
- * By default Java Persistence Unit name is taken as EDM schema name. This can
- * be overriden using JPAPersistenceUnitMapType.
- * 
- * 
+ *
+ * By default Java Persistence Unit name is taken as EDM schema name. This can be overriden using
+ * JPAPersistenceUnitMapType.
+ *
+ *
  * <p>
  * Java class for JPAPersistenceUnitMapType complex type.
- * 
+ *
  * <p>
- * The following schema fragment specifies the expected content contained within
- * this class.
- * 
+ * The following schema fragment specifies the expected content contained within this class.
+ *
  * <pre>
  * &lt;complexType name="JPAPersistenceUnitMapType">
  * &lt;complexContent>
@@ -53,105 +48,100 @@ import javax.xml.bind.annotation.XmlType;
  * &lt;/complexContent>
  * &lt;/complexType>
  * </pre>
- * 
- * 
+ *
+ *
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "JPAPersistenceUnitMapType",
-    propOrder = { "edmSchemaNamespace", "jpaEntityTypes", "jpaEmbeddableTypes" })
+@XmlType(name = "JPAPersistenceUnitMapType", propOrder = {"edmSchemaNamespace", "jpaEntityTypes", "jpaEmbeddableTypes"})
 public class JPAPersistenceUnitMapType {
 
-  @XmlElement(name = "EDMSchemaNamespace")
-  protected String edmSchemaNamespace;
-  @XmlElement(name = "JPAEntityTypes", required = true)
-  protected JPAEntityTypesMapType jpaEntityTypes;
-  @XmlElement(name = "JPAEmbeddableTypes", required = true)
-  protected JPAEmbeddableTypesMapType jpaEmbeddableTypes;
-  @XmlAttribute(name = "name", required = true)
-  protected String name;
+    @XmlElement(name = "EDMSchemaNamespace")
+    protected String edmSchemaNamespace;
+    @XmlElement(name = "JPAEntityTypes", required = true)
+    protected JPAEntityTypesMapType jpaEntityTypes;
+    @XmlElement(name = "JPAEmbeddableTypes", required = true)
+    protected JPAEmbeddableTypesMapType jpaEmbeddableTypes;
+    @XmlAttribute(name = "name", required = true)
+    protected String name;
 
-  /**
-   * Gets the value of the edmSchemaNamespace property.
-   * 
-   * @return possible object is {@link String }
-   * 
-   */
-  public String getEDMSchemaNamespace() {
-    return edmSchemaNamespace;
-  }
+    /**
+     * Gets the value of the edmSchemaNamespace property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getEDMSchemaNamespace() {
+        return edmSchemaNamespace;
+    }
 
-  /**
-   * Sets the value of the edmSchemaNamespace property.
-   * 
-   * @param value
-   * allowed object is {@link String }
-   * 
-   */
-  public void setEDMSchemaNamespace(final String value) {
-    edmSchemaNamespace = value;
-  }
+    /**
+     * Sets the value of the edmSchemaNamespace property.
+     * 
+     * @param value allowed object is {@link String }
+     * 
+     */
+    public void setEDMSchemaNamespace(final String value) {
+        edmSchemaNamespace = value;
+    }
 
-  /**
-   * Gets the value of the jpaEntityTypes property.
-   * 
-   * @return possible object is {@link JPAEntityTypesMapType }
-   * 
-   */
-  public JPAEntityTypesMapType getJPAEntityTypes() {
-    return jpaEntityTypes;
-  }
+    /**
+     * Gets the value of the jpaEntityTypes property.
+     * 
+     * @return possible object is {@link JPAEntityTypesMapType }
+     * 
+     */
+    public JPAEntityTypesMapType getJPAEntityTypes() {
+        return jpaEntityTypes;
+    }
 
-  /**
-   * Sets the value of the jpaEntityTypes property.
-   * 
-   * @param value
-   * allowed object is {@link JPAEntityTypesMapType }
-   * 
-   */
-  public void setJPAEntityTypes(final JPAEntityTypesMapType value) {
-    jpaEntityTypes = value;
-  }
+    /**
+     * Sets the value of the jpaEntityTypes property.
+     * 
+     * @param value allowed object is {@link JPAEntityTypesMapType }
+     * 
+     */
+    public void setJPAEntityTypes(final JPAEntityTypesMapType value) {
+        jpaEntityTypes = value;
+    }
 
-  /**
-   * Gets the value of the jpaEmbeddableTypes property.
-   * 
-   * @return possible object is {@link JPAEmbeddableTypesMapType }
-   * 
-   */
-  public JPAEmbeddableTypesMapType getJPAEmbeddableTypes() {
-    return jpaEmbeddableTypes;
-  }
+    /**
+     * Gets the value of the jpaEmbeddableTypes property.
+     * 
+     * @return possible object is {@link JPAEmbeddableTypesMapType }
+     * 
+     */
+    public JPAEmbeddableTypesMapType getJPAEmbeddableTypes() {
+        return jpaEmbeddableTypes;
+    }
 
-  /**
-   * Sets the value of the jpaEmbeddableTypes property.
-   * 
-   * @param value
-   * allowed object is {@link JPAEmbeddableTypesMapType }
-   * 
-   */
-  public void setJPAEmbeddableTypes(final JPAEmbeddableTypesMapType value) {
-    jpaEmbeddableTypes = value;
-  }
+    /**
+     * Sets the value of the jpaEmbeddableTypes property.
+     * 
+     * @param value allowed object is {@link JPAEmbeddableTypesMapType }
+     * 
+     */
+    public void setJPAEmbeddableTypes(final JPAEmbeddableTypesMapType value) {
+        jpaEmbeddableTypes = value;
+    }
 
-  /**
-   * Gets the value of the name property.
-   * 
-   * @return possible object is {@link String }
-   * 
-   */
-  public String getName() {
-    return name;
-  }
+    /**
+     * Gets the value of the name property.
+     * 
+     * @return possible object is {@link String }
+     * 
+     */
+    public String getName() {
+        return name;
+    }
 
-  /**
-   * Sets the value of the name property.
-   * 
-   * @param value
-   * allowed object is {@link String }
-   * 
-   */
-  public void setName(final String value) {
-    name = value;
-  }
+    /**
+     * Sets the value of the name property.
+     * 
+     * @param value allowed object is {@link String }
+     * 
+     */
+    public void setName(final String value) {
+        name = value;
+    }
 
 }
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPARelationshipMapType.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPARelationshipMapType.java
index 25a2f956..50970877 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPARelationshipMapType.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/JPARelationshipMapType.java
@@ -1,46 +1,40 @@
 /*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
+ * 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.
+ *
+ * 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.odata2.jpa.processor.api.model.mapping;
 
 import java.util.ArrayList;
 import java.util.List;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlValue;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlAttribute;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlType;
+import jakarta.xml.bind.annotation.XmlValue;
 
 /**
- * 
- * The default name for EDM navigation property is derived from JPA relationship
- * name. This can be overriden using JPARelationshipMapType.
- * 
- * 
+ *
+ * The default name for EDM navigation property is derived from JPA relationship name. This can be
+ * overriden using JPARelationshipMapType.
+ *
+ *
  * <p>
  * Java class for JPARelationshipMapType complex type.
- * 
+ *
  * <p>
- * The following schema fragment specifies the expected content contained within
- * this class.
- * 
+ * The following schema fragment specifies the expected content contained within this class.
+ *
  * <pre>
  * &lt;complexType name="JPARelationshipMapType">
  * &lt;complexContent>
@@ -60,116 +54,113 @@ import javax.xml.bind.annotation.XmlValue;
  * &lt;/complexContent>
  * &lt;/complexType>
  * </pre>
- * 
- * 
+ *
+ *
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "JPARelationshipMapType", propOrder = { "jpaRelationship" })
+@XmlType(name = "JPARelationshipMapType", propOrder = {"jpaRelationship"})
 public class JPARelationshipMapType {
 
-  @XmlElement(name = "JPARelationship")
-  protected List<JPARelationshipMapType.JPARelationship> jpaRelationship;
-
-  /**
-   * Gets the value of the jpaRelationship property.
-   * 
-   * <p>
-   * This accessor method returns a reference to the live list, not a
-   * snapshot. Therefore any modification you make to the returned list will
-   * be present inside the JAXB object. This is why there is not a
-   * <CODE>set</CODE> method for the jpaRelationship property.
-   * 
-   * <p>
-   * For example, to add a new item, do as follows:
-   * 
-   * <pre>
-   * getJPARelationship().add(newItem);
-   * </pre>
-   * 
-   * 
-   * <p>
-   * Objects of the following type(s) are allowed in the list {@link JPARelationshipMapType.JPARelationship }
-   * 
-   * 
-   */
-  public List<JPARelationshipMapType.JPARelationship> getJPARelationship() {
-    if (jpaRelationship == null) {
-      jpaRelationship = new ArrayList<JPARelationshipMapType.JPARelationship>();
-    }
-    return jpaRelationship;
-  }
-
-  /**
-   * <p>
-   * Java class for anonymous complex type.
-   * 
-   * <p>
-   * The following schema fragment specifies the expected content contained
-   * within this class.
-   * 
-   * <pre>
-   * &lt;complexType>
-   * &lt;simpleContent>
-   * &lt;extension base="&lt;http://www.w3.org/2001/XMLSchema>string">
-   * &lt;attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
-   * &lt;/extension>
-   * &lt;/simpleContent>
-   * &lt;/complexType>
-   * </pre>
-   * 
-   * 
-   */
-  @XmlAccessorType(XmlAccessType.FIELD)
-  @XmlType(name = "", propOrder = { "value" })
-  public static class JPARelationship {
-
-    @XmlValue
-    protected String value;
-    @XmlAttribute(name = "name", required = true)
-    protected String name;
+    @XmlElement(name = "JPARelationship")
+    protected List<JPARelationshipMapType.JPARelationship> jpaRelationship;
 
     /**
-     * Gets the value of the value property.
+     * Gets the value of the jpaRelationship property.
      * 
-     * @return possible object is {@link String }
+     * <p>
+     * This accessor method returns a reference to the live list, not a snapshot. Therefore any
+     * modification you make to the returned list will be present inside the JAXB object. This is why
+     * there is not a <CODE>set</CODE> method for the jpaRelationship property.
      * 
-     */
-    public String getValue() {
-      return value;
-    }
-
-    /**
-     * Sets the value of the value property.
+     * <p>
+     * For example, to add a new item, do as follows:
      * 
-     * @param value
-     * allowed object is {@link String }
+     * <pre>
+     * getJPARelationship().add(newItem);
+     * </pre>
      * 
-     */
-    public void setValue(final String value) {
-      this.value = value;
-    }
-
-    /**
-     * Gets the value of the name property.
      * 
-     * @return possible object is {@link String }
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link JPARelationshipMapType.JPARelationship }
+     * 
      * 
      */
-    public String getName() {
-      return name;
+    public List<JPARelationshipMapType.JPARelationship> getJPARelationship() {
+        if (jpaRelationship == null) {
+            jpaRelationship = new ArrayList<JPARelationshipMapType.JPARelationship>();
+        }
+        return jpaRelationship;
     }
 
     /**
-     * Sets the value of the name property.
+     * <p>
+     * Java class for anonymous complex type.
+     * 
+     * <p>
+     * The following schema fragment specifies the expected content contained within this class.
+     * 
+     * <pre>
+     * &lt;complexType>
+     * &lt;simpleContent>
+     * &lt;extension base="&lt;http://www.w3.org/2001/XMLSchema>string">
+     * &lt;attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+     * &lt;/extension>
+     * &lt;/simpleContent>
+     * &lt;/complexType>
+     * </pre>
      * 
-     * @param value
-     * allowed object is {@link String }
      * 
      */
-    public void setName(final String value) {
-      name = value;
-    }
+    @XmlAccessorType(XmlAccessType.FIELD)
+    @XmlType(name = "", propOrder = {"value"})
+    public static class JPARelationship {
+
+        @XmlValue
+        protected String value;
+        @XmlAttribute(name = "name", required = true)
+        protected String name;
 
-  }
+        /**
+         * Gets the value of the value property.
+         * 
+         * @return possible object is {@link String }
+         * 
+         */
+        public String getValue() {
+            return value;
+        }
+
+        /**
+         * Sets the value of the value property.
+         * 
+         * @param value allowed object is {@link String }
+         * 
+         */
+        public void setValue(final String value) {
+            this.value = value;
+        }
+
+        /**
+         * Gets the value of the name property.
+         * 
+         * @return possible object is {@link String }
+         * 
+         */
+        public String getName() {
+            return name;
+        }
+
+        /**
+         * Sets the value of the name property.
+         * 
+         * @param value allowed object is {@link String }
+         * 
+         */
+        public void setName(final String value) {
+            name = value;
+        }
+
+    }
 
 }
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/package-info.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/package-info.java
index 45a7c3f9..ed06d383 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/package-info.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/mapping/package-info.java
@@ -1,28 +1,24 @@
 /*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
+ * 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.
+ *
+ * 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.
  ******************************************************************************/
 /**
- * <h3>OData JPA Processor API Library - Mapping Model</h3>
- * The JPA EDM Mapping model (XML document) is represented as JAXB annotated Java Classes.
- * 
- * 
+ * <h3>OData JPA Processor API Library - Mapping Model</h3> The JPA EDM Mapping model (XML document)
+ * is represented as JAXB annotated Java Classes.
+ *
+ *
  */
-@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.apache.org/olingo/odata2/jpa/processor/api/model/mapping",
-    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
+@jakarta.xml.bind.annotation.XmlSchema(namespace = "http://www.apache.org/olingo/odata2/jpa/processor/api/model/mapping",
+        elementFormDefault = jakarta.xml.bind.annotation.XmlNsForm.QUALIFIED)
 package org.apache.olingo.odata2.jpa.processor.api.model.mapping;
 
diff --git a/odata2-jpa-processor/jpa-core/pom.xml b/odata2-jpa-processor/jpa-core/pom.xml
index c8eb662a..2c09c1fa 100644
--- a/odata2-jpa-processor/jpa-core/pom.xml
+++ b/odata2-jpa-processor/jpa-core/pom.xml
@@ -24,7 +24,7 @@
 	<parent>
 		<groupId>org.apache.olingo</groupId>
 		<artifactId>olingo-odata2-jpa-processor</artifactId>
-		<version>2.0.13</version>
+		<version>3.0.0-SNAPSHOT</version>
 		<relativePath>../</relativePath>
 	</parent>
 
@@ -68,10 +68,9 @@
                         <plugin>
                           <groupId>org.apache.maven.plugins</groupId>
                           <artifactId>maven-compiler-plugin</artifactId>
-                          <version>2.3.2</version>
                           <configuration>
-                            <source>1.6</source>
-                            <target>1.6</target>
+                            <source>17</source>
+                            <target>17</target>
                           </configuration>
                         </plugin>
                 </plugins>
@@ -88,9 +87,8 @@
 		<!-- Java Persistence API -->
 		<!-- ########################## -->
 		<dependency>
-			<groupId>org.eclipse.persistence</groupId>
-			<artifactId>javax.persistence</artifactId>
-			<version>${version.javax.persistence}</version>
+		    <groupId>jakarta.persistence</groupId>
+		    <artifactId>jakarta.persistence-api</artifactId>
 		</dependency>
 
 		<!-- ########################## -->
@@ -122,14 +120,13 @@
 		<dependency>
 			<groupId>junit</groupId>
 			<artifactId>junit</artifactId>
-			<version>4.9</version>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
-			<groupId>org.easymock</groupId>
-			<artifactId>easymock</artifactId>
-			<version>3.1</version>
-                        <scope>test</scope>
+		    <groupId>org.easymock</groupId>
+		    <artifactId>easymock</artifactId>
+		    <version>5.2.0</version>
+		    <scope>test</scope>
 		</dependency>
 
 		<!-- ########################## -->
@@ -138,7 +135,6 @@
 		<dependency>
 			<groupId>org.slf4j</groupId>
 			<artifactId>slf4j-api</artifactId>
-			<version>1.7.2</version>
 			<scope>test</scope>
 		</dependency>
 	</dependencies>
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAContextImpl.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAContextImpl.java
index 075d0a1c..2d40bccd 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAContextImpl.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAContextImpl.java
@@ -18,8 +18,8 @@
  ******************************************************************************/
 package org.apache.olingo.odata2.jpa.processor.core;
 
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
 
 import org.apache.olingo.odata2.api.edm.provider.EdmProvider;
 import org.apache.olingo.odata2.api.processor.ODataContext;
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPATransactionLocalDefault.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPATransactionLocalDefault.java
index 532764c6..fc032e10 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPATransactionLocalDefault.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPATransactionLocalDefault.java
@@ -20,8 +20,8 @@ package org.apache.olingo.odata2.jpa.processor.core;
 
 import org.apache.olingo.odata2.jpa.processor.api.ODataJPATransaction;
 
-import javax.persistence.EntityManager;
-import javax.persistence.EntityTransaction;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityTransaction;
 
 public class ODataJPATransactionLocalDefault implements ODataJPATransaction {
 
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntity.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntity.java
index a3f5495c..3db5ab5b 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntity.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntity.java
@@ -1,20 +1,16 @@
 /*******************************************************************************
- * 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
- * 
+ * 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.
+ *
+ * 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.odata2.jpa.processor.core.access.data;
 
@@ -32,10 +28,6 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-
 import org.apache.olingo.odata2.api.edm.EdmEntitySet;
 import org.apache.olingo.odata2.api.edm.EdmEntityType;
 import org.apache.olingo.odata2.api.edm.EdmException;
@@ -43,9 +35,9 @@ import org.apache.olingo.odata2.api.edm.EdmNavigationProperty;
 import org.apache.olingo.odata2.api.edm.EdmProperty;
 import org.apache.olingo.odata2.api.edm.EdmSimpleType;
 import org.apache.olingo.odata2.api.edm.EdmStructuralType;
+import org.apache.olingo.odata2.api.edm.EdmType;
 import org.apache.olingo.odata2.api.edm.EdmTypeKind;
 import org.apache.olingo.odata2.api.edm.EdmTyped;
-import org.apache.olingo.odata2.api.edm.EdmType;
 import org.apache.olingo.odata2.api.ep.entry.EntryMetadata;
 import org.apache.olingo.odata2.api.ep.entry.ODataEntry;
 import org.apache.olingo.odata2.api.ep.feed.ODataFeed;
@@ -55,511 +47,487 @@ import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPAModelExcepti
 import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPARuntimeException;
 import org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmMapping;
 import org.apache.olingo.odata2.jpa.processor.core.model.JPAEdmMappingImpl;
+import jakarta.xml.bind.annotation.adapters.XmlAdapter;
+import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 public class JPAEntity {
 
-  private Object jpaEntity = null;
-  private JPAEntity parentJPAEntity = null;
-  private EdmEntityType oDataEntityType = null;
-  private EdmEntitySet oDataEntitySet = null;
-  private Class<?> jpaType = null;
-  private HashMap<String, Method> accessModifiersWrite = null;
-  private JPAEntityParser jpaEntityParser = null;
-  private ODataJPAContext oDataJPAContext;
-  private OnJPAWriteContent onJPAWriteContent = null;
-  private List<String> relatedJPAEntityLink = new ArrayList<String>();
-  private HashMap<String, List<Object>> relatedJPAEntityMap = null;
-  private EdmNavigationProperty viaNavigationProperty;
-
-  public JPAEntity(final EdmEntityType oDataEntityType, final EdmEntitySet oDataEntitySet,
-      final ODataJPAContext context) {
-    this.oDataEntityType = oDataEntityType;
-    this.oDataEntitySet = oDataEntitySet;
-    oDataJPAContext = context;
-    try {
-      JPAEdmMapping mapping = (JPAEdmMapping) oDataEntityType.getMapping();
-      jpaType = mapping.getJPAType();
-    } catch (EdmException e) {
-      return;
+    private Object jpaEntity = null;
+    private JPAEntity parentJPAEntity = null;
+    private EdmEntityType oDataEntityType = null;
+    private EdmEntitySet oDataEntitySet = null;
+    private Class<?> jpaType = null;
+    private HashMap<String, Method> accessModifiersWrite = null;
+    private JPAEntityParser jpaEntityParser = null;
+    private ODataJPAContext oDataJPAContext;
+    private OnJPAWriteContent onJPAWriteContent = null;
+    private final List<String> relatedJPAEntityLink = new ArrayList<String>();
+    private HashMap<String, List<Object>> relatedJPAEntityMap = null;
+    private EdmNavigationProperty viaNavigationProperty;
+
+    public JPAEntity(final EdmEntityType oDataEntityType, final EdmEntitySet oDataEntitySet, final ODataJPAContext context) {
+        this.oDataEntityType = oDataEntityType;
+        this.oDataEntitySet = oDataEntitySet;
+        oDataJPAContext = context;
+        try {
+            JPAEdmMapping mapping = (JPAEdmMapping) oDataEntityType.getMapping();
+            jpaType = mapping.getJPAType();
+        } catch (EdmException e) {
+            return;
+        }
+        jpaEntityParser = new JPAEntityParser();
+        onJPAWriteContent = oDataJPAContext.getODataContext()
+                                           .getServiceFactory()
+                                           .getCallback(OnJPAWriteContent.class);
+    }
+
+    public void setAccessModifersWrite(final HashMap<String, Method> accessModifiersWrite) {
+        this.accessModifiersWrite = accessModifiersWrite;
     }
-    jpaEntityParser = new JPAEntityParser();
-    onJPAWriteContent = oDataJPAContext.getODataContext().getServiceFactory().getCallback(OnJPAWriteContent.class);
-  }
 
-  public void setAccessModifersWrite(final HashMap<String, Method> accessModifiersWrite) {
-    this.accessModifiersWrite = accessModifiersWrite;
-  }
+    public void setParentJPAEntity(final JPAEntity jpaEntity) {
+        parentJPAEntity = jpaEntity;
+    }
 
-  public void setParentJPAEntity(final JPAEntity jpaEntity) {
-    parentJPAEntity = jpaEntity;
-  }
+    public JPAEntity getParentJPAEntity() {
+        return parentJPAEntity;
+    }
 
-  public JPAEntity getParentJPAEntity() {
-    return parentJPAEntity;
-  }
+    public Object getJPAEntity() {
+        return jpaEntity;
+    }
 
-  public Object getJPAEntity() {
-    return jpaEntity;
-  }
+    public void setViaNavigationProperty(EdmNavigationProperty viaNavigationProperty) {
+        this.viaNavigationProperty = viaNavigationProperty;
+    }
 
-  public void setViaNavigationProperty(EdmNavigationProperty viaNavigationProperty) {
-    this.viaNavigationProperty = viaNavigationProperty;
-  }
+    public EdmNavigationProperty getViaNavigationProperty() {
+        return viaNavigationProperty;
+    }
 
-  public EdmNavigationProperty getViaNavigationProperty() {
-    return viaNavigationProperty;
-  }
+    public void create(final ODataEntry oDataEntry) throws ODataJPARuntimeException {
 
-  public void create(final ODataEntry oDataEntry) throws ODataJPARuntimeException {
+        if (oDataEntry == null) {
+            throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL, null);
+        }
+        try {
+            EntryMetadata entryMetadata = oDataEntry.getMetadata();
+            Map<String, Object> oDataEntryProperties = oDataEntry.getProperties();
+            if (oDataEntry.containsInlineEntry()) {
+                normalizeInlineEntries(oDataEntryProperties);
+            }
 
-    if (oDataEntry == null) {
-      throw ODataJPARuntimeException
-          .throwException(ODataJPARuntimeException.GENERAL, null);
+            if (oDataEntry.getProperties()
+                          .size() > 0) {
+
+                write(oDataEntryProperties, true);
+
+                for (String navigationPropertyName : oDataEntityType.getNavigationPropertyNames()) {
+                    EdmNavigationProperty navProperty = (EdmNavigationProperty) oDataEntityType.getProperty(navigationPropertyName);
+                    if (relatedJPAEntityMap != null && relatedJPAEntityMap.containsKey(navigationPropertyName)) {
+                        oDataEntry.getProperties()
+                                  .get(navigationPropertyName);
+                        JPALink.linkJPAEntities(relatedJPAEntityMap.get(navigationPropertyName), jpaEntity, navProperty);
+                        continue;
+                    }
+                    // The second condition is required to ensure that there is an explicit request to link
+                    // two entities. Else the third condition will always be true for cases where two navigations
+                    // point to same entity types.
+                    if (parentJPAEntity != null && navProperty.getRelationship()
+                                                              .equals(getViaNavigationProperty().getRelationship())) {
+                        List<Object> targetJPAEntities = new ArrayList<Object>();
+                        targetJPAEntities.add(parentJPAEntity.getJPAEntity());
+                        JPALink.linkJPAEntities(targetJPAEntities, jpaEntity, navProperty);
+                    } else if (!entryMetadata.getAssociationUris(navigationPropertyName)
+                                             .isEmpty()) {
+                        if (!relatedJPAEntityLink.contains(navigationPropertyName)) {
+                            relatedJPAEntityLink.add(navigationPropertyName);
+                        }
+                    }
+                }
+            }
+            if (!relatedJPAEntityLink.isEmpty()) {
+                JPALink link = new JPALink(oDataJPAContext);
+                link.setSourceJPAEntity(jpaEntity);
+                link.create(oDataEntitySet, oDataEntry, relatedJPAEntityLink);
+            }
+        } catch (EdmException | ODataJPAModelException e) {
+            throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL.addContent(e.getMessage()), e);
+        }
     }
-    try {
-      EntryMetadata entryMetadata = oDataEntry.getMetadata();
-      Map<String, Object> oDataEntryProperties = oDataEntry.getProperties();
-      if (oDataEntry.containsInlineEntry()) {
-        normalizeInlineEntries(oDataEntryProperties);
-      }
 
-      if (oDataEntry.getProperties().size() > 0) {
+    public EdmEntitySet getEdmEntitySet() {
+        return oDataEntitySet;
+    }
 
+    public void create(final Map<String, Object> oDataEntryProperties) throws ODataJPARuntimeException {
+        normalizeInlineEntries(oDataEntryProperties);
         write(oDataEntryProperties, true);
+    }
 
-        for (String navigationPropertyName : oDataEntityType.getNavigationPropertyNames()) {
-          EdmNavigationProperty navProperty =
-              (EdmNavigationProperty) oDataEntityType.getProperty(navigationPropertyName);
-          if (relatedJPAEntityMap != null && relatedJPAEntityMap.containsKey(navigationPropertyName)) {
-            oDataEntry.getProperties().get(navigationPropertyName);
-            JPALink.linkJPAEntities(relatedJPAEntityMap.get(navigationPropertyName), jpaEntity,
-                navProperty);
-            continue;
-          }
-          // The second condition is required to ensure that there is an explicit request to link
-          // two entities. Else the third condition will always be true for cases where two navigations
-          // point to same entity types.
-          if (parentJPAEntity != null
-              && navProperty.getRelationship().equals(getViaNavigationProperty().getRelationship())) {
-            List<Object> targetJPAEntities = new ArrayList<Object>();
-            targetJPAEntities.add(parentJPAEntity.getJPAEntity());
-            JPALink.linkJPAEntities(targetJPAEntities, jpaEntity, navProperty);
-          } else if (!entryMetadata.getAssociationUris(navigationPropertyName).isEmpty()) {
-            if (!relatedJPAEntityLink.contains(navigationPropertyName)) {
-              relatedJPAEntityLink.add(navigationPropertyName);
-            }
-          }
+    public void update(final ODataEntry oDataEntry) throws ODataJPARuntimeException {
+        if (oDataEntry == null) {
+            throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL, null);
         }
-      }
-      if (!relatedJPAEntityLink.isEmpty()) {
+        Map<String, Object> oDataEntryProperties = oDataEntry.getProperties();
+        if (oDataEntry.containsInlineEntry()) {
+            normalizeInlineEntries(oDataEntryProperties);
+        }
+        write(oDataEntryProperties, false);
         JPALink link = new JPALink(oDataJPAContext);
         link.setSourceJPAEntity(jpaEntity);
-        link.create(oDataEntitySet, oDataEntry, relatedJPAEntityLink);
-      }
-    } catch (EdmException e) {
-      throw ODataJPARuntimeException
-          .throwException(ODataJPARuntimeException.GENERAL
-              .addContent(e.getMessage()), e);
-    } catch (ODataJPAModelException e) {
-      throw ODataJPARuntimeException
-          .throwException(ODataJPARuntimeException.GENERAL
-              .addContent(e.getMessage()), e);
+        try {
+            link.create(oDataEntitySet, oDataEntry, oDataEntityType.getNavigationPropertyNames());
+        } catch (EdmException | ODataJPAModelException e) {
+            throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL.addContent(e.getMessage()), e);
+        }
     }
-  }
 
-  public EdmEntitySet getEdmEntitySet() {
-    return oDataEntitySet;
-  }
-
-  public void create(final Map<String, Object> oDataEntryProperties) throws ODataJPARuntimeException {
-    normalizeInlineEntries(oDataEntryProperties);
-    write(oDataEntryProperties, true);
-  }
-
-  public void update(final ODataEntry oDataEntry) throws ODataJPARuntimeException {
-    if (oDataEntry == null) {
-      throw ODataJPARuntimeException
-          .throwException(ODataJPARuntimeException.GENERAL, null);
-    }
-    Map<String, Object> oDataEntryProperties = oDataEntry.getProperties();
-    if (oDataEntry.containsInlineEntry()) {
-      normalizeInlineEntries(oDataEntryProperties);
+    public void update(final Map<String, Object> oDataEntryProperties) throws ODataJPARuntimeException {
+        normalizeInlineEntries(oDataEntryProperties);
+        write(oDataEntryProperties, false);
     }
-    write(oDataEntryProperties, false);
-    JPALink link = new JPALink(oDataJPAContext);
-    link.setSourceJPAEntity(jpaEntity);
-    try {
-      link.create(oDataEntitySet, oDataEntry, oDataEntityType.getNavigationPropertyNames());
-    } catch (EdmException e) {
-      throw ODataJPARuntimeException
-          .throwException(ODataJPARuntimeException.GENERAL
-              .addContent(e.getMessage()), e);
-    } catch (ODataJPAModelException e) {
-      throw ODataJPARuntimeException
-          .throwException(ODataJPARuntimeException.GENERAL
-              .addContent(e.getMessage()), e);
+
+    public void setJPAEntity(final Object jpaEntity) {
+        this.jpaEntity = jpaEntity;
     }
-  }
-
-  public void update(final Map<String, Object> oDataEntryProperties) throws ODataJPARuntimeException {
-    normalizeInlineEntries(oDataEntryProperties);
-    write(oDataEntryProperties, false);
-  }
-
-  public void setJPAEntity(final Object jpaEntity) {
-    this.jpaEntity = jpaEntity;
-  }
-
-  protected void setComplexProperty(Method accessModifier, final Object jpaEntity,
-      final EdmStructuralType edmComplexType, final HashMap<String, Object> propertyValue)
-      throws EdmException, IllegalAccessException, IllegalArgumentException, InvocationTargetException,
-      InstantiationException, ODataJPARuntimeException, NoSuchMethodException, SecurityException, SQLException {
-
-    setComplexProperty(accessModifier, jpaEntity, edmComplexType, propertyValue, null);
-  }
-
-  protected void setProperty(final Method method, final Object entity, final Object entityPropertyValue,
-      final EdmSimpleType type, boolean isNullable) throws
-      IllegalAccessException, IllegalArgumentException, InvocationTargetException, ODataJPARuntimeException, 
-      EdmException {
-
-    setProperty(method, entity, entityPropertyValue, type, null, isNullable);
-  }
-
-  protected void setEmbeddableKeyProperty(final HashMap<String, String> embeddableKeys,
-      final List<EdmProperty> oDataEntryKeyProperties,
-      final Map<String, Object> oDataEntryProperties, final Object entity)
-      throws ODataJPARuntimeException, EdmException, IllegalAccessException, IllegalArgumentException,
-      InvocationTargetException, InstantiationException {
-
-    HashMap<String, Object> embeddableObjMap = new HashMap<String, Object>();
-    List<EdmProperty> leftODataEntryKeyProperties = new ArrayList<EdmProperty>();
-    HashMap<String, String> leftEmbeddableKeys = new HashMap<String, String>();
-
-    for (EdmProperty edmProperty : oDataEntryKeyProperties) {
-      if (oDataEntryProperties.containsKey(edmProperty.getName()) == false) {
-        continue;
-      }
-
-      String edmPropertyName = edmProperty.getName();
-      String embeddableKeyNameComposite = embeddableKeys.get(edmPropertyName);
-      if (embeddableKeyNameComposite == null) {
-        continue;
-      }
-      String embeddableKeyNameSplit[] = embeddableKeyNameComposite.split("\\.");
-      String methodPartName = null;
-      Method method = null;
-      Object embeddableObj = null;
-
-      if (embeddableObjMap.containsKey(embeddableKeyNameSplit[0]) == false) {
-        methodPartName = embeddableKeyNameSplit[0];
-        method = jpaEntityParser.getAccessModifierSet(entity, methodPartName);
-        embeddableObj = method.getParameterTypes()[0].newInstance();
-        method.invoke(entity, embeddableObj);
-        embeddableObjMap.put(embeddableKeyNameSplit[0], embeddableObj);
-      } else {
-        embeddableObj = embeddableObjMap.get(embeddableKeyNameSplit[0]);
-      }
-
-      if (embeddableKeyNameSplit.length == 2) {
-        methodPartName = embeddableKeyNameSplit[1];
-        method = jpaEntityParser.getAccessModifierSet(embeddableObj, methodPartName);
-        Object simpleObj = oDataEntryProperties.get(edmProperty.getName());
-        method.invoke(embeddableObj, simpleObj);
-      } else if (embeddableKeyNameSplit.length > 2) { // Deeply nested
-        leftODataEntryKeyProperties.add(edmProperty);
-        leftEmbeddableKeys
-            .put(edmPropertyName, embeddableKeyNameComposite.split(embeddableKeyNameSplit[0] + ".", 2)[1]);
-      }
+
+    protected void setComplexProperty(Method accessModifier, final Object jpaEntity, final EdmStructuralType edmComplexType,
+            final HashMap<String, Object> propertyValue)
+            throws EdmException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException,
+            ODataJPARuntimeException, NoSuchMethodException, SecurityException, SQLException {
+
+        setComplexProperty(accessModifier, jpaEntity, edmComplexType, propertyValue, null);
     }
-  }
 
-  protected Object instantiateJPAEntity() throws InstantiationException, IllegalAccessException {
-    if (jpaType == null) {
-      throw new InstantiationException();
+    protected void setProperty(final Method method, final Object entity, final Object entityPropertyValue, final EdmSimpleType type,
+            boolean isNullable)
+            throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, ODataJPARuntimeException, EdmException {
+
+        setProperty(method, entity, entityPropertyValue, type, null, isNullable);
     }
 
-    return jpaType.newInstance();
-  }
-
-  private void normalizeInlineEntries(final Map<String, Object> oDataEntryProperties) throws ODataJPARuntimeException {
-    List<ODataEntry> entries = null;
-    try {
-      for (String navigationPropertyName : oDataEntityType.getNavigationPropertyNames()) {
-        Object inline = oDataEntryProperties.get(navigationPropertyName);
-        if (inline instanceof ODataFeed) {
-          entries = ((ODataFeed) inline).getEntries();
-        } else if (inline instanceof ODataEntry) {
-          entries = new ArrayList<ODataEntry>();
-          entries.add((ODataEntry) inline);
-        }
-        if (entries != null) {
-          oDataEntryProperties.put(navigationPropertyName, entries);
-          entries = null;
+    protected void setEmbeddableKeyProperty(final HashMap<String, String> embeddableKeys, final List<EdmProperty> oDataEntryKeyProperties,
+            final Map<String, Object> oDataEntryProperties, final Object entity) throws ODataJPARuntimeException, EdmException,
+            IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
+
+        HashMap<String, Object> embeddableObjMap = new HashMap<String, Object>();
+        List<EdmProperty> leftODataEntryKeyProperties = new ArrayList<EdmProperty>();
+        HashMap<String, String> leftEmbeddableKeys = new HashMap<String, String>();
+
+        for (EdmProperty edmProperty : oDataEntryKeyProperties) {
+            if (!oDataEntryProperties.containsKey(edmProperty.getName())) {
+                continue;
+            }
+
+            String edmPropertyName = edmProperty.getName();
+            String embeddableKeyNameComposite = embeddableKeys.get(edmPropertyName);
+            if (embeddableKeyNameComposite == null) {
+                continue;
+            }
+            String embeddableKeyNameSplit[] = embeddableKeyNameComposite.split("\\.");
+            String methodPartName = null;
+            Method method = null;
+            Object embeddableObj = null;
+
+            if (!embeddableObjMap.containsKey(embeddableKeyNameSplit[0])) {
+                methodPartName = embeddableKeyNameSplit[0];
+                method = jpaEntityParser.getAccessModifierSet(entity, methodPartName);
+                embeddableObj = method.getParameterTypes()[0].newInstance();
+                method.invoke(entity, embeddableObj);
+                embeddableObjMap.put(embeddableKeyNameSplit[0], embeddableObj);
+            } else {
+                embeddableObj = embeddableObjMap.get(embeddableKeyNameSplit[0]);
+            }
+
+            if (embeddableKeyNameSplit.length == 2) {
+                methodPartName = embeddableKeyNameSplit[1];
+                method = jpaEntityParser.getAccessModifierSet(embeddableObj, methodPartName);
+                Object simpleObj = oDataEntryProperties.get(edmProperty.getName());
+                method.invoke(embeddableObj, simpleObj);
+            } else if (embeddableKeyNameSplit.length > 2) { // Deeply nested
+                leftODataEntryKeyProperties.add(edmProperty);
+                leftEmbeddableKeys.put(edmPropertyName, embeddableKeyNameComposite.split(embeddableKeyNameSplit[0] + ".", 2)[1]);
+            }
         }
-      }
-    } catch (EdmException e) {
-      throw ODataJPARuntimeException
-          .throwException(ODataJPARuntimeException.GENERAL
-              .addContent(e.getMessage()), e);
     }
-  }
-
-  @SuppressWarnings("unchecked")
-  private void write(final Map<String, Object> oDataEntryProperties,
-      final boolean isCreate)
-      throws ODataJPARuntimeException {
-    try {
-
-      EdmStructuralType structuralType = null;
-      final List<String> keyNames = oDataEntityType.getKeyPropertyNames();
-
-      if (isCreate) {
-        jpaEntity = instantiateJPAEntity();
-      } else if (jpaEntity == null) {
-        throw ODataJPARuntimeException
-            .throwException(ODataJPARuntimeException.RESOURCE_NOT_FOUND, null);
-      }
-
-      if (accessModifiersWrite == null) {
-        accessModifiersWrite =
-            jpaEntityParser.getAccessModifiers(jpaEntity, oDataEntityType, JPAEntityParser.ACCESS_MODIFIER_SET);
-      }
-
-      if (oDataEntityType == null || oDataEntryProperties == null) {
-        throw ODataJPARuntimeException
-            .throwException(ODataJPARuntimeException.GENERAL, null);
-      }
-
-      final HashMap<String, String> embeddableKeys =
-          jpaEntityParser.getJPAEmbeddableKeyMap(jpaEntity.getClass().getName());
-      Set<String> propertyNames = null;
-      if (embeddableKeys != null) {
-        setEmbeddableKeyProperty(embeddableKeys, oDataEntityType.getKeyProperties(), oDataEntryProperties,
-            jpaEntity);
-
-        propertyNames = new HashSet<String>();
-        propertyNames.addAll(oDataEntryProperties.keySet());
-        for (String key : embeddableKeys.keySet()) {
-          propertyNames.remove(key);
+
+    protected Object instantiateJPAEntity() throws InstantiationException, IllegalAccessException {
+        if (jpaType == null) {
+            throw new InstantiationException();
         }
-      } else {
-        propertyNames = oDataEntryProperties.keySet();
-      }
-
-      boolean isVirtual = false;
-      for (String propertyName : propertyNames) {
-        EdmTyped edmTyped = (EdmTyped) oDataEntityType.getProperty(propertyName);
-        if (edmTyped instanceof EdmProperty) {
-          isVirtual = ((JPAEdmMappingImpl)((EdmProperty) edmTyped).getMapping()).isVirtualAccess();
-        } else {
-          isVirtual = false;
+
+        return jpaType.newInstance();
+    }
+
+    private void normalizeInlineEntries(final Map<String, Object> oDataEntryProperties) throws ODataJPARuntimeException {
+        List<ODataEntry> entries = null;
+        try {
+            for (String navigationPropertyName : oDataEntityType.getNavigationPropertyNames()) {
+                Object inline = oDataEntryProperties.get(navigationPropertyName);
+                if (inline instanceof ODataFeed) {
+                    entries = ((ODataFeed) inline).getEntries();
+                } else if (inline instanceof ODataEntry) {
+                    entries = new ArrayList<ODataEntry>();
+                    entries.add((ODataEntry) inline);
+                }
+                if (entries != null) {
+                    oDataEntryProperties.put(navigationPropertyName, entries);
+                    entries = null;
+                }
+            }
+        } catch (EdmException e) {
+            throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL.addContent(e.getMessage()), e);
         }
-        Method accessModifier = null;
+    }
+
+    @SuppressWarnings("unchecked")
+    private void write(final Map<String, Object> oDataEntryProperties, final boolean isCreate) throws ODataJPARuntimeException {
+        try {
 
-        switch (edmTyped.getType().getKind()) {
-        case SIMPLE:
-          if (isCreate == false) {
-            if (keyNames.contains(edmTyped.getName())) {
-              continue;
+            EdmStructuralType structuralType = null;
+            final List<String> keyNames = oDataEntityType.getKeyPropertyNames();
+
+            if (isCreate) {
+                jpaEntity = instantiateJPAEntity();
+            } else if (jpaEntity == null) {
+                throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.RESOURCE_NOT_FOUND, null);
             }
-          }
-          accessModifier = accessModifiersWrite.get(propertyName);
-          EdmProperty edmProperty = (EdmProperty)oDataEntityType.getProperty(propertyName);
-          boolean isNullable = edmProperty.getFacets() == null ? (keyNames.contains(propertyName)? false : true)
-              : edmProperty.getFacets().isNullable() == null ? true : edmProperty.getFacets().isNullable();
-          if (isVirtual) {
-            setProperty(accessModifier, jpaEntity, oDataEntryProperties.get(propertyName), (EdmSimpleType) edmTyped
-                .getType(), isNullable);
-          } else {
-            setProperty(accessModifier, jpaEntity, oDataEntryProperties.get(propertyName), (EdmSimpleType) edmTyped
-                .getType(), isNullable);
-          }
-          break;
-        case COMPLEX:
-          structuralType = (EdmStructuralType) edmTyped.getType();
-          accessModifier = accessModifiersWrite.get(propertyName);
-          if (isVirtual) {
-            setComplexProperty(accessModifier, jpaEntity,
-                structuralType,
-                (HashMap<String, Object>) oDataEntryProperties.get(propertyName), propertyName);
-          } else {
-            setComplexProperty(accessModifier, jpaEntity,
-                structuralType,
-                (HashMap<String, Object>) oDataEntryProperties.get(propertyName));
-          }
-          break;
-        case NAVIGATION:
-        case ENTITY:
-          if (isCreate) {
-            structuralType = (EdmStructuralType) edmTyped.getType();
-            EdmNavigationProperty navProperty = (EdmNavigationProperty) edmTyped;
-            EdmEntitySet edmRelatedEntitySet = oDataEntitySet.getRelatedEntitySet(navProperty);
-            List<ODataEntry> relatedEntries = (List<ODataEntry>) oDataEntryProperties.get(propertyName);
-            if (relatedJPAEntityMap == null) {
-              relatedJPAEntityMap = new HashMap<String, List<Object>>();
+
+            if (accessModifiersWrite == null) {
+                accessModifiersWrite = jpaEntityParser.getAccessModifiers(jpaEntity, oDataEntityType, JPAEntityParser.ACCESS_MODIFIER_SET);
+            }
+
+            if (oDataEntityType == null || oDataEntryProperties == null) {
+                throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL, null);
+            }
+
+            final HashMap<String, String> embeddableKeys = jpaEntityParser.getJPAEmbeddableKeyMap(jpaEntity.getClass()
+                                                                                                           .getName());
+            Set<String> propertyNames = null;
+            if (embeddableKeys != null) {
+                setEmbeddableKeyProperty(embeddableKeys, oDataEntityType.getKeyProperties(), oDataEntryProperties, jpaEntity);
+
+                propertyNames = new HashSet<String>();
+                propertyNames.addAll(oDataEntryProperties.keySet());
+                for (String key : embeddableKeys.keySet()) {
+                    propertyNames.remove(key);
+                }
+            } else {
+                propertyNames = oDataEntryProperties.keySet();
             }
-            List<Object> relatedJPAEntities = new ArrayList<Object>();
-            for (ODataEntry oDataEntry : relatedEntries) {
-              JPAEntity relatedEntity =
-                  new JPAEntity((EdmEntityType) structuralType, edmRelatedEntitySet, oDataJPAContext);
-              relatedEntity.setParentJPAEntity(this);
-              relatedEntity.setViaNavigationProperty(navProperty);
-              relatedEntity.create(oDataEntry);
-              if (oDataEntry.getProperties().size() == 0) {
-                if (!oDataEntry.getMetadata().getUri().isEmpty()
-                    && !relatedJPAEntityLink.contains(navProperty.getName())) {
-                  relatedJPAEntityLink.add(navProperty.getName());
+
+            boolean isVirtual = false;
+            for (String propertyName : propertyNames) {
+                EdmTyped edmTyped = oDataEntityType.getProperty(propertyName);
+                if (edmTyped instanceof EdmProperty) {
+                    isVirtual = ((JPAEdmMappingImpl) ((EdmProperty) edmTyped).getMapping()).isVirtualAccess();
+                } else {
+                    isVirtual = false;
+                }
+                Method accessModifier = null;
+
+                switch (edmTyped.getType()
+                                .getKind()) {
+                    case SIMPLE:
+                        if (!isCreate) {
+                            if (keyNames.contains(edmTyped.getName())) {
+                                continue;
+                            }
+                        }
+                        accessModifier = accessModifiersWrite.get(propertyName);
+                        EdmProperty edmProperty = (EdmProperty) oDataEntityType.getProperty(propertyName);
+                        boolean isNullable = edmProperty.getFacets() == null ? (keyNames.contains(propertyName) ? false : true)
+                                : edmProperty.getFacets()
+                                             .isNullable() == null ? true
+                                                     : edmProperty.getFacets()
+                                                                  .isNullable();
+                        if (isVirtual) {
+                            setProperty(accessModifier, jpaEntity, oDataEntryProperties.get(propertyName),
+                                    (EdmSimpleType) edmTyped.getType(), isNullable);
+                        } else {
+                            setProperty(accessModifier, jpaEntity, oDataEntryProperties.get(propertyName),
+                                    (EdmSimpleType) edmTyped.getType(), isNullable);
+                        }
+                        break;
+                    case COMPLEX:
+                        structuralType = (EdmStructuralType) edmTyped.getType();
+                        accessModifier = accessModifiersWrite.get(propertyName);
+                        if (isVirtual) {
+                            setComplexProperty(accessModifier, jpaEntity, structuralType,
+                                    (HashMap<String, Object>) oDataEntryProperties.get(propertyName), propertyName);
+                        } else {
+                            setComplexProperty(accessModifier, jpaEntity, structuralType,
+                                    (HashMap<String, Object>) oDataEntryProperties.get(propertyName));
+                        }
+                        break;
+                    case NAVIGATION:
+                    case ENTITY:
+                        if (isCreate) {
+                            structuralType = (EdmStructuralType) edmTyped.getType();
+                            EdmNavigationProperty navProperty = (EdmNavigationProperty) edmTyped;
+                            EdmEntitySet edmRelatedEntitySet = oDataEntitySet.getRelatedEntitySet(navProperty);
+                            List<ODataEntry> relatedEntries = (List<ODataEntry>) oDataEntryProperties.get(propertyName);
+                            if (relatedJPAEntityMap == null) {
+                                relatedJPAEntityMap = new HashMap<String, List<Object>>();
+                            }
+                            List<Object> relatedJPAEntities = new ArrayList<Object>();
+                            for (ODataEntry oDataEntry : relatedEntries) {
+                                JPAEntity relatedEntity =
+                                        new JPAEntity((EdmEntityType) structuralType, edmRelatedEntitySet, oDataJPAContext);
+                                relatedEntity.setParentJPAEntity(this);
+                                relatedEntity.setViaNavigationProperty(navProperty);
+                                relatedEntity.create(oDataEntry);
+                                if (oDataEntry.getProperties()
+                                              .size() == 0) {
+                                    if (!oDataEntry.getMetadata()
+                                                   .getUri()
+                                                   .isEmpty()
+                                            && !relatedJPAEntityLink.contains(navProperty.getName())) {
+                                        relatedJPAEntityLink.add(navProperty.getName());
+                                    }
+                                } else {
+                                    relatedJPAEntities.add(relatedEntity.getJPAEntity());
+                                }
+                            }
+                            if (!relatedJPAEntities.isEmpty()) {
+                                relatedJPAEntityMap.put(navProperty.getName(), relatedJPAEntities);
+                            }
+                        }
+                    default:
                 }
-              } else {
-                relatedJPAEntities.add(relatedEntity.getJPAEntity());
-              }
             }
-            if (!relatedJPAEntities.isEmpty()) {
-              relatedJPAEntityMap.put(navProperty.getName(), relatedJPAEntities);
+        } catch (Exception e) {
+            if (e instanceof ODataJPARuntimeException) {
+                throw (ODataJPARuntimeException) e;
             }
-          }
-        default:
-          continue;
+            throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL.addContent(e.getMessage()), e);
         }
-      }
-    } catch (Exception e) {
-      if (e instanceof ODataJPARuntimeException) {
-        throw (ODataJPARuntimeException) e;
-      }
-      throw ODataJPARuntimeException
-          .throwException(ODataJPARuntimeException.GENERAL
-              .addContent(e.getMessage()), e);
-    }
-  }
-
-  @SuppressWarnings("unchecked")
-  protected void setComplexProperty(Method accessModifier, final Object jpaEntity,
-      final EdmStructuralType edmComplexType, final HashMap<String, Object> propertyValue, String propertyName)
-      throws EdmException, IllegalAccessException, IllegalArgumentException, InvocationTargetException,
-      InstantiationException, ODataJPARuntimeException, NoSuchMethodException, SecurityException, SQLException {
-
-    JPAEdmMapping mapping = (JPAEdmMapping) edmComplexType.getMapping();
-    Object embeddableObject = mapping.getJPAType().newInstance();
-    if (propertyName != null) {
-    	accessModifier.invoke(jpaEntity, propertyName, embeddableObject);
-    } else {
-    	accessModifier.invoke(jpaEntity, embeddableObject);
     }
 
-    HashMap<String, Method> accessModifiers =
-        jpaEntityParser.getAccessModifiers(embeddableObject, edmComplexType,
-            JPAEntityParser.ACCESS_MODIFIER_SET);
-
-    for (String edmPropertyName : edmComplexType.getPropertyNames()) {
-      if (propertyValue != null) {
-        EdmTyped edmTyped = edmComplexType.getProperty(edmPropertyName);
-        accessModifier = accessModifiers.get(edmPropertyName);
-        EdmType type = edmTyped.getType();
-        if (type.getKind().toString().equals(EdmTypeKind.COMPLEX.toString())) {
-          setComplexProperty(accessModifier, embeddableObject, (EdmStructuralType) type,
-              (HashMap<String, Object>) propertyValue.get(edmPropertyName), propertyName);
+    @SuppressWarnings("unchecked")
+    protected void setComplexProperty(Method accessModifier, final Object jpaEntity, final EdmStructuralType edmComplexType,
+            final HashMap<String, Object> propertyValue, String propertyName)
+            throws EdmException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException,
+            ODataJPARuntimeException, NoSuchMethodException, SecurityException, SQLException {
+
+        JPAEdmMapping mapping = (JPAEdmMapping) edmComplexType.getMapping();
+        Object embeddableObject = mapping.getJPAType()
+                                         .newInstance();
+        if (propertyName != null) {
+            accessModifier.invoke(jpaEntity, propertyName, embeddableObject);
         } else {
-          EdmSimpleType simpleType = (EdmSimpleType) type;
-          EdmProperty edmProperty = (EdmProperty)edmComplexType.getProperty(edmPropertyName);
-          boolean isNullable = edmProperty.getFacets() == null ? true
-              : edmProperty.getFacets().isNullable() == null ? true : edmProperty.getFacets().isNullable();
-    		  if (propertyName != null) {
-            setProperty(accessModifier, embeddableObject, propertyValue.get(edmPropertyName),
-                simpleType, isNullable);
-          } else {
-            setProperty(accessModifier, embeddableObject, propertyValue.get(edmPropertyName),
-                simpleType, isNullable);
-          }
+            accessModifier.invoke(jpaEntity, embeddableObject);
         }
-      }
-    }
-  }
-
-  @SuppressWarnings({ "unchecked", "rawtypes" })
-  protected void setProperty(final Method method, final Object entity, final Object entityPropertyValue,
-      final EdmSimpleType type, String propertyName, boolean isNullable) throws
-      IllegalAccessException, IllegalArgumentException, InvocationTargetException, ODataJPARuntimeException, 
-      EdmException {
-    if (entityPropertyValue != null || isNullable) {
-      if (propertyName != null) {
-        method.invoke(entity, propertyName, entityPropertyValue);
-        return;
-      }
-      Class<?> parameterType = method.getParameterTypes()[0];
-      if (type != null && type.getDefaultType().equals(String.class)) {
-        if (parameterType.equals(String.class)) {
-          method.invoke(entity, entityPropertyValue);
-        } else if (parameterType.equals(char[].class)) {
-          char[] characters = entityPropertyValue != null ? ((String) entityPropertyValue).toCharArray() : null;
-          method.invoke(entity, characters);
-        } else if (parameterType.equals(char.class)) {
-          char c = entityPropertyValue != null ? ((String) entityPropertyValue).charAt(0) : '\u0000';
-          method.invoke(entity, c);
-        } else if (parameterType.equals(Character[].class)) {
-          Character[] characters = entityPropertyValue != null ? 
-              JPAEntityParser.toCharacterArray((String) entityPropertyValue) : null;
-          method.invoke(entity, (Object) characters);
-        } else if (parameterType.equals(Character.class)) {
-          Character c = entityPropertyValue != null ? 
-              Character.valueOf(((String) entityPropertyValue).charAt(0)) : null;
-          method.invoke(entity, c);
-        } else if (parameterType.isEnum()) {
-          Enum e = entityPropertyValue != null ?
-              Enum.valueOf((Class<Enum>) parameterType, (String) entityPropertyValue) : null;
-          method.invoke(entity, e);
-        } else {
-          String setterName = method.getName();
-      	  String getterName = setterName.replace("set", "get");
-      	  try {
-            Method getMethod = entity.getClass().getDeclaredMethod(getterName);
-            if(getMethod.isAnnotationPresent(XmlJavaTypeAdapter.class)) {
-              XmlAdapter xmlAdapter = getMethod.getAnnotation(XmlJavaTypeAdapter.class)
-                  .value().newInstance();
-              method.invoke(entity, xmlAdapter.unmarshal(entityPropertyValue));
+
+        HashMap<String, Method> accessModifiers =
+                jpaEntityParser.getAccessModifiers(embeddableObject, edmComplexType, JPAEntityParser.ACCESS_MODIFIER_SET);
+
+        for (String edmPropertyName : edmComplexType.getPropertyNames()) {
+            if (propertyValue != null) {
+                EdmTyped edmTyped = edmComplexType.getProperty(edmPropertyName);
+                accessModifier = accessModifiers.get(edmPropertyName);
+                EdmType type = edmTyped.getType();
+                if (type.getKind()
+                        .toString()
+                        .equals(EdmTypeKind.COMPLEX.toString())) {
+                    setComplexProperty(accessModifier, embeddableObject, (EdmStructuralType) type,
+                            (HashMap<String, Object>) propertyValue.get(edmPropertyName), propertyName);
+                } else {
+                    EdmSimpleType simpleType = (EdmSimpleType) type;
+                    EdmProperty edmProperty = (EdmProperty) edmComplexType.getProperty(edmPropertyName);
+                    boolean isNullable = edmProperty.getFacets() == null ? true
+                            : edmProperty.getFacets()
+                                         .isNullable() == null ? true
+                                                 : edmProperty.getFacets()
+                                                              .isNullable();
+                    if (propertyName != null) {
+                        setProperty(accessModifier, embeddableObject, propertyValue.get(edmPropertyName), simpleType, isNullable);
+                    } else {
+                        setProperty(accessModifier, embeddableObject, propertyValue.get(edmPropertyName), simpleType, isNullable);
+                    }
+                }
             }
-          } catch (Exception e) {
-            throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL, e);
-      	  }
         }
-      } else if (parameterType.equals(Blob.class)) {
-        if (onJPAWriteContent == null) {
-          throw ODataJPARuntimeException
-              .throwException(ODataJPARuntimeException.ERROR_JPA_BLOB_NULL, null);
-        } else {
-          method.invoke(entity, entityPropertyValue != null ? 
-              onJPAWriteContent.getJPABlob((byte[]) entityPropertyValue) : null);
-        }
-      } else if (parameterType.equals(Clob.class)) {
-        if (onJPAWriteContent == null) {
-          throw ODataJPARuntimeException
-              .throwException(ODataJPARuntimeException.ERROR_JPA_CLOB_NULL, null);
-        } else {
-          method.invoke(entity, entityPropertyValue != null ? 
-              onJPAWriteContent.getJPAClob(((String) entityPropertyValue).toCharArray()) : null);
+    }
+
+    @SuppressWarnings({"unchecked", "rawtypes"})
+    protected void setProperty(final Method method, final Object entity, final Object entityPropertyValue, final EdmSimpleType type,
+            String propertyName, boolean isNullable)
+            throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, ODataJPARuntimeException, EdmException {
+        if (entityPropertyValue != null || isNullable) {
+            if (propertyName != null) {
+                method.invoke(entity, propertyName, entityPropertyValue);
+                return;
+            }
+            Class<?> parameterType = method.getParameterTypes()[0];
+            if (type != null && type.getDefaultType()
+                                    .equals(String.class)) {
+                if (parameterType.equals(String.class)) {
+                    method.invoke(entity, entityPropertyValue);
+                } else if (parameterType.equals(char[].class)) {
+                    char[] characters = entityPropertyValue != null ? ((String) entityPropertyValue).toCharArray() : null;
+                    method.invoke(entity, characters);
+                } else if (parameterType.equals(char.class)) {
+                    char c = entityPropertyValue != null ? ((String) entityPropertyValue).charAt(0) : '\u0000';
+                    method.invoke(entity, c);
+                } else if (parameterType.equals(Character[].class)) {
+                    Character[] characters =
+                            entityPropertyValue != null ? JPAEntityParser.toCharacterArray((String) entityPropertyValue) : null;
+                    method.invoke(entity, (Object) characters);
+                } else if (parameterType.equals(Character.class)) {
+                    Character c = entityPropertyValue != null ? Character.valueOf(((String) entityPropertyValue).charAt(0)) : null;
+                    method.invoke(entity, c);
+                } else if (parameterType.isEnum()) {
+                    Enum e = entityPropertyValue != null ? Enum.valueOf((Class<Enum>) parameterType, (String) entityPropertyValue) : null;
+                    method.invoke(entity, e);
+                } else {
+                    String setterName = method.getName();
+                    String getterName = setterName.replace("set", "get");
+                    try {
+                        Method getMethod = entity.getClass()
+                                                 .getDeclaredMethod(getterName);
+                        if (getMethod.isAnnotationPresent(XmlJavaTypeAdapter.class)) {
+                            XmlAdapter xmlAdapter = getMethod.getAnnotation(XmlJavaTypeAdapter.class)
+                                                             .value()
+                                                             .newInstance();
+                            method.invoke(entity, xmlAdapter.unmarshal(entityPropertyValue));
+                        }
+                    } catch (Exception e) {
+                        throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL, e);
+                    }
+                }
+            } else if (parameterType.equals(Blob.class)) {
+                if (onJPAWriteContent == null) {
+                    throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.ERROR_JPA_BLOB_NULL, null);
+                }
+                method.invoke(entity, entityPropertyValue != null ? onJPAWriteContent.getJPABlob((byte[]) entityPropertyValue) : null);
+            } else if (parameterType.equals(Clob.class)) {
+                if (onJPAWriteContent == null) {
+                    throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.ERROR_JPA_CLOB_NULL, null);
+                }
+                method.invoke(entity,
+                        entityPropertyValue != null ? onJPAWriteContent.getJPAClob(((String) entityPropertyValue).toCharArray()) : null);
+            } else if (parameterType.equals(Timestamp.class)) {
+                Timestamp ts = entityPropertyValue != null ? new Timestamp(((Calendar) entityPropertyValue).getTimeInMillis()) : null;
+                method.invoke(entity, ts);
+            } else if (parameterType.equals(java.util.Date.class)) {
+                Date d = entityPropertyValue != null ? ((Calendar) entityPropertyValue).getTime() : null;
+                method.invoke(entity, d);
+            } else if (parameterType.equals(java.sql.Date.class)) {
+                java.sql.Date d =
+                        entityPropertyValue != null ? new java.sql.Date(((Calendar) entityPropertyValue).getTimeInMillis()) : null;
+                method.invoke(entity, d);
+            } else if (parameterType.equals(java.sql.Time.class)) {
+                java.sql.Time t =
+                        entityPropertyValue != null ? new java.sql.Time(((Calendar) entityPropertyValue).getTimeInMillis()) : null;
+                method.invoke(entity, t);
+            } else if (parameterType.equals(byte.class)) {
+                byte b = entityPropertyValue != null ? Byte.parseByte(entityPropertyValue.toString()) : 0;
+                method.invoke(entity, b);
+            } else {
+                method.invoke(entity, entityPropertyValue);
+            }
         }
-      } else if (parameterType.equals(Timestamp.class)) {
-        Timestamp ts = entityPropertyValue != null ? 
-            new Timestamp(((Calendar) entityPropertyValue).getTimeInMillis()) : null;
-        method.invoke(entity, ts);
-      } else if (parameterType.equals(java.util.Date.class)) {
-        Date d = entityPropertyValue != null ? ((Calendar) entityPropertyValue).getTime(): null;
-        method.invoke(entity, d);
-      } else if (parameterType.equals(java.sql.Date.class)) {
-        java.sql.Date d = entityPropertyValue != null ? 
-            new java.sql.Date(((Calendar) entityPropertyValue).getTimeInMillis()) : null;
-        method.invoke(entity, d);
-      } else if (parameterType.equals(java.sql.Time.class)) {
-        java.sql.Time t = entityPropertyValue != null ? 
-            new java.sql.Time(((Calendar) entityPropertyValue).getTimeInMillis()) : null;
-        method.invoke(entity, t);
-      } else if (parameterType.equals(byte.class)) {
-        byte b = entityPropertyValue != null ? 
-             Byte.parseByte(entityPropertyValue.toString()) : 0;
-        method.invoke(entity, b);
-      } else {
-        method.invoke(entity, entityPropertyValue);
-      }
     }
-  }
-}
\ No newline at end of file
+}
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPALink.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPALink.java
index c8a43943..a657b9eb 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPALink.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPALink.java
@@ -26,7 +26,7 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 
-import javax.persistence.EntityManager;
+import jakarta.persistence.EntityManager;
 
 import org.apache.olingo.odata2.api.edm.EdmEntitySet;
 import org.apache.olingo.odata2.api.edm.EdmException;
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAPage.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAPage.java
index 4f95e51e..16ff82d3 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAPage.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAPage.java
@@ -21,7 +21,7 @@ package org.apache.olingo.odata2.jpa.processor.core.access.data;
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.persistence.Query;
+import jakarta.persistence.Query;
 
 import org.apache.olingo.odata2.jpa.processor.api.access.JPAPaging;
 
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAProcessorImpl.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAProcessorImpl.java
index 2aaef0d6..d498ed08 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAProcessorImpl.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAProcessorImpl.java
@@ -25,9 +25,9 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceException;
-import javax.persistence.Query;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.PersistenceException;
+import jakarta.persistence.Query;
 
 import org.apache.olingo.odata2.api.commons.InlineCount;
 import org.apache.olingo.odata2.api.edm.EdmEntitySet;
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAQueryBuilder.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAQueryBuilder.java
index 24290bf8..9dd2f6bc 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAQueryBuilder.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAQueryBuilder.java
@@ -29,11 +29,11 @@ import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-import javax.persistence.TemporalType;
-import javax.persistence.metamodel.Attribute;
-import javax.persistence.metamodel.EntityType;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.Query;
+import jakarta.persistence.TemporalType;
+import jakarta.persistence.metamodel.Attribute;
+import jakarta.persistence.metamodel.EntityType;
 
 import org.apache.olingo.odata2.api.edm.EdmException;
 import org.apache.olingo.odata2.api.uri.UriInfo;
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPAEdmMappingModelService.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPAEdmMappingModelService.java
index 69153ec1..adf26047 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPAEdmMappingModelService.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPAEdmMappingModelService.java
@@ -1,31 +1,22 @@
 /*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
+ * 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.
+ *
+ * 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.odata2.jpa.processor.core.access.model;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
-
 import org.apache.olingo.odata2.jpa.processor.api.ODataJPAContext;
 import org.apache.olingo.odata2.jpa.processor.api.access.JPAEdmMappingModelAccess;
 import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPAModelException;
@@ -36,235 +27,251 @@ import org.apache.olingo.odata2.jpa.processor.api.model.mapping.JPAEmbeddableTyp
 import org.apache.olingo.odata2.jpa.processor.api.model.mapping.JPAEntityTypeMapType;
 import org.apache.olingo.odata2.jpa.processor.api.model.mapping.JPAPersistenceUnitMapType;
 import org.apache.olingo.odata2.jpa.processor.api.model.mapping.JPARelationshipMapType.JPARelationship;
+import jakarta.xml.bind.JAXBContext;
+import jakarta.xml.bind.JAXBException;
+import jakarta.xml.bind.Unmarshaller;
 
 public class JPAEdmMappingModelService implements JPAEdmMappingModelAccess {
 
-  boolean mappingModelExists = true;
-  private JPAEdmMappingModel mappingModel;
-  private InputStream mappingModelStream = null;
-  private String mappingModelName;
-
-  public JPAEdmMappingModelService(final ODataJPAContext ctx) {
-    JPAEdmExtension ext = null;
-    mappingModelName = ctx.getJPAEdmMappingModel();
-    if (mappingModelName == null) {
-      ext = ctx.getJPAEdmExtension();
-      if (ext != null) {
-        mappingModelStream = ext.getJPAEdmMappingModelStream();
-      }
-    }
-
-    mappingModelExists = mappingModelName != null || mappingModelStream != null;
-  }
-
-  @Override
-  public void loadMappingModel() {
-    InputStream is = null;
-    if (mappingModelExists) {
-      JAXBContext context;
-      try {
-        context = JAXBContext.newInstance(JPAEdmMappingModel.class);
-
-        Unmarshaller unmarshaller = context.createUnmarshaller();
-        is = loadMappingModelInputStream();
-        if (is == null) {
-          mappingModelExists = false;
-          return;
+    boolean mappingModelExists = true;
+    private JPAEdmMappingModel mappingModel;
+    private InputStream mappingModelStream = null;
+    private final String mappingModelName;
+
+    public JPAEdmMappingModelService(final ODataJPAContext ctx) {
+        JPAEdmExtension ext = null;
+        mappingModelName = ctx.getJPAEdmMappingModel();
+        if (mappingModelName == null) {
+            ext = ctx.getJPAEdmExtension();
+            if (ext != null) {
+                mappingModelStream = ext.getJPAEdmMappingModelStream();
+            }
         }
 
-        mappingModel = (JPAEdmMappingModel) unmarshaller.unmarshal(is);
+        mappingModelExists = mappingModelName != null || mappingModelStream != null;
+    }
 
-        if (mappingModel != null) {
-          mappingModelExists = true;
+    @Override
+    public void loadMappingModel() {
+        InputStream is = null;
+        if (mappingModelExists) {
+            JAXBContext context;
+            try {
+                context = JAXBContext.newInstance(JPAEdmMappingModel.class);
+
+                Unmarshaller unmarshaller = context.createUnmarshaller();
+                is = loadMappingModelInputStream();
+                if (is == null) {
+                    mappingModelExists = false;
+                    return;
+                }
+
+                mappingModel = (JPAEdmMappingModel) unmarshaller.unmarshal(is);
+
+                if (mappingModel != null) {
+                    mappingModelExists = true;
+                }
+
+            } catch (JAXBException e) {
+                mappingModelExists = false;
+                ODataJPAModelException ex = ODataJPAModelException.throwException(ODataJPAModelException.GENERAL, e);
+                throw new IllegalStateException("Failed to load model", ex);
+            } finally {
+                try {
+                    if (is != null) {
+                        is.close();
+                    }
+                } catch (IOException e) {
+                    // do nothing
+                }
+            }
         }
+    }
 
-      } catch (JAXBException e) {
-        mappingModelExists = false;
-        ODataJPAModelException.throwException(ODataJPAModelException.GENERAL, e);
-      } finally {
-        try {
-          if (is != null) {
-            is.close();
-          }
-        } catch (IOException e) {
-          // do nothing
-        }
-      }
+    @Override
+    public boolean isMappingModelExists() {
+        return mappingModelExists;
     }
-  }
 
-  @Override
-  public boolean isMappingModelExists() {
-    return mappingModelExists;
-  }
+    @Override
+    public JPAEdmMappingModel getJPAEdmMappingModel() {
+        return mappingModel;
+    }
 
-  @Override
-  public JPAEdmMappingModel getJPAEdmMappingModel() {
-    return mappingModel;
-  }
+    @Override
+    public String mapJPAPersistenceUnit(final String persistenceUnitName) {
 
-  @Override
-  public String mapJPAPersistenceUnit(final String persistenceUnitName) {
+        JPAPersistenceUnitMapType persistenceUnit = mappingModel.getPersistenceUnit();
+        if (persistenceUnit.getName()
+                           .equals(persistenceUnitName)) {
+            return persistenceUnit.getEDMSchemaNamespace();
+        }
 
-    JPAPersistenceUnitMapType persistenceUnit = mappingModel.getPersistenceUnit();
-    if (persistenceUnit.getName().equals(persistenceUnitName)) {
-      return persistenceUnit.getEDMSchemaNamespace();
+        return null;
     }
 
-    return null;
-  }
+    @Override
+    public String mapJPAEntityType(final String jpaEntityTypeName) {
 
-  @Override
-  public String mapJPAEntityType(final String jpaEntityTypeName) {
-
-    JPAEntityTypeMapType jpaEntityTypeMap = searchJPAEntityTypeMapType(jpaEntityTypeName);
-    if (jpaEntityTypeMap != null) {
-      return jpaEntityTypeMap.getEDMEntityType();
-    } else {
-      return null;
+        JPAEntityTypeMapType jpaEntityTypeMap = searchJPAEntityTypeMapType(jpaEntityTypeName);
+        if (jpaEntityTypeMap != null) {
+            return jpaEntityTypeMap.getEDMEntityType();
+        }
+        return null;
     }
-  }
 
-  @Override
-  public String mapJPAEntitySet(final String jpaEntityTypeName) {
-    JPAEntityTypeMapType jpaEntityTypeMap = searchJPAEntityTypeMapType(jpaEntityTypeName);
-    if (jpaEntityTypeMap != null) {
-      return jpaEntityTypeMap.getEDMEntitySet();
-    } else {
-      return null;
+    @Override
+    public String mapJPAEntitySet(final String jpaEntityTypeName) {
+        JPAEntityTypeMapType jpaEntityTypeMap = searchJPAEntityTypeMapType(jpaEntityTypeName);
+        if (jpaEntityTypeMap != null) {
+            return jpaEntityTypeMap.getEDMEntitySet();
+        }
+        return null;
     }
-  }
 
-  @Override
-  public String mapJPAAttribute(final String jpaEntityTypeName, final String jpaAttributeName) {
-    JPAEntityTypeMapType jpaEntityTypeMap = searchJPAEntityTypeMapType(jpaEntityTypeName);
-    if (jpaEntityTypeMap != null && jpaEntityTypeMap.getJPAAttributes() != null) {
-      // fixing attributes
-      // removal issue
-      // from mapping
-      for (JPAAttribute jpaAttribute : jpaEntityTypeMap.getJPAAttributes().getJPAAttribute()) {
-        if (jpaAttribute.getName().equals(jpaAttributeName)) {
-          return jpaAttribute.getValue();
+    @Override
+    public String mapJPAAttribute(final String jpaEntityTypeName, final String jpaAttributeName) {
+        JPAEntityTypeMapType jpaEntityTypeMap = searchJPAEntityTypeMapType(jpaEntityTypeName);
+        if (jpaEntityTypeMap != null && jpaEntityTypeMap.getJPAAttributes() != null) {
+            // fixing attributes
+            // removal issue
+            // from mapping
+            for (JPAAttribute jpaAttribute : jpaEntityTypeMap.getJPAAttributes()
+                                                             .getJPAAttribute()) {
+                if (jpaAttribute.getName()
+                                .equals(jpaAttributeName)) {
+                    return jpaAttribute.getValue();
+                }
+            }
         }
-      }
-    }
 
-    return null;
-  }
+        return null;
+    }
 
-  @Override
-  public String mapJPARelationship(final String jpaEntityTypeName, final String jpaRelationshipName) {
-    JPAEntityTypeMapType jpaEntityTypeMap = searchJPAEntityTypeMapType(jpaEntityTypeName);
-    if (jpaEntityTypeMap != null && jpaEntityTypeMap.getJPARelationships() != null) {
-      for (JPARelationship jpaRealtionship : jpaEntityTypeMap.getJPARelationships().getJPARelationship()) {
-        if (jpaRealtionship.getName().equals(jpaRelationshipName)) {
-          return jpaRealtionship.getValue();
+    @Override
+    public String mapJPARelationship(final String jpaEntityTypeName, final String jpaRelationshipName) {
+        JPAEntityTypeMapType jpaEntityTypeMap = searchJPAEntityTypeMapType(jpaEntityTypeName);
+        if (jpaEntityTypeMap != null && jpaEntityTypeMap.getJPARelationships() != null) {
+            for (JPARelationship jpaRealtionship : jpaEntityTypeMap.getJPARelationships()
+                                                                   .getJPARelationship()) {
+                if (jpaRealtionship.getName()
+                                   .equals(jpaRelationshipName)) {
+                    return jpaRealtionship.getValue();
+                }
+            }
         }
-      }
-    }
 
-    return null;
-  }
+        return null;
+    }
 
-  @Override
-  public String mapJPAEmbeddableType(final String jpaEmbeddableTypeName) {
-    JPAEmbeddableTypeMapType jpaEmbeddableType = searchJPAEmbeddableTypeMapType(jpaEmbeddableTypeName);
-    if (jpaEmbeddableType != null) {
-      return jpaEmbeddableType.getEDMComplexType();
-    } else {
-      return null;
+    @Override
+    public String mapJPAEmbeddableType(final String jpaEmbeddableTypeName) {
+        JPAEmbeddableTypeMapType jpaEmbeddableType = searchJPAEmbeddableTypeMapType(jpaEmbeddableTypeName);
+        if (jpaEmbeddableType != null) {
+            return jpaEmbeddableType.getEDMComplexType();
+        }
+        return null;
     }
-  }
 
-  @Override
-  public String mapJPAEmbeddableTypeAttribute(final String jpaEmbeddableTypeName, final String jpaAttributeName) {
-    JPAEmbeddableTypeMapType jpaEmbeddableType = searchJPAEmbeddableTypeMapType(jpaEmbeddableTypeName);
-    if (jpaEmbeddableType != null && jpaEmbeddableType.getJPAAttributes() != null) {
-      for (JPAAttribute jpaAttribute : jpaEmbeddableType.getJPAAttributes().getJPAAttribute()) {
-        if (jpaAttribute.getName().equals(jpaAttributeName)) {
-          return jpaAttribute.getValue();
+    @Override
+    public String mapJPAEmbeddableTypeAttribute(final String jpaEmbeddableTypeName, final String jpaAttributeName) {
+        JPAEmbeddableTypeMapType jpaEmbeddableType = searchJPAEmbeddableTypeMapType(jpaEmbeddableTypeName);
+        if (jpaEmbeddableType != null && jpaEmbeddableType.getJPAAttributes() != null) {
+            for (JPAAttribute jpaAttribute : jpaEmbeddableType.getJPAAttributes()
+                                                              .getJPAAttribute()) {
+                if (jpaAttribute.getName()
+                                .equals(jpaAttributeName)) {
+                    return jpaAttribute.getValue();
+                }
+            }
         }
-      }
+        return null;
     }
-    return null;
-  }
 
-  private JPAEntityTypeMapType searchJPAEntityTypeMapType(final String jpaEntityTypeName) {
-    if (mappingModel != null) {
-      List<JPAEntityTypeMapType> types = mappingModel.getPersistenceUnit().getJPAEntityTypes().getJPAEntityType();
-      for (JPAEntityTypeMapType jpaEntityType : types) {
-        if (jpaEntityType.getName().equals(jpaEntityTypeName)) {
-          return jpaEntityType;
+    private JPAEntityTypeMapType searchJPAEntityTypeMapType(final String jpaEntityTypeName) {
+        if (mappingModel != null) {
+            List<JPAEntityTypeMapType> types = mappingModel.getPersistenceUnit()
+                                                           .getJPAEntityTypes()
+                                                           .getJPAEntityType();
+            for (JPAEntityTypeMapType jpaEntityType : types) {
+                if (jpaEntityType.getName()
+                                 .equals(jpaEntityTypeName)) {
+                    return jpaEntityType;
+                }
+            }
         }
-      }
+        return null;
     }
-    return null;
-  }
 
-  private JPAEmbeddableTypeMapType searchJPAEmbeddableTypeMapType(final String jpaEmbeddableTypeName) {
-    if (null != mappingModel.getPersistenceUnit() && 
-        null != mappingModel.getPersistenceUnit().getJPAEmbeddableTypes()) {
-      for (JPAEmbeddableTypeMapType jpaEmbeddableType : mappingModel.getPersistenceUnit().getJPAEmbeddableTypes()
-          .getJPAEmbeddableType()) {
-        if (jpaEmbeddableType.getName().equals(jpaEmbeddableTypeName)) {
-          return jpaEmbeddableType;
+    private JPAEmbeddableTypeMapType searchJPAEmbeddableTypeMapType(final String jpaEmbeddableTypeName) {
+        if (null != mappingModel.getPersistenceUnit() && null != mappingModel.getPersistenceUnit()
+                                                                             .getJPAEmbeddableTypes()) {
+            for (JPAEmbeddableTypeMapType jpaEmbeddableType : mappingModel.getPersistenceUnit()
+                                                                          .getJPAEmbeddableTypes()
+                                                                          .getJPAEmbeddableType()) {
+                if (jpaEmbeddableType.getName()
+                                     .equals(jpaEmbeddableTypeName)) {
+                    return jpaEmbeddableType;
+                }
+            }
         }
-      }
+        return null;
     }
-    return null;
-  }
 
-  protected InputStream loadMappingModelInputStream() {
-    if (mappingModelStream != null) {
-      return mappingModelStream;
+    protected InputStream loadMappingModelInputStream() {
+        if (mappingModelStream != null) {
+            return mappingModelStream;
+        }
+        ClassLoader classLoader = JPAEdmMappingModelService.class.getClassLoader();
+        InputStream modelStream = classLoader.getResourceAsStream("../../" + mappingModelName);
+        return (modelStream != null) ? modelStream : classLoader.getResourceAsStream(mappingModelName);
     }
-    ClassLoader classLoader = JPAEdmMappingModelService.class.getClassLoader();
-    InputStream modelStream = classLoader.getResourceAsStream("../../" + mappingModelName);
-    return (modelStream != null) ? modelStream : classLoader.getResourceAsStream(mappingModelName);
-  }
 
-  @Override
-  public boolean checkExclusionOfJPAEntityType(final String jpaEntityTypeName) {
-    JPAEntityTypeMapType type = searchJPAEntityTypeMapType(jpaEntityTypeName);
-    if (type != null) {
-      return type.isExclude();
+    @Override
+    public boolean checkExclusionOfJPAEntityType(final String jpaEntityTypeName) {
+        JPAEntityTypeMapType type = searchJPAEntityTypeMapType(jpaEntityTypeName);
+        if (type != null) {
+            return type.isExclude();
+        }
+        return false;
     }
-    return false;
-  }
 
-  @Override
-  public boolean checkExclusionOfJPAAttributeType(final String jpaEntityTypeName, final String jpaAttributeName) {
-    JPAEntityTypeMapType type = searchJPAEntityTypeMapType(jpaEntityTypeName);
-    if (type != null && type.getJPAAttributes() != null) {
-      for (JPAAttribute jpaAttribute : type.getJPAAttributes().getJPAAttribute()) {
-        if (jpaAttribute.getName().equals(jpaAttributeName)) {
-          return jpaAttribute.isExclude();
+    @Override
+    public boolean checkExclusionOfJPAAttributeType(final String jpaEntityTypeName, final String jpaAttributeName) {
+        JPAEntityTypeMapType type = searchJPAEntityTypeMapType(jpaEntityTypeName);
+        if (type != null && type.getJPAAttributes() != null) {
+            for (JPAAttribute jpaAttribute : type.getJPAAttributes()
+                                                 .getJPAAttribute()) {
+                if (jpaAttribute.getName()
+                                .equals(jpaAttributeName)) {
+                    return jpaAttribute.isExclude();
+                }
+            }
         }
-      }
+        return false;
     }
-    return false;
-  }
 
-  @Override
-  public boolean checkExclusionOfJPAEmbeddableType(final String jpaEmbeddableTypeName) {
-    JPAEmbeddableTypeMapType type = searchJPAEmbeddableTypeMapType(jpaEmbeddableTypeName);
-    if (type != null) {
-      return type.isExclude();
+    @Override
+    public boolean checkExclusionOfJPAEmbeddableType(final String jpaEmbeddableTypeName) {
+        JPAEmbeddableTypeMapType type = searchJPAEmbeddableTypeMapType(jpaEmbeddableTypeName);
+        if (type != null) {
+            return type.isExclude();
+        }
+        return false;
     }
-    return false;
-  }
 
-  @Override
-  public boolean checkExclusionOfJPAEmbeddableAttributeType(final String jpaEmbeddableTypeName,
-      final String jpaAttributeName) {
-    JPAEmbeddableTypeMapType type = searchJPAEmbeddableTypeMapType(jpaEmbeddableTypeName);
-    if (type != null && type.getJPAAttributes() != null) {
-      for (JPAAttribute jpaAttribute : type.getJPAAttributes().getJPAAttribute()) {
-        if (jpaAttribute.getName().equals(jpaAttributeName)) {
-          return jpaAttribute.isExclude();
+    @Override
+    public boolean checkExclusionOfJPAEmbeddableAttributeType(final String jpaEmbeddableTypeName, final String jpaAttributeName) {
+        JPAEmbeddableTypeMapType type = searchJPAEmbeddableTypeMapType(jpaEmbeddableTypeName);
+        if (type != null && type.getJPAAttributes() != null) {
+            for (JPAAttribute jpaAttribute : type.getJPAAttributes()
+                                                 .getJPAAttribute()) {
+                if (jpaAttribute.getName()
+                                .equals(jpaAttributeName)) {
+                    return jpaAttribute.isExclude();
+                }
+            }
         }
-      }
+        return false;
     }
-    return false;
-  }
 }
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPAEdmNameBuilder.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPAEdmNameBuilder.java
index 675cfc0a..0be8adb3 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPAEdmNameBuilder.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPAEdmNameBuilder.java
@@ -21,10 +21,10 @@ package org.apache.olingo.odata2.jpa.processor.core.access.model;
 import java.lang.reflect.AnnotatedElement;
 import java.lang.reflect.Field;
 
-import javax.persistence.Column;
-import javax.persistence.metamodel.Attribute;
-import javax.persistence.metamodel.ManagedType;
-import javax.persistence.metamodel.PluralAttribute;
+import jakarta.persistence.Column;
+import jakarta.persistence.metamodel.Attribute;
+import jakarta.persistence.metamodel.ManagedType;
+import jakarta.persistence.metamodel.PluralAttribute;
 
 import org.apache.olingo.odata2.api.edm.EdmMultiplicity;
 import org.apache.olingo.odata2.api.edm.FullQualifiedName;
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConverter.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConverter.java
index ec3b4939..579a1f59 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConverter.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConverter.java
@@ -29,12 +29,12 @@ import java.sql.Timestamp;
 import java.util.Calendar;
 import java.util.UUID;
 
-import javax.persistence.Lob;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.persistence.metamodel.Attribute;
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import jakarta.persistence.Lob;
+import jakarta.persistence.Temporal;
+import jakarta.persistence.TemporalType;
+import jakarta.persistence.metamodel.Attribute;
+import jakarta.xml.bind.annotation.adapters.XmlAdapter;
+import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import org.apache.olingo.odata2.api.edm.EdmSimpleTypeKind;
 import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPAModelException;
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociationEnd.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociationEnd.java
index c2cbd114..a3ff8892 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociationEnd.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociationEnd.java
@@ -28,11 +28,11 @@ import org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmEntityTypeView;
 import org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmPropertyView;
 import org.apache.olingo.odata2.jpa.processor.core.access.model.JPAEdmNameBuilder;
 
-import javax.persistence.ManyToMany;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
-import javax.persistence.metamodel.Attribute.PersistentAttributeType;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.OneToMany;
+import jakarta.persistence.OneToOne;
+import jakarta.persistence.metamodel.Attribute.PersistentAttributeType;
 import java.lang.reflect.AnnotatedElement;
 import java.lang.reflect.Array;
 import java.util.List;
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmBaseViewImpl.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmBaseViewImpl.java
index 80d9d75a..3af7b37f 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmBaseViewImpl.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmBaseViewImpl.java
@@ -18,7 +18,7 @@
  ******************************************************************************/
 package org.apache.olingo.odata2.jpa.processor.core.model;
 
-import javax.persistence.metamodel.Metamodel;
+import jakarta.persistence.metamodel.Metamodel;
 
 import org.apache.olingo.odata2.jpa.processor.api.ODataJPAContext;
 import org.apache.olingo.odata2.jpa.processor.api.access.JPAEdmBuilder;
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmComplexType.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmComplexType.java
index c033494e..940adb5f 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmComplexType.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmComplexType.java
@@ -24,8 +24,8 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import javax.persistence.metamodel.Attribute;
-import javax.persistence.metamodel.EmbeddableType;
+import jakarta.persistence.metamodel.Attribute;
+import jakarta.persistence.metamodel.EmbeddableType;
 
 import org.apache.olingo.odata2.api.edm.FullQualifiedName;
 import org.apache.olingo.odata2.api.edm.provider.ComplexProperty;
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmEntityType.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmEntityType.java
index 0e98cd6a..6b84d1ae 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmEntityType.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmEntityType.java
@@ -26,7 +26,7 @@ import java.util.List;
 import java.util.ListIterator;
 import java.util.Set;
 
-import javax.persistence.EntityListeners;
+import jakarta.persistence.EntityListeners;
 
 import org.apache.olingo.odata2.api.edm.provider.EntityType;
 import org.apache.olingo.odata2.jpa.processor.api.ODataJPATombstoneEntityListener;
@@ -46,7 +46,7 @@ public class JPAEdmEntityType extends JPAEdmBaseViewImpl implements JPAEdmEntity
 
   private JPAEdmSchemaView schemaView = null;
   private EntityType currentEdmEntityType = null;
-  private javax.persistence.metamodel.EntityType<?> currentJPAEntityType = null;
+  private jakarta.persistence.metamodel.EntityType<?> currentJPAEntityType = null;
   private EntityTypeList<EntityType> consistentEntityTypes = null;
 
   private HashMap<String, EntityType> consistentEntityTypeMap;
@@ -72,7 +72,7 @@ public class JPAEdmEntityType extends JPAEdmBaseViewImpl implements JPAEdmEntity
   }
 
   @Override
-  public javax.persistence.metamodel.EntityType<?> getJPAEntityType() {
+  public jakarta.persistence.metamodel.EntityType<?> getJPAEntityType() {
     return currentJPAEntityType;
   }
 
@@ -92,7 +92,7 @@ public class JPAEdmEntityType extends JPAEdmBaseViewImpl implements JPAEdmEntity
     @Override
     public void build() throws ODataJPAModelException, ODataJPARuntimeException {
 
-      Collection<javax.persistence.metamodel.EntityType<?>> jpaEntityTypes = metaModel.getEntities();
+      Collection<jakarta.persistence.metamodel.EntityType<?>> jpaEntityTypes = metaModel.getEntities();
 
       if (jpaEntityTypes == null || jpaEntityTypes.isEmpty() == true) {
         return;
@@ -102,7 +102,7 @@ public class JPAEdmEntityType extends JPAEdmBaseViewImpl implements JPAEdmEntity
       }
 
       jpaEntityTypes = sortJPAEntityTypes(jpaEntityTypes);
-      for (javax.persistence.metamodel.EntityType<?> jpaEntityType : jpaEntityTypes) {
+      for (jakarta.persistence.metamodel.EntityType<?> jpaEntityType : jpaEntityTypes) {
         currentEdmEntityType = new EntityType();
         currentJPAEntityType = jpaEntityType;
 
@@ -144,15 +144,15 @@ public class JPAEdmEntityType extends JPAEdmBaseViewImpl implements JPAEdmEntity
 
     }
 
-    private List<javax.persistence.metamodel.EntityType<?>> sortJPAEntityTypes(
-      final Collection<javax.persistence.metamodel.EntityType<?>> entities) {
+    private List<jakarta.persistence.metamodel.EntityType<?>> sortJPAEntityTypes(
+      final Collection<jakarta.persistence.metamodel.EntityType<?>> entities) {
 
-      List<javax.persistence.metamodel.EntityType<?>> entityTypeList =
-        new ArrayList<javax.persistence.metamodel.EntityType<?>>(entities.size());
+      List<jakarta.persistence.metamodel.EntityType<?>> entityTypeList =
+        new ArrayList<jakarta.persistence.metamodel.EntityType<?>>(entities.size());
 
-        Iterator<javax.persistence.metamodel.EntityType<?>> itr;
-        javax.persistence.metamodel.EntityType<?> smallestJpaEntity;
-        javax.persistence.metamodel.EntityType<?> currentJpaEntity;
+        Iterator<jakarta.persistence.metamodel.EntityType<?>> itr;
+       jakarta.persistence.metamodel.EntityType<?> smallestJpaEntity;
+       jakarta.persistence.metamodel.EntityType<?> currentJpaEntity;
         while (!entities.isEmpty()) {
           itr = entities.iterator();
           smallestJpaEntity = itr.next();
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmFacets.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmFacets.java
index 04c795ea..abf1ed09 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmFacets.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmFacets.java
@@ -20,8 +20,8 @@ package org.apache.olingo.odata2.jpa.processor.core.model;
 
 import java.lang.reflect.AnnotatedElement;
 
-import javax.persistence.Column;
-import javax.persistence.metamodel.Attribute;
+import jakarta.persistence.Column;
+import jakarta.persistence.metamodel.Attribute;
 
 import org.apache.olingo.odata2.api.edm.EdmSimpleTypeKind;
 import org.apache.olingo.odata2.api.edm.provider.Facets;
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmModel.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmModel.java
index 966bdd0b..568c5208 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmModel.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmModel.java
@@ -18,7 +18,7 @@
  ******************************************************************************/
 package org.apache.olingo.odata2.jpa.processor.core.model;
 
-import javax.persistence.metamodel.Metamodel;
+import jakarta.persistence.metamodel.Metamodel;
 
 import org.apache.olingo.odata2.jpa.processor.api.ODataJPAContext;
 import org.apache.olingo.odata2.jpa.processor.api.access.JPAEdmBuilder;
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmProperty.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmProperty.java
index 2e2c2be4..e1cdd3ec 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmProperty.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmProperty.java
@@ -26,17 +26,17 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import javax.persistence.AttributeOverride;
-import javax.persistence.AttributeOverrides;
-import javax.persistence.Column;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinColumns;
-import javax.persistence.metamodel.Attribute;
-import javax.persistence.metamodel.Attribute.PersistentAttributeType;
-import javax.persistence.metamodel.EmbeddableType;
-import javax.persistence.metamodel.EntityType;
-import javax.persistence.metamodel.PluralAttribute;
-import javax.persistence.metamodel.SingularAttribute;
+import jakarta.persistence.AttributeOverride;
+import jakarta.persistence.AttributeOverrides;
+import jakarta.persistence.Column;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.JoinColumns;
+import jakarta.persistence.metamodel.Attribute;
+import jakarta.persistence.metamodel.Attribute.PersistentAttributeType;
+import jakarta.persistence.metamodel.EmbeddableType;
+import jakarta.persistence.metamodel.EntityType;
+import jakarta.persistence.metamodel.PluralAttribute;
+import jakarta.persistence.metamodel.SingularAttribute;
 
 import org.apache.olingo.odata2.api.edm.EdmSimpleTypeKind;
 import org.apache.olingo.odata2.api.edm.FullQualifiedName;
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRole.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRole.java
index 9c3c89ea..c66290e2 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRole.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRole.java
@@ -23,7 +23,7 @@ import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.persistence.metamodel.Attribute;
+import jakarta.persistence.metamodel.Attribute;
 
 import org.apache.olingo.odata2.api.edm.provider.Association;
 import org.apache.olingo.odata2.api.edm.provider.AssociationEnd;
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAContextImplTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAContextImplTest.java
index 83952d0d..46bd5a1d 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAContextImplTest.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAContextImplTest.java
@@ -24,8 +24,8 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
 
 import org.apache.olingo.odata2.api.edm.provider.EdmProvider;
 import org.apache.olingo.odata2.api.processor.ODataContext;
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPADefaultProcessorTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPADefaultProcessorTest.java
index f607151c..ceb52ec5 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPADefaultProcessorTest.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPADefaultProcessorTest.java
@@ -1,26 +1,21 @@
 /*******************************************************************************
- * 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
- * 
+ * 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.
+ *
+ * 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.odata2.jpa.processor.core;
 
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
-
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.net.URI;
@@ -29,15 +24,8 @@ import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
-
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityTransaction;
-import javax.persistence.Query;
-import javax.persistence.metamodel.EntityType;
-import javax.persistence.metamodel.Metamodel;
-
 import org.apache.olingo.odata2.api.commons.HttpContentType;
 import org.apache.olingo.odata2.api.commons.InlineCount;
 import org.apache.olingo.odata2.api.edm.EdmConcurrencyMode;
@@ -69,7 +57,6 @@ import org.apache.olingo.odata2.api.uri.info.PutMergePatchUriInfo;
 import org.apache.olingo.odata2.jpa.processor.api.ODataJPAContext;
 import org.apache.olingo.odata2.jpa.processor.api.ODataJPADefaultProcessor;
 import org.apache.olingo.odata2.jpa.processor.api.ODataJPATransaction;
-import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPAModelException;
 import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPARuntimeException;
 import org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmMapping;
 import org.apache.olingo.odata2.jpa.processor.core.common.ODataJPATestConstants;
@@ -82,508 +69,617 @@ import org.easymock.EasyMock;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.EntityTransaction;
+import jakarta.persistence.Query;
+import jakarta.persistence.metamodel.EntityType;
+import jakarta.persistence.metamodel.Metamodel;
 
 public class ODataJPADefaultProcessorTest extends JPAEdmTestModelView {
 
-  private ODataJPADefaultProcessor objODataJPAProcessorDefault;
-
-  private static final String STR_LOCAL_URI = "http://localhost:8080/org.apache.olingo.odata2.processor.ref.web/";
-  private static final String SALESORDERPROCESSING_CONTAINER = "salesorderprocessingContainer";
-  private static final String SO_ID = "SoId";
-  private static final String SALES_ORDER = "SalesOrder";
-  private static final String SALES_ORDER_HEADERS = "SalesOrderHeaders";
-  private static final String STR_CONTENT_TYPE = "Content-Type";
-
-  @Before
-  public void setUp() {
-    objODataJPAProcessorDefault = new ODataJPADefaultProcessor(getLocalmockODataJPAContext()) { };
-  }
-
-  @Test
-  public void testReadEntitySetGetEntitySetUriInfoString() {
-    try {
-      GetEntityUriInfo getEntityView = getEntityUriInfo();
-      Assert.assertNotNull(objODataJPAProcessorDefault.readEntity(getEntityView, HttpContentType.APPLICATION_XML));
-    } catch (ODataJPAModelException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (ODataJPARuntimeException e1) {// Expected
-      assertTrue(true);
-    } catch (ODataException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-
-  }
-
-  @Test
-  public void testcountEntitySet() {
-    try {
-      ODataResponse countEntitySet =
-          objODataJPAProcessorDefault.countEntitySet(getEntitySetCountUriInfo(), HttpContentType.APPLICATION_XML);
-      Assert.assertNotNull(countEntitySet);
-      Object entity = countEntitySet.getEntity();
-      Assert.assertNotNull(entity);
-
-      byte[] b = new byte[2];
-      ((ByteArrayInputStream) entity).read(b);
-      Assert.assertEquals("11", new String(b, Charset.forName("utf-8")));
-    } catch (ODataException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (Exception e) {
-      assertTrue(true);
-    }
-  }
-
-  @Test
-  public void testExistsEntity() {
-    try {
-      Assert.assertNotNull(objODataJPAProcessorDefault.existsEntity(getEntityCountUriInfo(),
-          HttpContentType.APPLICATION_XML));
-      Assert.assertNull("ContentType MUST NOT set by entity provider", objODataJPAProcessorDefault.existsEntity(
-          getEntityCountUriInfo(), HttpContentType.APPLICATION_XML).getHeader(STR_CONTENT_TYPE));
-    } catch (ODataException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (Exception e) {
-      assertTrue(true);
-    }
-  }
-
-  @Test
-  public void testDeleteEntity() {
-    try {
-      Assert.assertNotNull(objODataJPAProcessorDefault.deleteEntity(getDeletetUriInfo(),
-          HttpContentType.APPLICATION_XML));
-    } catch (ODataException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-  }
-
-  @Test
-  public void testCreateEntity() {
-    try {
-      Assert.assertNotNull(objODataJPAProcessorDefault.createEntity(getPostUriInfo(), getMockedInputStreamContent(),
-          HttpContentType.APPLICATION_XML, HttpContentType.APPLICATION_XML));
-    } catch (ODataException e) {
-      Assert.assertTrue(true); // Expected TODO - need to revisit
-    }
-  }
-
-  @Test
-  public void testUpdateEntity() {
-    try {
-      Assert.assertNotNull(objODataJPAProcessorDefault.updateEntity(getPutUriInfo(), getMockedInputStreamContent(),
-          HttpContentType.APPLICATION_XML, false, HttpContentType.APPLICATION_XML));
-    } catch (ODataException e) {
-      Assert.assertTrue(true); // Expected TODO - need to revisit
-    }
-  }
-
-  private PutMergePatchUriInfo getPutUriInfo() {
-    return (PutMergePatchUriInfo) getDeletetUriInfo();
-  }
-
-  private PostUriInfo getPostUriInfo() {
-    return (PostUriInfo) getDeletetUriInfo();
-  }
-
-  private InputStream getMockedInputStreamContent() {
-    return new ByteArrayInputStream(getEntityBody().getBytes());
-  }
-
-  private String getEntityBody() {
-    return "<entry xmlns=\"http://www.w3.org/2005/Atom\" " +
-        "xmlns:m=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\" " +
-        "xmlns:d=\"http://schemas.microsoft.com/ado/2007/08/dataservices\" " +
-        "xml:base=\"http://localhost:8080/org.apache.olingo.odata2.processor.ref.web/SalesOrderProcessing.svc/\">"
-        + "<content type=\"application/xml\">"
-        + "<m:properties>"
-        + "<d:ID>2</d:ID>"
-        + "<d:CreationDate>2013-01-02T00:00:00</d:CreationDate>"
-        + "<d:CurrencyCode>Code_555</d:CurrencyCode>"
-        + "<d:BuyerAddressInfo m:type=\"SalesOrderProcessing.AddressInfo\">"
-        + "<d:Street>Test_Street_Name_055</d:Street>"
-        + "<d:Number>2</d:Number>"
-        + "<d:Country>Test_Country_2</d:Country>"
-        + "<d:City>Test_City_2</d:City>"
-        + "</d:BuyerAddressInfo>"
-        + "<d:GrossAmount>0.0</d:GrossAmount>"
-        + "<d:BuyerId>2</d:BuyerId>"
-        + "<d:DeliveryStatus>true</d:DeliveryStatus>"
-        + "<d:BuyerName>buyerName_2</d:BuyerName>"
-        + "<d:NetAmount>0.0</d:NetAmount>" + "</m:properties>" + "</content>" + "</entry>";
-  }
-
-  private GetEntitySetCountUriInfo getEntitySetCountUriInfo() {
-    return getLocalUriInfo();
-  }
-
-  private GetEntityCountUriInfo getEntityCountUriInfo() {
-    return getLocalUriInfo();
-  }
-
-  private DeleteUriInfo getDeletetUriInfo() {
-    UriInfo objUriInfo = EasyMock.createMock(UriInfo.class);
-    EasyMock.expect(objUriInfo.getStartEntitySet()).andStubReturn(getLocalEdmEntitySet());
-    List<NavigationSegment> navSegments = new ArrayList<NavigationSegment>();
-    EasyMock.expect(objUriInfo.getNavigationSegments()).andReturn(navSegments).anyTimes();
-    EasyMock.expect(objUriInfo.getTargetEntitySet()).andStubReturn(getLocalEdmEntitySet());
-    EasyMock.expect(objUriInfo.getSelect()).andStubReturn(null);
-    EasyMock.expect(objUriInfo.getOrderBy()).andStubReturn(getOrderByExpression());
-    EasyMock.expect(objUriInfo.getTop()).andStubReturn(getTop());
-    EasyMock.expect(objUriInfo.getSkip()).andStubReturn(getSkip());
-    EasyMock.expect(objUriInfo.getInlineCount()).andStubReturn(getInlineCount());
-    EasyMock.expect(objUriInfo.getFilter()).andStubReturn(getFilter());
-    EasyMock.expect(objUriInfo.getKeyPredicates()).andStubReturn(getKeyPredicates());
-    EasyMock.expect(objUriInfo.isLinks()).andStubReturn(false);
-    EasyMock.replay(objUriInfo);
-    return objUriInfo;
-  }
-
-  private List<KeyPredicate> getKeyPredicates() {
-    List<KeyPredicate> keyPredicates = new ArrayList<KeyPredicate>();
-    return keyPredicates;
-  }
-
-  /**
-   * @return
-   */
-  private UriInfo getLocalUriInfo() {
-    UriInfo objUriInfo = EasyMock.createMock(UriInfo.class);
-    EasyMock.expect(objUriInfo.getStartEntitySet()).andStubReturn(getLocalEdmEntitySet());
-    List<NavigationSegment> navSegments = new ArrayList<NavigationSegment>();
-    EasyMock.expect(objUriInfo.getNavigationSegments()).andReturn(navSegments).anyTimes();
-    EasyMock.expect(objUriInfo.getTargetEntitySet()).andStubReturn(getLocalEdmEntitySet());
-    EasyMock.expect(objUriInfo.getSelect()).andStubReturn(null);
-    EasyMock.expect(objUriInfo.getOrderBy()).andStubReturn(getOrderByExpression());
-    EasyMock.expect(objUriInfo.getTop()).andStubReturn(getTop());
-    EasyMock.expect(objUriInfo.getSkip()).andStubReturn(getSkip());
-    EasyMock.expect(objUriInfo.getInlineCount()).andStubReturn(getInlineCount());
-    EasyMock.expect(objUriInfo.getFilter()).andStubReturn(getFilter());
-    EasyMock.expect(objUriInfo.getFunctionImport()).andStubReturn(null);
-    EasyMock.replay(objUriInfo);
-    return objUriInfo;
-  }
-
-  /**
-   * @return
-   * @throws EdmException
-   */
-  private EdmEntitySet getLocalEdmEntitySet() {
-    EdmEntitySet edmEntitySet = EasyMock.createMock(EdmEntitySet.class);
-    try {
-      EasyMock.expect(edmEntitySet.getName()).andStubReturn(SALES_ORDER_HEADERS);
-      EasyMock.expect(edmEntitySet.getEntityContainer()).andStubReturn(getLocalEdmEntityContainer());
-      EasyMock.expect(edmEntitySet.getEntityType()).andStubReturn(getLocalEdmEntityType());
-      EasyMock.replay(edmEntitySet);
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-    return edmEntitySet;
-  }
-
-  /**
-   * @return
-   * @throws EdmException
-   */
-  private EdmEntityType getLocalEdmEntityType() {
-    EdmEntityType edmEntityType = EasyMock.createMock(EdmEntityType.class);
-    try {
-      EasyMock.expect(edmEntityType.getKeyProperties()).andStubReturn(new ArrayList<EdmProperty>());
-      EasyMock.expect(edmEntityType.getPropertyNames()).andStubReturn(getLocalPropertyNames());
-      EasyMock.expect(edmEntityType.getProperty(SO_ID)).andStubReturn(getEdmTypedMockedObj(SALES_ORDER));
-      EasyMock.expect(edmEntityType.getKind()).andStubReturn(EdmTypeKind.SIMPLE);
-      EasyMock.expect(edmEntityType.getNamespace()).andStubReturn(SALES_ORDER_HEADERS);
-      EasyMock.expect(edmEntityType.getName()).andStubReturn(SALES_ORDER_HEADERS);
-      EasyMock.expect(edmEntityType.hasStream()).andStubReturn(false);
-      EasyMock.expect(edmEntityType.getNavigationPropertyNames()).andStubReturn(new ArrayList<String>());
-      EasyMock.expect(edmEntityType.getKeyPropertyNames()).andStubReturn(new ArrayList<String>());
-      EasyMock.expect(edmEntityType.getMapping()).andStubReturn((EdmMapping) getEdmMappingMockedObj(SALES_ORDER));
-      EasyMock.replay(edmEntityType);
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-    return edmEntityType;
-  }
-
-  private InlineCount getInlineCount() {
-    return InlineCount.NONE;
-  }
-
-  private FilterExpression getFilter() {
-    return null;
-  }
-
-  private Integer getSkip() {
-    return null;
-  }
-
-  private Integer getTop() {
-    return null;
-  }
-
-  private OrderByExpression getOrderByExpression() {
-    return null;
-  }
-
-  private ODataJPAContext getLocalmockODataJPAContext() {
-    ODataJPAContext odataJPAContext = EasyMock.createMock(ODataJPAContext.class);
-    EasyMock.expect(odataJPAContext.getPageSize()).andReturn(0).anyTimes();
-    EasyMock.expect(odataJPAContext.getPersistenceUnitName()).andStubReturn("salesorderprocessing");
-    EasyMock.expect(odataJPAContext.getEntityManagerFactory()).andStubReturn(mockEntityManagerFactory());
-    EasyMock.expect(odataJPAContext.getODataJPATransaction()).andStubReturn(getLocalJpaTransaction());
-    EasyMock.expect(odataJPAContext.getODataContext()).andStubReturn(getLocalODataContext());
-    odataJPAContext.setODataContext((ODataContext) EasyMock.anyObject());
-    EasyMock.expectLastCall().anyTimes();
-    EasyMock.expect(odataJPAContext.getEntityManager()).andStubReturn(getLocalEntityManager());
-    EasyMock.expect(odataJPAContext.isContainerManaged()).andReturn(false);
-    EasyMock.expectLastCall().anyTimes();
-    EasyMock.replay(odataJPAContext);
-    return odataJPAContext;
-  }
-
-  private ODataJPATransaction getLocalJpaTransaction() {
-    ODataJPATransaction tx = EasyMock.createMock(ODataJPATransaction.class);
-    tx.begin(); // testing void method
-    tx.commit();// testing void method
-    tx.rollback();// testing void method
-    EasyMock.expect(tx.isActive()).andReturn(false);
-    EasyMock.expect(tx.isActive()).andReturn(false);
-    EasyMock.replay(tx);
-    return tx;
-  }
-
-  private EntityManagerFactory mockEntityManagerFactory() {
-    EntityManagerFactory emf = EasyMock.createMock(EntityManagerFactory.class);
-    EasyMock.expect(emf.getMetamodel()).andStubReturn(mockMetaModel());
-    EasyMock.expect(emf.createEntityManager()).andStubReturn(getLocalEntityManager());
-    EasyMock.replay(emf);
-    return emf;
-  }
-
-  private EntityManagerFactory mockEntityManagerFactory2() {// For create, to avoid stackoverflow
-    EntityManagerFactory emf = EasyMock.createMock(EntityManagerFactory.class);
-    EasyMock.expect(emf.getMetamodel()).andStubReturn(mockMetaModel());
-    EasyMock.replay(emf);
-    return emf;
-  }
-
-  private EntityManager getLocalEntityManager() {
-    EntityManager em = EasyMock.createMock(EntityManager.class);
-    EasyMock.expect(em.createQuery("SELECT E1 FROM SalesOrderHeaders E1")).andStubReturn(getQuery());
-    EasyMock.expect(em.createQuery("SELECT COUNT ( E1 ) FROM SalesOrderHeaders E1")).andStubReturn(
-        getQueryForSelectCount());
-    EasyMock.expect(em.getEntityManagerFactory()).andStubReturn(mockEntityManagerFactory2());// For create
-    EasyMock.expect(em.getTransaction()).andStubReturn(getLocalTransaction()); // For Delete
-    EasyMock.expect(em.isOpen()).andReturn(true).anyTimes();
-    Address obj = new Address();
-    em.remove(obj);// testing void method
-    em.flush();
-    em.close();
-    EasyMock.expectLastCall().anyTimes();
-    EasyMock.replay(em);
-    return em;
-  }
-
-  private EntityTransaction getLocalTransaction() {
-    EntityTransaction entityTransaction = EasyMock.createMock(EntityTransaction.class);
-    entityTransaction.begin(); // testing void method
-    entityTransaction.commit();// testing void method
-    entityTransaction.rollback();// testing void method
-    EasyMock.expect(entityTransaction.isActive()).andReturn(false);
-    EasyMock.replay(entityTransaction);
-    return entityTransaction;
-  }
-
-  private Query getQuery() {
-    Query query = EasyMock.createMock(Query.class);
-    EasyMock.expect(query.getResultList()).andStubReturn(getResultList());
-    EasyMock.replay(query);
-    return query;
-  }
-
-  private Query getQueryForSelectCount() {
-    Query query = EasyMock.createMock(Query.class);
-    EasyMock.expect(query.getResultList()).andStubReturn(getResultListForSelectCount());
-    EasyMock.replay(query);
-    return query;
-  }
-
-  private List<?> getResultList() {
-    List<Object> list = new ArrayList<Object>();
-    list.add(new Address());
-    return list;
-  }
-
-  private List<?> getResultListForSelectCount() {
-    List<Object> list = new ArrayList<Object>();
-    list.add(new Long(11));
-    return list;
-  }
-
-  class Address {
-    private String soId = "12";
-
-    public String getSoId() {
-      return soId;
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-      boolean isEqual = false;
-      if (obj instanceof Address) {
-        isEqual = getSoId().equalsIgnoreCase(((Address) obj).getSoId());//
-      }
-      return isEqual;
-    }
-  }
-
-  private Metamodel mockMetaModel() {
-    Metamodel metaModel = EasyMock.createMock(Metamodel.class);
-    EasyMock.expect(metaModel.getEntities()).andStubReturn(getLocalEntities());
-    EasyMock.replay(metaModel);
-    return metaModel;
-  }
-
-  private Set<EntityType<?>> getLocalEntities() {
-    Set<EntityType<?>> entityTypeSet = new HashSet<EntityType<?>>();
-    entityTypeSet.add(getLocalJPAEntityType());
-    return entityTypeSet;
-  }
-
-  @SuppressWarnings("rawtypes")
-  private EntityType<EntityType> getLocalJPAEntityType() {
-    @SuppressWarnings("unchecked")
-    EntityType<EntityType> entityType = EasyMock.createMock(EntityType.class);
-    EasyMock.expect(entityType.getJavaType()).andStubReturn(EntityType.class);
-    EasyMock.replay(entityType);
-    return entityType;
-  }
-
-  private GetEntityUriInfo getEntityUriInfo() {
-    GetEntityUriInfo getEntityView = EasyMock.createMock(GetEntityUriInfo.class);
-    EdmEntitySet edmEntitySet = EasyMock.createMock(EdmEntitySet.class);
-    EdmEntityType edmEntityType = EasyMock.createMock(EdmEntityType.class);
-    try {
-      EasyMock.expect(getEntityView.getExpand()).andStubReturn(null);
-      EasyMock.expect(edmEntityType.getKeyProperties()).andStubReturn(new ArrayList<EdmProperty>());
-      EasyMock.expect(edmEntitySet.getEntityType()).andStubReturn(edmEntityType);
-      EasyMock.expect(edmEntitySet.getName()).andStubReturn(SALES_ORDER_HEADERS);
-
-      EasyMock.expect(getEntityView.getSelect()).andStubReturn(null);
-      EasyMock.expect(getEntityView.getTargetEntitySet()).andStubReturn(edmEntitySet);
-      EasyMock.expect(edmEntityType.getPropertyNames()).andStubReturn(getLocalPropertyNames());
-      EasyMock.expect(edmEntityType.getProperty(SO_ID)).andStubReturn(getEdmTypedMockedObj(SO_ID));
-
-      EasyMock.expect(edmEntityType.getMapping()).andStubReturn((EdmMapping) getEdmMappingMockedObj(SALES_ORDER));
-
-      EasyMock.expect(edmEntityType.getKind()).andStubReturn(EdmTypeKind.SIMPLE);
-      EasyMock.expect(edmEntityType.getNamespace()).andStubReturn(SALES_ORDER_HEADERS);
-      EasyMock.expect(edmEntityType.getName()).andStubReturn(SALES_ORDER_HEADERS);
-      EasyMock.expect(edmEntityType.hasStream()).andStubReturn(false);
-      EasyMock.expect(edmEntityType.getNavigationPropertyNames()).andStubReturn(new ArrayList<String>());
-      EasyMock.expect(edmEntityType.getKeyPropertyNames()).andStubReturn(new ArrayList<String>());
-
-      EasyMock.expect(edmEntitySet.getEntityContainer()).andStubReturn(getLocalEdmEntityContainer());
-
-      EasyMock.replay(edmEntityType, edmEntitySet);
-      EasyMock.expect(getEntityView.getKeyPredicates()).andStubReturn(new ArrayList<KeyPredicate>());
-      List<NavigationSegment> navigationSegments = new ArrayList<NavigationSegment>();
-      EasyMock.expect(getEntityView.getNavigationSegments()).andReturn(navigationSegments);
-      EasyMock.expect(getEntityView.getStartEntitySet()).andReturn(edmEntitySet);
-
-      EasyMock.replay(getEntityView);
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-    return getEntityView;
-  }
-
-  private EdmEntityContainer getLocalEdmEntityContainer() {
-    EdmEntityContainer edmEntityContainer = EasyMock.createMock(EdmEntityContainer.class);
-    EasyMock.expect(edmEntityContainer.isDefaultEntityContainer()).andStubReturn(true);
-    try {
-      EasyMock.expect(edmEntityContainer.getName()).andStubReturn(SALESORDERPROCESSING_CONTAINER);
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-
-    EasyMock.replay(edmEntityContainer);
-    return edmEntityContainer;
-  }
-
-  private EdmTyped getEdmTypedMockedObj(final String propertyName) {
-    EdmProperty mockedEdmProperty = EasyMock.createMock(EdmProperty.class);
-    try {
-      EasyMock.expect(mockedEdmProperty.getMapping()).andStubReturn((EdmMapping) getEdmMappingMockedObj(propertyName));
-      EdmType edmType = EasyMock.createMock(EdmType.class);
-      EasyMock.expect(edmType.getKind()).andStubReturn(EdmTypeKind.SIMPLE);
-      EasyMock.replay(edmType);
-      EasyMock.expect(mockedEdmProperty.getName()).andStubReturn("identifier");
-      EasyMock.expect(mockedEdmProperty.getType()).andStubReturn(edmType);
-      EasyMock.expect(mockedEdmProperty.getFacets()).andStubReturn(getEdmFacetsMockedObj());
-
-      EasyMock.replay(mockedEdmProperty);
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-    return mockedEdmProperty;
-  }
-
-  private EdmFacets getEdmFacetsMockedObj() {
-    EdmFacets facets = EasyMock.createMock(EdmFacets.class);
-    EasyMock.expect(facets.getConcurrencyMode()).andStubReturn(EdmConcurrencyMode.Fixed);
-
-    EasyMock.replay(facets);
-    return facets;
-  }
-
-  private JPAEdmMapping getEdmMappingMockedObj(final String propertyName) {
-    JPAEdmMappingImpl mockedEdmMapping = EasyMock.createMock(JPAEdmMappingImpl.class);
-    if (propertyName.equalsIgnoreCase(SALES_ORDER)) {
-      EasyMock.expect(((EdmMapping) mockedEdmMapping).getInternalName()).andStubReturn(SALES_ORDER_HEADERS);
-    } else {
-      EasyMock.expect(((EdmMapping) mockedEdmMapping).getInternalName()).andStubReturn(propertyName);
-    }
-    EasyMock.expect(mockedEdmMapping.getODataJPATombstoneEntityListener()).andReturn(null);
-    EasyMock.<Class<?>> expect(mockedEdmMapping.getJPAType()).andReturn(SalesOrderHeader.class);
-    EasyMock.replay(mockedEdmMapping);
-    return mockedEdmMapping;
-  }
-
-  private List<String> getLocalPropertyNames() {
-    List<String> list = new ArrayList<String>();
-    list.add(SO_ID);
-    return list;
-  }
-
-  private ODataContext getLocalODataContext() {
-    ODataContext objODataContext = null;
-    try {
-      ODataContextMock contextMock = new ODataContextMock();
-      contextMock.setODataService(new ODataServiceMock().mock());
-      contextMock.setPathInfo(getLocalPathInfo());
-      objODataContext = contextMock.mock();
-
-    } catch (ODataException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-    return objODataContext;
-  }
-
-  private PathInfo getLocalPathInfo() {
-    PathInfo pathInfo = EasyMock.createMock(PathInfo.class);
-    EasyMock.expect(pathInfo.getServiceRoot()).andStubReturn(getLocalURI());
-    EasyMock.replay(pathInfo);
-    return pathInfo;
-  }
-
-  private URI getLocalURI() {
-    URI uri = null;
-    try {
-      uri = new URI(STR_LOCAL_URI);
-    } catch (URISyntaxException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-    return uri;
-  }
+    private ODataJPADefaultProcessor objODataJPAProcessorDefault;
+
+    private static final String STR_LOCAL_URI = "http://localhost:8080/org.apache.olingo.odata2.processor.ref.web/";
+    private static final String SALESORDERPROCESSING_CONTAINER = "salesorderprocessingContainer";
+    private static final String SO_ID = "SoId";
+    private static final String SALES_ORDER = "SalesOrder";
+    private static final String SALES_ORDER_HEADERS = "SalesOrderHeaders";
+    private static final String STR_CONTENT_TYPE = "Content-Type";
+
+    @Before
+    public void setUp() {
+        objODataJPAProcessorDefault = new ODataJPADefaultProcessor(getLocalmockODataJPAContext()) {};
+    }
+
+    @Test
+    public void testReadEntitySetGetEntitySetUriInfoString() {
+        try {
+            GetEntityUriInfo getEntityView = getEntityUriInfo();
+            Assert.assertNotNull(objODataJPAProcessorDefault.readEntity(getEntityView, HttpContentType.APPLICATION_XML));
+        } catch (ODataJPARuntimeException e1) {// Expected
+            assertTrue(true);
+        } catch (ODataException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+
+    }
+
+    @Test
+    public void testcountEntitySet() {
+        try {
+            ODataResponse countEntitySet =
+                    objODataJPAProcessorDefault.countEntitySet(getEntitySetCountUriInfo(), HttpContentType.APPLICATION_XML);
+            Assert.assertNotNull(countEntitySet);
+            Object entity = countEntitySet.getEntity();
+            Assert.assertNotNull(entity);
+
+            byte[] b = new byte[2];
+            ((ByteArrayInputStream) entity).read(b);
+            Assert.assertEquals("11", new String(b, Charset.forName("utf-8")));
+        } catch (ODataException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        } catch (Exception e) {
+            assertTrue(true);
+        }
+    }
+
+    @Test
+    public void testExistsEntity() {
+        try {
+            Assert.assertNotNull(objODataJPAProcessorDefault.existsEntity(getEntityCountUriInfo(), HttpContentType.APPLICATION_XML));
+            Assert.assertNull("ContentType MUST NOT set by entity provider",
+                    objODataJPAProcessorDefault.existsEntity(getEntityCountUriInfo(), HttpContentType.APPLICATION_XML)
+                                               .getHeader(STR_CONTENT_TYPE));
+        } catch (ODataException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        } catch (Exception e) {
+            assertTrue(true);
+        }
+    }
+
+    @Test
+    public void testDeleteEntity() {
+        try {
+            Assert.assertNotNull(objODataJPAProcessorDefault.deleteEntity(getDeletetUriInfo(), HttpContentType.APPLICATION_XML));
+        } catch (ODataException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+    }
+
+    @Test
+    public void testCreateEntity() {
+        try {
+            Assert.assertNotNull(objODataJPAProcessorDefault.createEntity(getPostUriInfo(), getMockedInputStreamContent(),
+                    HttpContentType.APPLICATION_XML, HttpContentType.APPLICATION_XML));
+        } catch (ODataException e) {
+            Assert.assertTrue(true); // Expected TODO - need to revisit
+        }
+    }
+
+    @Test
+    public void testUpdateEntity() {
+        try {
+            Assert.assertNotNull(objODataJPAProcessorDefault.updateEntity(getPutUriInfo(), getMockedInputStreamContent(),
+                    HttpContentType.APPLICATION_XML, false, HttpContentType.APPLICATION_XML));
+        } catch (ODataException e) {
+            Assert.assertTrue(true); // Expected TODO - need to revisit
+        }
+    }
+
+    private PutMergePatchUriInfo getPutUriInfo() {
+        return (PutMergePatchUriInfo) getDeletetUriInfo();
+    }
+
+    private PostUriInfo getPostUriInfo() {
+        return (PostUriInfo) getDeletetUriInfo();
+    }
+
+    private InputStream getMockedInputStreamContent() {
+        return new ByteArrayInputStream(getEntityBody().getBytes());
+    }
+
+    private String getEntityBody() {
+        return "<entry xmlns=\"http://www.w3.org/2005/Atom\" "
+                + "xmlns:m=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\" "
+                + "xmlns:d=\"http://schemas.microsoft.com/ado/2007/08/dataservices\" "
+                + "xml:base=\"http://localhost:8080/org.apache.olingo.odata2.processor.ref.web/SalesOrderProcessing.svc/\">"
+                + "<content type=\"application/xml\">" + "<m:properties>" + "<d:ID>2</d:ID>"
+                + "<d:CreationDate>2013-01-02T00:00:00</d:CreationDate>" + "<d:CurrencyCode>Code_555</d:CurrencyCode>"
+                + "<d:BuyerAddressInfo m:type=\"SalesOrderProcessing.AddressInfo\">" + "<d:Street>Test_Street_Name_055</d:Street>"
+                + "<d:Number>2</d:Number>" + "<d:Country>Test_Country_2</d:Country>" + "<d:City>Test_City_2</d:City>"
+                + "</d:BuyerAddressInfo>" + "<d:GrossAmount>0.0</d:GrossAmount>" + "<d:BuyerId>2</d:BuyerId>"
+                + "<d:DeliveryStatus>true</d:DeliveryStatus>" + "<d:BuyerName>buyerName_2</d:BuyerName>" + "<d:NetAmount>0.0</d:NetAmount>"
+                + "</m:properties>" + "</content>" + "</entry>";
+    }
+
+    private GetEntitySetCountUriInfo getEntitySetCountUriInfo() {
+        return getLocalUriInfo();
+    }
+
+    private GetEntityCountUriInfo getEntityCountUriInfo() {
+        return getLocalUriInfo();
+    }
+
+    private DeleteUriInfo getDeletetUriInfo() {
+        UriInfo objUriInfo = EasyMock.createMock(UriInfo.class);
+        EasyMock.expect(objUriInfo.getStartEntitySet())
+                .andStubReturn(getLocalEdmEntitySet());
+        List<NavigationSegment> navSegments = new ArrayList<NavigationSegment>();
+        EasyMock.expect(objUriInfo.getNavigationSegments())
+                .andReturn(navSegments)
+                .anyTimes();
+        EasyMock.expect(objUriInfo.getTargetEntitySet())
+                .andStubReturn(getLocalEdmEntitySet());
+        EasyMock.expect(objUriInfo.getSelect())
+                .andStubReturn(null);
+        EasyMock.expect(objUriInfo.getOrderBy())
+                .andStubReturn(getOrderByExpression());
+        EasyMock.expect(objUriInfo.getTop())
+                .andStubReturn(getTop());
+        EasyMock.expect(objUriInfo.getSkip())
+                .andStubReturn(getSkip());
+        EasyMock.expect(objUriInfo.getInlineCount())
+                .andStubReturn(getInlineCount());
+        EasyMock.expect(objUriInfo.getFilter())
+                .andStubReturn(getFilter());
+        EasyMock.expect(objUriInfo.getKeyPredicates())
+                .andStubReturn(getKeyPredicates());
+        EasyMock.expect(objUriInfo.isLinks())
+                .andStubReturn(false);
+        EasyMock.replay(objUriInfo);
+        return objUriInfo;
+    }
+
+    private List<KeyPredicate> getKeyPredicates() {
+        return new ArrayList<KeyPredicate>();
+    }
+
+    /**
+     * @return
+     */
+    private UriInfo getLocalUriInfo() {
+        UriInfo objUriInfo = EasyMock.createMock(UriInfo.class);
+        EasyMock.expect(objUriInfo.getStartEntitySet())
+                .andStubReturn(getLocalEdmEntitySet());
+        List<NavigationSegment> navSegments = new ArrayList<NavigationSegment>();
+        EasyMock.expect(objUriInfo.getNavigationSegments())
+                .andReturn(navSegments)
+                .anyTimes();
+        EasyMock.expect(objUriInfo.getTargetEntitySet())
+                .andStubReturn(getLocalEdmEntitySet());
+        EasyMock.expect(objUriInfo.getSelect())
+                .andStubReturn(null);
+        EasyMock.expect(objUriInfo.getOrderBy())
+                .andStubReturn(getOrderByExpression());
+        EasyMock.expect(objUriInfo.getTop())
+                .andStubReturn(getTop());
+        EasyMock.expect(objUriInfo.getSkip())
+                .andStubReturn(getSkip());
+        EasyMock.expect(objUriInfo.getInlineCount())
+                .andStubReturn(getInlineCount());
+        EasyMock.expect(objUriInfo.getFilter())
+                .andStubReturn(getFilter());
+        EasyMock.expect(objUriInfo.getFunctionImport())
+                .andStubReturn(null);
+        EasyMock.replay(objUriInfo);
+        return objUriInfo;
+    }
+
+    /**
+     * @return
+     * @throws EdmException
+     */
+    private EdmEntitySet getLocalEdmEntitySet() {
+        EdmEntitySet edmEntitySet = EasyMock.createMock(EdmEntitySet.class);
+        try {
+            EasyMock.expect(edmEntitySet.getName())
+                    .andStubReturn(SALES_ORDER_HEADERS);
+            EasyMock.expect(edmEntitySet.getEntityContainer())
+                    .andStubReturn(getLocalEdmEntityContainer());
+            EasyMock.expect(edmEntitySet.getEntityType())
+                    .andStubReturn(getLocalEdmEntityType());
+            EasyMock.replay(edmEntitySet);
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        return edmEntitySet;
+    }
+
+    /**
+     * @return
+     * @throws EdmException
+     */
+    private EdmEntityType getLocalEdmEntityType() {
+        EdmEntityType edmEntityType = EasyMock.createMock(EdmEntityType.class);
+        try {
+            EasyMock.expect(edmEntityType.getKeyProperties())
+                    .andStubReturn(new ArrayList<EdmProperty>());
+            EasyMock.expect(edmEntityType.getPropertyNames())
+                    .andStubReturn(getLocalPropertyNames());
+            EasyMock.expect(edmEntityType.getProperty(SO_ID))
+                    .andStubReturn(getEdmTypedMockedObj(SALES_ORDER));
+            EasyMock.expect(edmEntityType.getKind())
+                    .andStubReturn(EdmTypeKind.SIMPLE);
+            EasyMock.expect(edmEntityType.getNamespace())
+                    .andStubReturn(SALES_ORDER_HEADERS);
+            EasyMock.expect(edmEntityType.getName())
+                    .andStubReturn(SALES_ORDER_HEADERS);
+            EasyMock.expect(edmEntityType.hasStream())
+                    .andStubReturn(false);
+            EasyMock.expect(edmEntityType.getNavigationPropertyNames())
+                    .andStubReturn(new ArrayList<String>());
+            EasyMock.expect(edmEntityType.getKeyPropertyNames())
+                    .andStubReturn(new ArrayList<String>());
+            EasyMock.expect(edmEntityType.getMapping())
+                    .andStubReturn((EdmMapping) getEdmMappingMockedObj(SALES_ORDER));
+            EasyMock.replay(edmEntityType);
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        return edmEntityType;
+    }
+
+    private InlineCount getInlineCount() {
+        return InlineCount.NONE;
+    }
+
+    private FilterExpression getFilter() {
+        return null;
+    }
+
+    private Integer getSkip() {
+        return null;
+    }
+
+    private Integer getTop() {
+        return null;
+    }
+
+    private OrderByExpression getOrderByExpression() {
+        return null;
+    }
+
+    private ODataJPAContext getLocalmockODataJPAContext() {
+        ODataJPAContext odataJPAContext = EasyMock.createMock(ODataJPAContext.class);
+        EasyMock.expect(odataJPAContext.getPageSize())
+                .andReturn(0)
+                .anyTimes();
+        EasyMock.expect(odataJPAContext.getPersistenceUnitName())
+                .andStubReturn("salesorderprocessing");
+        EasyMock.expect(odataJPAContext.getEntityManagerFactory())
+                .andStubReturn(mockEntityManagerFactory());
+        EasyMock.expect(odataJPAContext.getODataJPATransaction())
+                .andStubReturn(getLocalJpaTransaction());
+        EasyMock.expect(odataJPAContext.getODataContext())
+                .andStubReturn(getLocalODataContext());
+        odataJPAContext.setODataContext((ODataContext) EasyMock.anyObject());
+        EasyMock.expectLastCall()
+                .anyTimes();
+        EasyMock.expect(odataJPAContext.getEntityManager())
+                .andStubReturn(getLocalEntityManager());
+        EasyMock.expect(odataJPAContext.isContainerManaged())
+                .andReturn(false);
+        EasyMock.expectLastCall()
+                .anyTimes();
+        EasyMock.replay(odataJPAContext);
+        return odataJPAContext;
+    }
+
+    private ODataJPATransaction getLocalJpaTransaction() {
+        ODataJPATransaction tx = EasyMock.createMock(ODataJPATransaction.class);
+        tx.begin(); // testing void method
+        tx.commit();// testing void method
+        tx.rollback();// testing void method
+        EasyMock.expect(tx.isActive())
+                .andReturn(false);
+        EasyMock.expect(tx.isActive())
+                .andReturn(false);
+        EasyMock.replay(tx);
+        return tx;
+    }
+
+    private EntityManagerFactory mockEntityManagerFactory() {
+        EntityManagerFactory emf = EasyMock.createMock(EntityManagerFactory.class);
+        EasyMock.expect(emf.getMetamodel())
+                .andStubReturn(mockMetaModel());
+        EasyMock.expect(emf.createEntityManager())
+                .andStubReturn(getLocalEntityManager());
+        EasyMock.replay(emf);
+        return emf;
+    }
+
+    private EntityManagerFactory mockEntityManagerFactory2() {// For create, to avoid stackoverflow
+        EntityManagerFactory emf = EasyMock.createMock(EntityManagerFactory.class);
+        EasyMock.expect(emf.getMetamodel())
+                .andStubReturn(mockMetaModel());
+        EasyMock.replay(emf);
+        return emf;
+    }
+
+    private EntityManager getLocalEntityManager() {
+        EntityManager em = EasyMock.createMock(EntityManager.class);
+        EasyMock.expect(em.createQuery("SELECT E1 FROM SalesOrderHeaders E1"))
+                .andStubReturn(getQuery());
+        EasyMock.expect(em.createQuery("SELECT COUNT ( E1 ) FROM SalesOrderHeaders E1"))
+                .andStubReturn(getQueryForSelectCount());
+        EasyMock.expect(em.getEntityManagerFactory())
+                .andStubReturn(mockEntityManagerFactory2());// For create
+        EasyMock.expect(em.getTransaction())
+                .andStubReturn(getLocalTransaction()); // For Delete
+        EasyMock.expect(em.isOpen())
+                .andReturn(true)
+                .anyTimes();
+        Address obj = new Address();
+        em.remove(obj);// testing void method
+        em.flush();
+        em.close();
+        EasyMock.expectLastCall()
+                .anyTimes();
+        EasyMock.replay(em);
+        return em;
+    }
+
+    private EntityTransaction getLocalTransaction() {
+        EntityTransaction entityTransaction = EasyMock.createMock(EntityTransaction.class);
+        entityTransaction.begin(); // testing void method
+        entityTransaction.commit();// testing void method
+        entityTransaction.rollback();// testing void method
+        EasyMock.expect(entityTransaction.isActive())
+                .andReturn(false);
+        EasyMock.replay(entityTransaction);
+        return entityTransaction;
+    }
+
+    private Query getQuery() {
+        Query query = EasyMock.createMock(Query.class);
+        EasyMock.expect(query.getResultList())
+                .andStubReturn(getResultList());
+        EasyMock.replay(query);
+        return query;
+    }
+
+    private Query getQueryForSelectCount() {
+        Query query = EasyMock.createMock(Query.class);
+        EasyMock.expect(query.getResultList())
+                .andStubReturn(getResultListForSelectCount());
+        EasyMock.replay(query);
+        return query;
+    }
+
+    private List<?> getResultList() {
+        List<Object> list = new ArrayList<Object>();
+        list.add(new Address());
+        return list;
+    }
+
+    private List<?> getResultListForSelectCount() {
+        List<Object> list = new ArrayList<Object>();
+        list.add(new Long(11));
+        return list;
+    }
+
+    class Address {
+        private final String soId = "12";
+
+        public String getSoId() {
+            return soId;
+        }
+
+        @Override
+        public int hashCode() {
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + getEnclosingInstance().hashCode();
+            return prime * result + Objects.hash(soId);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            Address other = (Address) obj;
+            if (!getEnclosingInstance().equals(other.getEnclosingInstance())) {
+                return false;
+            }
+            return Objects.equals(soId, other.soId);
+        }
+
+        private ODataJPADefaultProcessorTest getEnclosingInstance() {
+            return ODataJPADefaultProcessorTest.this;
+        }
+
+    }
+
+    private Metamodel mockMetaModel() {
+        Metamodel metaModel = EasyMock.createMock(Metamodel.class);
+        EasyMock.expect(metaModel.getEntities())
+                .andStubReturn(getLocalEntities());
+        EasyMock.replay(metaModel);
+        return metaModel;
+    }
+
+    private Set<EntityType<?>> getLocalEntities() {
+        Set<EntityType<?>> entityTypeSet = new HashSet<EntityType<?>>();
+        entityTypeSet.add(getLocalJPAEntityType());
+        return entityTypeSet;
+    }
+
+    @SuppressWarnings("rawtypes")
+    private EntityType<EntityType> getLocalJPAEntityType() {
+        @SuppressWarnings("unchecked")
+        EntityType<EntityType> entityType = EasyMock.createMock(EntityType.class);
+        EasyMock.expect(entityType.getJavaType())
+                .andStubReturn(EntityType.class);
+        EasyMock.replay(entityType);
+        return entityType;
+    }
+
+    private GetEntityUriInfo getEntityUriInfo() {
+        GetEntityUriInfo getEntityView = EasyMock.createMock(GetEntityUriInfo.class);
+        EdmEntitySet edmEntitySet = EasyMock.createMock(EdmEntitySet.class);
+        EdmEntityType edmEntityType = EasyMock.createMock(EdmEntityType.class);
+        try {
+            EasyMock.expect(getEntityView.getExpand())
+                    .andStubReturn(null);
+            EasyMock.expect(edmEntityType.getKeyProperties())
+                    .andStubReturn(new ArrayList<EdmProperty>());
+            EasyMock.expect(edmEntitySet.getEntityType())
+                    .andStubReturn(edmEntityType);
+            EasyMock.expect(edmEntitySet.getName())
+                    .andStubReturn(SALES_ORDER_HEADERS);
+
+            EasyMock.expect(getEntityView.getSelect())
+                    .andStubReturn(null);
+            EasyMock.expect(getEntityView.getTargetEntitySet())
+                    .andStubReturn(edmEntitySet);
+            EasyMock.expect(edmEntityType.getPropertyNames())
+                    .andStubReturn(getLocalPropertyNames());
+            EasyMock.expect(edmEntityType.getProperty(SO_ID))
+                    .andStubReturn(getEdmTypedMockedObj(SO_ID));
+
+            EasyMock.expect(edmEntityType.getMapping())
+                    .andStubReturn((EdmMapping) getEdmMappingMockedObj(SALES_ORDER));
+
+            EasyMock.expect(edmEntityType.getKind())
+                    .andStubReturn(EdmTypeKind.SIMPLE);
+            EasyMock.expect(edmEntityType.getNamespace())
+                    .andStubReturn(SALES_ORDER_HEADERS);
+            EasyMock.expect(edmEntityType.getName())
+                    .andStubReturn(SALES_ORDER_HEADERS);
+            EasyMock.expect(edmEntityType.hasStream())
+                    .andStubReturn(false);
+            EasyMock.expect(edmEntityType.getNavigationPropertyNames())
+                    .andStubReturn(new ArrayList<String>());
+            EasyMock.expect(edmEntityType.getKeyPropertyNames())
+                    .andStubReturn(new ArrayList<String>());
+
+            EasyMock.expect(edmEntitySet.getEntityContainer())
+                    .andStubReturn(getLocalEdmEntityContainer());
+
+            EasyMock.replay(edmEntityType, edmEntitySet);
+            EasyMock.expect(getEntityView.getKeyPredicates())
+                    .andStubReturn(new ArrayList<KeyPredicate>());
+            List<NavigationSegment> navigationSegments = new ArrayList<NavigationSegment>();
+            EasyMock.expect(getEntityView.getNavigationSegments())
+                    .andReturn(navigationSegments);
+            EasyMock.expect(getEntityView.getStartEntitySet())
+                    .andReturn(edmEntitySet);
+
+            EasyMock.replay(getEntityView);
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        return getEntityView;
+    }
+
+    private EdmEntityContainer getLocalEdmEntityContainer() {
+        EdmEntityContainer edmEntityContainer = EasyMock.createMock(EdmEntityContainer.class);
+        EasyMock.expect(edmEntityContainer.isDefaultEntityContainer())
+                .andStubReturn(true);
+        try {
+            EasyMock.expect(edmEntityContainer.getName())
+                    .andStubReturn(SALESORDERPROCESSING_CONTAINER);
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+
+        EasyMock.replay(edmEntityContainer);
+        return edmEntityContainer;
+    }
+
+    private EdmTyped getEdmTypedMockedObj(final String propertyName) {
+        EdmProperty mockedEdmProperty = EasyMock.createMock(EdmProperty.class);
+        try {
+            EasyMock.expect(mockedEdmProperty.getMapping())
+                    .andStubReturn((EdmMapping) getEdmMappingMockedObj(propertyName));
+            EdmType edmType = EasyMock.createMock(EdmType.class);
+            EasyMock.expect(edmType.getKind())
+                    .andStubReturn(EdmTypeKind.SIMPLE);
+            EasyMock.replay(edmType);
+            EasyMock.expect(mockedEdmProperty.getName())
+                    .andStubReturn("identifier");
+            EasyMock.expect(mockedEdmProperty.getType())
+                    .andStubReturn(edmType);
+            EasyMock.expect(mockedEdmProperty.getFacets())
+                    .andStubReturn(getEdmFacetsMockedObj());
+
+            EasyMock.replay(mockedEdmProperty);
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        return mockedEdmProperty;
+    }
+
+    private EdmFacets getEdmFacetsMockedObj() {
+        EdmFacets facets = EasyMock.createMock(EdmFacets.class);
+        EasyMock.expect(facets.getConcurrencyMode())
+                .andStubReturn(EdmConcurrencyMode.Fixed);
+
+        EasyMock.replay(facets);
+        return facets;
+    }
+
+    private JPAEdmMapping getEdmMappingMockedObj(final String propertyName) {
+        JPAEdmMappingImpl mockedEdmMapping = EasyMock.createMock(JPAEdmMappingImpl.class);
+        if (propertyName.equalsIgnoreCase(SALES_ORDER)) {
+            EasyMock.expect(((EdmMapping) mockedEdmMapping).getInternalName())
+                    .andStubReturn(SALES_ORDER_HEADERS);
+        } else {
+            EasyMock.expect(((EdmMapping) mockedEdmMapping).getInternalName())
+                    .andStubReturn(propertyName);
+        }
+        EasyMock.expect(mockedEdmMapping.getODataJPATombstoneEntityListener())
+                .andReturn(null);
+        EasyMock.<Class<?>>expect(mockedEdmMapping.getJPAType())
+                .andReturn(SalesOrderHeader.class);
+        EasyMock.replay(mockedEdmMapping);
+        return mockedEdmMapping;
+    }
+
+    private List<String> getLocalPropertyNames() {
+        List<String> list = new ArrayList<String>();
+        list.add(SO_ID);
+        return list;
+    }
+
+    private ODataContext getLocalODataContext() {
+        ODataContext objODataContext = null;
+        try {
+            ODataContextMock contextMock = new ODataContextMock();
+            contextMock.setODataService(new ODataServiceMock().mock());
+            contextMock.setPathInfo(getLocalPathInfo());
+            objODataContext = contextMock.mock();
+
+        } catch (ODataException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        return objODataContext;
+    }
+
+    private PathInfo getLocalPathInfo() {
+        PathInfo pathInfo = EasyMock.createMock(PathInfo.class);
+        EasyMock.expect(pathInfo.getServiceRoot())
+                .andStubReturn(getLocalURI());
+        EasyMock.replay(pathInfo);
+        return pathInfo;
+    }
+
+    private URI getLocalURI() {
+        URI uri = null;
+        try {
+            uri = new URI(STR_LOCAL_URI);
+        } catch (URISyntaxException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        return uri;
+    }
 
 }
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAResponseBuilderTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAResponseBuilderTest.java
index 7105c3db..d94f8829 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAResponseBuilderTest.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataJPAResponseBuilderTest.java
@@ -1,20 +1,16 @@
 /*******************************************************************************
- * 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
- * 
+ * 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.
+ *
+ * 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.odata2.jpa.processor.core;
 
@@ -22,7 +18,6 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
-
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.net.URI;
@@ -32,7 +27,6 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import org.apache.olingo.odata2.api.commons.InlineCount;
 import org.apache.olingo.odata2.api.edm.EdmEntityContainer;
 import org.apache.olingo.odata2.api.edm.EdmEntitySet;
@@ -76,658 +70,719 @@ import org.junit.Test;
 
 public class ODataJPAResponseBuilderTest extends JPAEdmTestModelView {
 
-  private ODataJPAResponseBuilder responseBuilder;
-
-  @Before
-  public void init() {
-    responseBuilder = new ODataJPAResponseBuilderDefault(getODataJPAContext());
-  }
-
-  /*
-   * This Unit is supposed to test the building of Entity Provider Properties for query with $expand
-   */
-  @Test
-  public void testGetEntityProviderPropertiesQuery() {
-    GetEntitySetUriInfo getEntitySetUriInfo = mockEntitySetUriInfoForExpand();
-    ODataJPAContext oDataJPAContext = getODataJPAContext();
-    // Building the edm entity
-    List<Map<String, Object>> edmEntityList = new ArrayList<Map<String, Object>>();
-    Map<String, Object> edmEntity = new HashMap<String, Object>();
-    edmEntity.put("ID", 1);
-    edmEntityList.add(edmEntity);
-    // Invoking the private static method using reflection
-    Class<?> clazz = ODataJPAResponseBuilderDefault.class;
-    Object[] actualParameters = { oDataJPAContext, getEntitySetUriInfo, edmEntityList };
-    Class<?>[] formalParameters = { ODataJPAContext.class, GetEntitySetUriInfo.class, List.class };
-    EntityProviderWriteProperties providerProperties = null;
-    try {
-      Method method = clazz.getDeclaredMethod("getEntityProviderProperties", formalParameters);
-      method.setAccessible(true);
-      providerProperties = (EntityProviderWriteProperties) method.invoke(responseBuilder, actualParameters);
-      assertEquals(1, providerProperties.getExpandSelectTree().getLinks().size());
-    } catch (SecurityException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (NoSuchMethodException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (IllegalArgumentException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (IllegalAccessException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (InvocationTargetException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-  }
-
-  /*
-   * This Unit is supposed to test the building of Entity Provider Properties for read with $expand
-   */
-  @Test
-  public void testGetEntityProviderPropertiesRead() {
-
-    // Getting the EntityUriInfo
-    GetEntityUriInfo getEntityUriInfo = mockEntityUriInfoForExpand();
-    ODataJPAContext oDataJPAContext = getODataJPAContext();
-    Class<?> clazz = ODataJPAResponseBuilderDefault.class;
-    Object[] actualParameters = { oDataJPAContext, getEntityUriInfo };
-    Class<?>[] formalParameters = { ODataJPAContext.class, GetEntityUriInfo.class };
-    EntityProviderWriteProperties providerProperties = null;
-    try {
-      Method method = clazz.getDeclaredMethod("getEntityProviderProperties", formalParameters);
-      method.setAccessible(true);
-      providerProperties = (EntityProviderWriteProperties) method.invoke(responseBuilder, actualParameters);
-      assertEquals(1, providerProperties.getExpandSelectTree().getLinks().size());
-    } catch (SecurityException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (NoSuchMethodException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (IllegalArgumentException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (IllegalAccessException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (InvocationTargetException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-
-  }
-
-  @SuppressWarnings("unchecked")
-  @Test
-  public void testConstructListofNavProperty() {
-    List<ArrayList<NavigationPropertySegment>> expand = new ArrayList<ArrayList<NavigationPropertySegment>>();
-    ArrayList<NavigationPropertySegment> navPropList1 = new ArrayList<NavigationPropertySegment>();
-    navPropList1.add(getNavigationPropertySegment("DemoNavigationProperties11"));
-    navPropList1.add(getNavigationPropertySegment("DemoNavigationProperties12"));
-    expand.add(navPropList1);
-    ArrayList<NavigationPropertySegment> navPropList2 = new ArrayList<NavigationPropertySegment>();
-    navPropList2.add(getNavigationPropertySegment("DemoNavigationProperties21"));
-    navPropList2.add(getNavigationPropertySegment("DemoNavigationProperties22"));
-    expand.add(navPropList2);
-    Class<?> clazz = ODataJPAResponseBuilderDefault.class;
-    Object[] actualParameters = { expand };
-    Class<?>[] formalParameters = { List.class };
-    List<EdmNavigationProperty> navigationProperties = null;
-    try {
-      Method method = clazz.getDeclaredMethod("constructListofNavProperty", formalParameters);
-      method.setAccessible(true);
-      navigationProperties = (List<EdmNavigationProperty>) method.invoke(responseBuilder, actualParameters);
-      assertEquals("DemoNavigationProperties21", navigationProperties.get(1).getName());
-      assertEquals("DemoNavigationProperties11", navigationProperties.get(0).getName());
-    } catch (SecurityException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (NoSuchMethodException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (IllegalArgumentException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (IllegalAccessException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (InvocationTargetException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-
-  }
-
-  @Test
-  public void testBuildListOfTGetEntitySetUriInfoStringODataJPAContext() {
-    try {
-      assertNotNull(responseBuilder.build(getResultsView(), getJPAEntities(), "application/xml"));
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-
-  }
-
-  @Test
-  public void testBuildNegatives() {// Bad content type
-    try {
-      EntityType entity = new EntityType();
-      entity.setName("SalesOrderHeader");
-      try {
-        assertNotNull(responseBuilder.build(getLocalGetURIInfo(), getEntity(), "xml"));
-      } catch (ODataNotFoundException e) {
-        assertTrue(true);
-      }
-    } catch (ODataJPARuntimeException e) {
-      assertTrue(true);// Nothing to do, Expected.
-    }
-    try {// Bad content type
-      assertNotNull(responseBuilder.build(getResultsView(), getJPAEntities(), "xml"));
-    } catch (ODataJPARuntimeException e) {
-      assertTrue(true);// Nothing to do, Expected.
-    }
-
-  }
-
-  @Test
-  public void testBuildObjectGetEntityUriInfoStringODataJPAContext() throws ODataNotFoundException {
-    try {
-      assertNotNull(responseBuilder.build(getLocalGetURIInfo(), (Object) new SalesOrderHeader(2, 10),
-          "application/xml"));
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-  }
-
-  @Test
-  public void testBuildNullSelects() {// Bad content type
-    try {
-      responseBuilder.build(getResultsViewWithNullSelects(), getJPAEntities(), "xml");
-    } catch (ODataJPARuntimeException e) {
-      assertTrue(true);// Nothing to do, Expected.
-    } catch (Exception e) {
-      assertTrue(true);
-    }
-  }
-
-  @Test
-  public void testBuildGetCount() {
-    ODataResponse objODataResponse = null;
-    try {
-      objODataResponse = responseBuilder.build(1);
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-    assertNotNull(objODataResponse);
-  }
-
-  private ODataJPAContext getODataJPAContext() {
-    ODataJPAContext objODataJPAContext = EasyMock.createMock(ODataJPAContext.class);
-    EasyMock.expect(objODataJPAContext.getODataContext()).andStubReturn(getLocalODataContext());
-    EasyMock.expect(objODataJPAContext.getPageSize()).andReturn(10);
-    EasyMock.expect(objODataJPAContext.getPaging()).andReturn(mockJPAPaging()).anyTimes();
-    EasyMock.replay(objODataJPAContext);
-    return objODataJPAContext;
-  }
-
-  private ODataContext getLocalODataContext() {
-    ODataContext objODataContext = EasyMock.createMock(ODataContext.class);
-    try {
-      EasyMock.expect(objODataContext.getPathInfo()).andStubReturn(getLocalPathInfo());
-    } catch (ODataException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-    EasyMock.replay(objODataContext);
-    return objODataContext;
-  }
-
-  private JPAPaging mockJPAPaging() {
-    JPAPaging paging = new JPAPaging() {
-
-      @Override
-      public int getStartPage() {
-        return 0;
-      }
-
-      @Override
-      public List<Object> getPagedEntities() {
-        return null;
-      }
-
-      @Override
-      public int getPageSize() {
-        return 10;
-      }
-
-      @Override
-      public int getNextPage() {
-        return 10;
-      }
-    };
-
-    return paging;
-  }
-
-  private PathInfo getLocalPathInfo() {
-    PathInfo pathInfo = EasyMock.createMock(PathInfo.class);
-    EasyMock.expect(pathInfo.getServiceRoot()).andStubReturn(getLocalURI());
-    EasyMock.expect(pathInfo.getRequestUri()).andStubReturn(getRequestURI());
-    EasyMock.replay(pathInfo);
-    return pathInfo;
-  }
-
-  private URI getRequestURI() {
-    URI uri = null;
-    try {
-      uri = new URI("SalesOrders");
-    } catch (URISyntaxException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-    return uri;
-  }
-
-  private URI getLocalURI() {
-    URI uri = null;
-    try {
-      uri = new URI("http://localhost:8080/org.apache.olingo.odata2.processor.ref.web/");
-    } catch (URISyntaxException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-    return uri;
-  }
-
-  private GetEntitySetUriInfo getResultsView() {
-    GetEntitySetUriInfo objGetEntitySetUriInfo = EasyMock.createMock(GetEntitySetUriInfo.class);
-    EasyMock.expect(objGetEntitySetUriInfo.getInlineCount()).andStubReturn(getLocalInlineCount());
-    EasyMock.expect(objGetEntitySetUriInfo.getTargetEntitySet()).andStubReturn(getLocalTargetEntitySet());
-    EasyMock.expect(objGetEntitySetUriInfo.getSelect()).andStubReturn(getSelectItemList());
-    EasyMock.expect(objGetEntitySetUriInfo.getExpand()).andStubReturn(getExpandList());
-    EasyMock.expect(objGetEntitySetUriInfo.getSkip()).andStubReturn(new Integer(1));
-    EasyMock.replay(objGetEntitySetUriInfo);
-    return objGetEntitySetUriInfo;
-  }
-
-  private List<ArrayList<NavigationPropertySegment>> getExpandList() {
-    List<ArrayList<NavigationPropertySegment>> expandList = new ArrayList<ArrayList<NavigationPropertySegment>>();
-    return expandList;
-  }
-
-  private GetEntitySetUriInfo getResultsViewWithNullSelects() {
-    GetEntitySetUriInfo objGetEntitySetUriInfo = EasyMock.createMock(GetEntitySetUriInfo.class);
-    EasyMock.expect(objGetEntitySetUriInfo.getInlineCount()).andStubReturn(getLocalInlineCount());
-    EasyMock.expect(objGetEntitySetUriInfo.getTargetEntitySet()).andStubReturn(getLocalTargetEntitySet());
-    EasyMock.expect(objGetEntitySetUriInfo.getSelect()).andStubReturn(null);
-    EasyMock.expect(objGetEntitySetUriInfo.getExpand()).andStubReturn(null);
-    EasyMock.expect(objGetEntitySetUriInfo.getSkip()).andStubReturn(new Integer(1));
-
-    EasyMock.replay(objGetEntitySetUriInfo);
-    return objGetEntitySetUriInfo;
-  }
-
-  private GetEntityUriInfo getLocalGetURIInfo() {
-    GetEntityUriInfo objGetEntityUriInfo = EasyMock.createMock(GetEntityUriInfo.class);
-    EasyMock.expect(objGetEntityUriInfo.getSelect()).andStubReturn(getSelectItemList());
-    EasyMock.expect(objGetEntityUriInfo.getTargetEntitySet()).andStubReturn(getLocalTargetEntitySet());
-    EasyMock.expect(objGetEntityUriInfo.getExpand()).andStubReturn(getExpandList());
-    EasyMock.replay(objGetEntityUriInfo);
-    return objGetEntityUriInfo;
-  }
-
-  private List<SelectItem> getSelectItemList() {
-    List<SelectItem> selectItems = new ArrayList<SelectItem>();
-    selectItems.add(getSelectItem());
-    return selectItems;
-  }
-
-  private SelectItem getSelectItem() {
-    SelectItem selectItem = EasyMock.createMock(SelectItem.class);
-    EasyMock.expect(selectItem.getProperty()).andStubReturn(getEdmPropertyForSelect());
-    List<NavigationPropertySegment> navigationSegmentList = new ArrayList<NavigationPropertySegment>();
-    EasyMock.expect(selectItem.getNavigationPropertySegments()).andStubReturn(navigationSegmentList);
-    EasyMock.expect(selectItem.isStar()).andReturn(false).anyTimes();
-    EasyMock.replay(selectItem);
-    return selectItem;
-  }
-
-  private EdmProperty getEdmPropertyForSelect() {
-    EdmSimpleType edmType = EasyMock.createMock(EdmSimpleType.class);
-    EasyMock.expect(edmType.getKind()).andStubReturn(EdmTypeKind.SIMPLE);
-    Facets facets = new Facets().setNullable(false);
-    try {
-      EasyMock.expect(edmType.valueToString(new Integer(2), EdmLiteralKind.URI, facets)).andStubReturn("2");
-      EasyMock.expect(edmType.valueToString(new Integer(2), EdmLiteralKind.DEFAULT, facets)).andStubReturn("2");
-    } catch (EdmSimpleTypeException e1) {
-      fail("There is an exception in mocking EdmType object " + e1.getMessage());
-    }
-    EasyMock.replay(edmType);
-    EdmProperty edmProperty = EasyMock.createMock(EdmProperty.class);
-    JPAEdmMappingImpl edmMapping = EasyMock.createMock(JPAEdmMappingImpl.class);
-    EasyMock.expect(edmMapping.getInternalName()).andStubReturn("soId");
-    EasyMock.expect(edmMapping.getMediaResourceMimeTypeKey()).andReturn(null);
-    EasyMock.expect(((JPAEdmMappingImpl) edmMapping).isVirtualAccess()).andStubReturn(false);
-    EasyMock.replay(edmMapping);
-    try {
-      EasyMock.expect(edmProperty.getName()).andStubReturn("ID");
-      EasyMock.expect(edmProperty.getType()).andStubReturn(edmType);
-      EasyMock.expect(edmProperty.getMapping()).andStubReturn(edmMapping);
-      EasyMock.expect(edmProperty.getFacets()).andStubReturn(facets);
-      EasyMock.expect(edmProperty.getCustomizableFeedMappings()).andStubReturn(null);
-      EasyMock.expect(edmProperty.getMimeType()).andStubReturn(null);
-      EasyMock.replay(edmProperty);
-
-    } catch (EdmException e) {
-      fail("There is an exception in mocking some object " + e.getMessage());
-    }
-
-    return edmProperty;
-
-  }
-
-  private EdmEntitySet getLocalTargetEntitySet() {
-    EdmEntitySet objEdmEntitySet = EasyMock.createMock(EdmEntitySet.class);
-    try {
-      EasyMock.expect(objEdmEntitySet.getEntityType()).andStubReturn(getLocalEdmEntityType());
-      EasyMock.expect(objEdmEntitySet.getName()).andStubReturn("SalesOderHeaders");
-      EasyMock.expect(objEdmEntitySet.getEntityContainer()).andStubReturn(getLocalEdmEntityContainer());
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-
-    EasyMock.replay(objEdmEntitySet);
-    return objEdmEntitySet;
-  }
-
-  private EdmEntityContainer getLocalEdmEntityContainer() {
-    EdmEntityContainer edmEntityContainer = EasyMock.createMock(EdmEntityContainer.class);
-    EasyMock.expect(edmEntityContainer.isDefaultEntityContainer()).andStubReturn(true);
-    try {
-      EasyMock.expect(edmEntityContainer.getName()).andStubReturn("salesorderprocessingContainer");
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-
-    EasyMock.replay(edmEntityContainer);
-    return edmEntityContainer;
-  }
-
-  private EdmEntityType getLocalEdmEntityType() {
-    EdmEntityType objEdmEntityType = EasyMock.createMock(EdmEntityType.class);
-    try {
-      EasyMock.expect(objEdmEntityType.getName()).andStubReturn("SalesOderHeaders");
-      EasyMock.expect(objEdmEntityType.getNamespace()).andStubReturn("SalesOderHeaders");
-      EasyMock.expect(objEdmEntityType.getKind()).andStubReturn(EdmTypeKind.ENTITY);
-      EasyMock.expect(objEdmEntityType.hasStream()).andStubReturn(false);
-      EasyMock.expect(objEdmEntityType.hasStream()).andStubReturn(false);
-      ArrayList<String> propertyNames = new ArrayList<String>();
-      propertyNames.add("ID");
-      EasyMock.expect(objEdmEntityType.getProperty("ID")).andStubReturn(getEdmPropertyForSelect());
-      EasyMock.expect(objEdmEntityType.getPropertyNames()).andStubReturn(propertyNames);
-      EasyMock.expect(objEdmEntityType.getNavigationPropertyNames()).andStubReturn(new ArrayList<String>());
-      EasyMock.expect(objEdmEntityType.getKeyPropertyNames()).andStubReturn(propertyNames);
-      EasyMock.expect(objEdmEntityType.getKeyProperties()).andStubReturn(getKeyProperties());
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-    EasyMock.replay(objEdmEntityType);
-    return objEdmEntityType;
-  }
-
-  private List<EdmProperty> getKeyProperties() {
-    List<EdmProperty> edmProperties = new ArrayList<EdmProperty>();
-    EdmType edmType = EasyMock.createMock(EdmType.class);
-    EasyMock.expect(edmType.getKind()).andStubReturn(EdmTypeKind.SIMPLE);
-    EasyMock.replay(edmType);
-    EdmProperty edmProperty = EasyMock.createMock(EdmProperty.class);
-    EdmMapping edmMapping = EasyMock.createMock(EdmMapping.class);
-    EasyMock.expect(edmMapping.getInternalName()).andStubReturn("soId");
-    EasyMock.replay(edmMapping);
-    try {
-      EasyMock.expect(edmProperty.getName()).andStubReturn("ID");
-      EasyMock.expect(edmProperty.getType()).andStubReturn(edmType);
-      EasyMock.expect(edmProperty.getMapping()).andStubReturn(edmMapping);
-      EasyMock.replay(edmProperty);
-    } catch (EdmException e) {
-      fail("There is an exception is mocking some object " + e.getMessage());
-    }
-
-    edmProperties.add(edmProperty);
-    return edmProperties;
-  }
-
-  private InlineCount getLocalInlineCount() {
-    return InlineCount.NONE;
-  }
-
-  class SalesOrderHeader {
-    private int soId;
-    private int Field1;
-
-    public SalesOrderHeader(final int soId, final int field) {
-      this.soId = soId;
-      Field1 = field;
-    }
-
-    public int getField1() {
-      return Field1;
-    }
-
-    public void setField1(final int field1) {
-      Field1 = field1;
-    }
-
-    public int getSoId() {
-      return soId;
-    }
-
-    public void setSoId(final int soId) {
-      this.soId = soId;
-    }
-
-  }
-
-  private List<Object> getJPAEntities() {
-    List<Object> listJPAEntities = new ArrayList<Object>();
-    SalesOrderHeader entity;
-    entity = new SalesOrderHeader(2, 10);
-    listJPAEntities.add(entity);
-    return listJPAEntities;
-  }
-
-  private Object getEntity() {
-    SalesOrderHeader sHeader = new SalesOrderHeader(10, 34);
-    return sHeader;
-  }
-
-  private GetEntityUriInfo mockEntityUriInfoForExpand() {
-
-    List<SelectItem> selectItemList = new ArrayList<SelectItem>();
-    List<ArrayList<NavigationPropertySegment>> expandList = new ArrayList<ArrayList<NavigationPropertySegment>>();
-    ArrayList<NavigationPropertySegment> navigationPropertyList = new ArrayList<NavigationPropertySegment>();
-    // Mocking the navigation property
-    EdmNavigationProperty navigationProperty = EasyMock.createMock(EdmNavigationProperty.class);
-    try {
-      EasyMock.expect(navigationProperty.getName()).andStubReturn("SalesOrderItemDetails");
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-    EasyMock.replay(navigationProperty);
-    // Mocking the navigation property segments and adding to expand list
-    NavigationPropertySegment navigationPropertySegment = EasyMock.createMock(NavigationPropertySegment.class);
-    EasyMock.expect(navigationPropertySegment.getNavigationProperty()).andStubReturn(navigationProperty);
-    EasyMock.expect(navigationPropertySegment.getTargetEntitySet()).andStubReturn(getTargetEntitySetForExpand());
-    EasyMock.replay(navigationPropertySegment);
-    navigationPropertyList.add(navigationPropertySegment);
-    expandList.add(navigationPropertyList);
-    // Mocking EntityUriInfo
-    GetEntityUriInfo entityUriInfo = EasyMock.createMock(GetEntityUriInfo.class);
-    EasyMock.expect(entityUriInfo.getSelect()).andStubReturn(selectItemList);
-    EasyMock.expect(entityUriInfo.getExpand()).andStubReturn(expandList);
-    EasyMock.replay(entityUriInfo);
-    return entityUriInfo;
-  }
-
-  private GetEntitySetUriInfo mockEntitySetUriInfoForExpand() {
-
-    List<SelectItem> selectItemList = new ArrayList<SelectItem>();
-    List<ArrayList<NavigationPropertySegment>> expandList = new ArrayList<ArrayList<NavigationPropertySegment>>();
-    ArrayList<NavigationPropertySegment> navigationPropertyList = new ArrayList<NavigationPropertySegment>();
-    // Mocking the navigation property
-    EdmNavigationProperty navigationProperty = EasyMock.createMock(EdmNavigationProperty.class);
-    try {
-      EasyMock.expect(navigationProperty.getName()).andStubReturn("SalesOrderItemDetails");
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-    EasyMock.replay(navigationProperty);
-    // Mocking the navigation property segments and adding to expand list
-    NavigationPropertySegment navigationPropertySegment = EasyMock.createMock(NavigationPropertySegment.class);
-    EasyMock.expect(navigationPropertySegment.getNavigationProperty()).andStubReturn(navigationProperty);
-    EasyMock.expect(navigationPropertySegment.getTargetEntitySet()).andStubReturn(getTargetEntitySetForExpand());
-    EasyMock.replay(navigationPropertySegment);
-    navigationPropertyList.add(navigationPropertySegment);
-    expandList.add(navigationPropertyList);
-    // Mocking EntityUriInfo
-    UriInfoImpl entitySetUriInfo = EasyMock.createMock(UriInfoImpl.class);
-    EasyMock.expect(entitySetUriInfo.getSelect()).andStubReturn(selectItemList);
-    EasyMock.expect(entitySetUriInfo.getExpand()).andStubReturn(expandList);
-    EasyMock.expect(entitySetUriInfo.getInlineCount()).andStubReturn(InlineCount.ALLPAGES);
-    EasyMock.expect(entitySetUriInfo.getSkip()).andStubReturn(new Integer(1));
-    EasyMock.expect(entitySetUriInfo.getTop()).andStubReturn(new Integer(2));
-    Map<String, String> customQuery = new HashMap<String, String>();
-    customQuery.put("count", "5");
-    entitySetUriInfo.setCustomQueryOptions(null);
-    EasyMock.expectLastCall().times(1);
-    EasyMock.expect(entitySetUriInfo.getCustomQueryOptions()).andStubReturn(customQuery );
-    EasyMock.replay(entitySetUriInfo);
-    return entitySetUriInfo;
-  }
-
-  private EdmEntitySet getTargetEntitySetForExpand() {
-    EdmEntitySet entitySet = EasyMock.createMock(EdmEntitySet.class);
-    try {
-      EasyMock.expect(entitySet.getName()).andStubReturn("SalesOrderHeaders");
-      EasyMock.expect(entitySet.getEntityType()).andStubReturn(null);
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-    EasyMock.replay(entitySet);
-    return entitySet;
-  }
-
-  private NavigationPropertySegment getNavigationPropertySegment(final String navPropertyName) {
-    EdmNavigationProperty navigationProperty = EasyMock.createMock(EdmNavigationProperty.class);
-    try {
-      EasyMock.expect(navigationProperty.getName()).andStubReturn(navPropertyName);
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-    EasyMock.replay(navigationProperty);
-    NavigationPropertySegment navPropertySegment = EasyMock.createMock(NavigationPropertySegment.class);
-    EasyMock.expect(navPropertySegment.getNavigationProperty()).andStubReturn(navigationProperty);
-    EasyMock.replay(navPropertySegment);
-    return navPropertySegment;
-  }
-  
-  private GetFunctionImportUriInfo mockFunctionImportUriInfo() {
-
-    List<SelectItem> selectItemList = new ArrayList<SelectItem>();
-    List<ArrayList<NavigationPropertySegment>> expandList = new 
-    		ArrayList<ArrayList<NavigationPropertySegment>>();
-    ArrayList<NavigationPropertySegment> navigationPropertyList = new ArrayList<NavigationPropertySegment>();
-    // Mocking the navigation property
-    EdmNavigationProperty navigationProperty = EasyMock.createMock(EdmNavigationProperty.class);
-    try {
-      EasyMock.expect(navigationProperty.getName()).andStubReturn("SalesOrderItemDetails");
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + 
-    		  ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-    EasyMock.replay(navigationProperty);
-    
-    // Mocking the navigation property segments and adding to expand list
-    NavigationPropertySegment navigationPropertySegment = EasyMock.createMock(NavigationPropertySegment.class);
-    EasyMock.expect(navigationPropertySegment.getNavigationProperty()).andStubReturn(navigationProperty);
-    EasyMock.expect(navigationPropertySegment.getTargetEntitySet())
-    .andStubReturn(getTargetEntitySetForExpand());
-    EasyMock.replay(navigationPropertySegment);
-    navigationPropertyList.add(navigationPropertySegment);
-    expandList.add(navigationPropertyList);
-    // Mocking EntityUriInfo
-    UriInfoImpl functionImportUriInfo = EasyMock.createMock(UriInfoImpl.class);
-    EasyMock.expect(functionImportUriInfo.getSelect()).andStubReturn(selectItemList);
-    EasyMock.expect(functionImportUriInfo.getExpand()).andStubReturn(expandList);
-    EasyMock.expect(functionImportUriInfo.getInlineCount()).andStubReturn(InlineCount.ALLPAGES);
-    EasyMock.expect(functionImportUriInfo.getFunctionImport()).andStubReturn(mockEdmFunctionImport());
-    EasyMock.expect(functionImportUriInfo.getCustomQueryOptions()).andStubReturn(null);
-    EasyMock.replay(functionImportUriInfo);
-    return functionImportUriInfo;
-  }
-  
-  private EdmFunctionImport mockEdmFunctionImport() {
-  EdmFunctionImport funcImport = EasyMock.createMock(EdmFunctionImport.class);
-    try {
-		EasyMock.expect(funcImport.getName()).andStubReturn("FindAllSalesOrders");
-		EasyMock.expect(funcImport.getEntitySet()).andStubReturn(getLocalTargetEntitySet());
-		EasyMock.expect(funcImport.getParameterNames()).andStubReturn(
-				Arrays.asList("DeliveryStatusCode"));
-		EdmTyped typed = EasyMock.createMock(EdmTyped.class);
-		EasyMock.expect(typed.getName()).andStubReturn("SalesOrder");
-		EasyMock.expect(typed.getMultiplicity()).andStubReturn(EdmMultiplicity.MANY);
-		EasyMock.expect(typed.getType()).andStubReturn(getLocalEdmEntityType());
-		EasyMock.replay(typed);
-		EasyMock.expect(funcImport.getReturnType()).andStubReturn(typed);
-	} catch (EdmException e) {
-		fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + 
-				e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-	}
-    EasyMock.replay(funcImport);
-    return funcImport;
-  }
-  /*
-   * This Unit is supposed to test the building of Entity Provider Properties for function import
-   */
-  @Test
-  public void testFunctionImportProviderProperties() {
-
-    // Getting the EntityUriInfo
-    GetFunctionImportUriInfo getfuncImportUriInfo = mockFunctionImportUriInfo();
-    ODataJPAContext oDataJPAContext = getODataJPAContext();
-    Class<?> clazz = ODataJPAResponseBuilderDefault.class;
- // Building the edm entity
-    List<Map<String, Object>> edmEntityList = new ArrayList<Map<String, Object>>();
-    Map<String, Object> edmEntity = new HashMap<String, Object>();
-    edmEntity.put("ID", 1);
-    edmEntityList.add(edmEntity);
-    Object[] actualParameters = { oDataJPAContext, getfuncImportUriInfo, edmEntityList };
-    Class<?>[] formalParameters = { ODataJPAContext.class, GetFunctionImportUriInfo.class, List.class };
-    EntityProviderWriteProperties providerProperties = null;
-    try {
-      Method method = clazz.getDeclaredMethod("getEntityProviderProperties", formalParameters);
-      method.setAccessible(true);
-      providerProperties = (EntityProviderWriteProperties) method.invoke(responseBuilder, actualParameters);
-      assertEquals(1, providerProperties.getExpandSelectTree().getLinks().size());
-      assertEquals(InlineCount.ALLPAGES, providerProperties.getInlineCountType());
-    } catch (SecurityException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (NoSuchMethodException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (IllegalArgumentException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (IllegalAccessException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (InvocationTargetException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-
-  }
-
-  @Test
-  public void testBuildListOfGetFunctionimportUriInfo() throws Exception {
-    try {
-      assertNotNull(responseBuilder.build(getFIResultsView(), getJPAEntities(), "application/xml"));
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-
-  }
-  
-  private GetFunctionImportUriInfo getFIResultsView() {
-	GetFunctionImportUriInfo objGetFunctionImportUriInfo = EasyMock.createMock(GetFunctionImportUriInfo.class);
-    EasyMock.expect(objGetFunctionImportUriInfo.getInlineCount()).andStubReturn(getLocalInlineCount());
-    EasyMock.expect(objGetFunctionImportUriInfo.getFunctionImport()).andStubReturn(mockEdmFunctionImport());
-    EasyMock.expect(objGetFunctionImportUriInfo.getSelect()).andStubReturn(getSelectItemList());
-    EasyMock.expect(objGetFunctionImportUriInfo.getExpand()).andStubReturn(getExpandList());
-    EasyMock.replay(objGetFunctionImportUriInfo);
-    return objGetFunctionImportUriInfo;
-  }
+    private ODataJPAResponseBuilder responseBuilder;
+
+    @Before
+    public void init() {
+        responseBuilder = new ODataJPAResponseBuilderDefault(getODataJPAContext());
+    }
+
+    /*
+     * This Unit is supposed to test the building of Entity Provider Properties for query with $expand
+     */
+    @Test
+    public void testGetEntityProviderPropertiesQuery() {
+        GetEntitySetUriInfo getEntitySetUriInfo = mockEntitySetUriInfoForExpand();
+        ODataJPAContext oDataJPAContext = getODataJPAContext();
+        // Building the edm entity
+        List<Map<String, Object>> edmEntityList = new ArrayList<Map<String, Object>>();
+        Map<String, Object> edmEntity = new HashMap<String, Object>();
+        edmEntity.put("ID", 1);
+        edmEntityList.add(edmEntity);
+        // Invoking the private static method using reflection
+        Class<?> clazz = ODataJPAResponseBuilderDefault.class;
+        Object[] actualParameters = {oDataJPAContext, getEntitySetUriInfo, edmEntityList};
+        Class<?>[] formalParameters = {ODataJPAContext.class, GetEntitySetUriInfo.class, List.class};
+        EntityProviderWriteProperties providerProperties = null;
+        try {
+            Method method = clazz.getDeclaredMethod("getEntityProviderProperties", formalParameters);
+            method.setAccessible(true);
+            providerProperties = (EntityProviderWriteProperties) method.invoke(responseBuilder, actualParameters);
+            assertEquals(1, providerProperties.getExpandSelectTree()
+                                              .getLinks()
+                                              .size());
+        } catch (SecurityException | NoSuchMethodException | IllegalArgumentException | IllegalAccessException
+                | InvocationTargetException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+    }
+
+    /*
+     * This Unit is supposed to test the building of Entity Provider Properties for read with $expand
+     */
+    @Test
+    public void testGetEntityProviderPropertiesRead() {
+
+        // Getting the EntityUriInfo
+        GetEntityUriInfo getEntityUriInfo = mockEntityUriInfoForExpand();
+        ODataJPAContext oDataJPAContext = getODataJPAContext();
+        Class<?> clazz = ODataJPAResponseBuilderDefault.class;
+        Object[] actualParameters = {oDataJPAContext, getEntityUriInfo};
+        Class<?>[] formalParameters = {ODataJPAContext.class, GetEntityUriInfo.class};
+        EntityProviderWriteProperties providerProperties = null;
+        try {
+            Method method = clazz.getDeclaredMethod("getEntityProviderProperties", formalParameters);
+            method.setAccessible(true);
+            providerProperties = (EntityProviderWriteProperties) method.invoke(responseBuilder, actualParameters);
+            assertEquals(1, providerProperties.getExpandSelectTree()
+                                              .getLinks()
+                                              .size());
+        } catch (SecurityException | NoSuchMethodException | IllegalArgumentException | IllegalAccessException
+                | InvocationTargetException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void testConstructListofNavProperty() {
+        List<ArrayList<NavigationPropertySegment>> expand = new ArrayList<ArrayList<NavigationPropertySegment>>();
+        ArrayList<NavigationPropertySegment> navPropList1 = new ArrayList<NavigationPropertySegment>();
+        navPropList1.add(getNavigationPropertySegment("DemoNavigationProperties11"));
+        navPropList1.add(getNavigationPropertySegment("DemoNavigationProperties12"));
+        expand.add(navPropList1);
+        ArrayList<NavigationPropertySegment> navPropList2 = new ArrayList<NavigationPropertySegment>();
+        navPropList2.add(getNavigationPropertySegment("DemoNavigationProperties21"));
+        navPropList2.add(getNavigationPropertySegment("DemoNavigationProperties22"));
+        expand.add(navPropList2);
+        Class<?> clazz = ODataJPAResponseBuilderDefault.class;
+        Object[] actualParameters = {expand};
+        Class<?>[] formalParameters = {List.class};
+        List<EdmNavigationProperty> navigationProperties = null;
+        try {
+            Method method = clazz.getDeclaredMethod("constructListofNavProperty", formalParameters);
+            method.setAccessible(true);
+            navigationProperties = (List<EdmNavigationProperty>) method.invoke(responseBuilder, actualParameters);
+            assertEquals("DemoNavigationProperties21", navigationProperties.get(1)
+                                                                           .getName());
+            assertEquals("DemoNavigationProperties11", navigationProperties.get(0)
+                                                                           .getName());
+        } catch (SecurityException | NoSuchMethodException | IllegalArgumentException | IllegalAccessException | InvocationTargetException
+                | EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+
+    }
+
+    @Test
+    public void testBuildListOfTGetEntitySetUriInfoStringODataJPAContext() {
+        try {
+            assertNotNull(responseBuilder.build(getResultsView(), getJPAEntities(), "application/xml"));
+        } catch (ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+
+    }
+
+    @Test
+    public void testBuildNegatives() {// Bad content type
+        try {
+            EntityType entity = new EntityType();
+            entity.setName("SalesOrderHeader");
+            try {
+                assertNotNull(responseBuilder.build(getLocalGetURIInfo(), getEntity(), "xml"));
+            } catch (ODataNotFoundException e) {
+                assertTrue(true);
+            }
+        } catch (ODataJPARuntimeException e) {
+            assertTrue(true);// Nothing to do, Expected.
+        }
+        try {// Bad content type
+            assertNotNull(responseBuilder.build(getResultsView(), getJPAEntities(), "xml"));
+        } catch (ODataJPARuntimeException e) {
+            assertTrue(true);// Nothing to do, Expected.
+        }
+
+    }
+
+    @Test
+    public void testBuildObjectGetEntityUriInfoStringODataJPAContext() throws ODataNotFoundException {
+        try {
+            assertNotNull(responseBuilder.build(getLocalGetURIInfo(), new SalesOrderHeader(2, 10), "application/xml"));
+        } catch (ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+    }
+
+    @Test
+    public void testBuildNullSelects() {// Bad content type
+        try {
+            responseBuilder.build(getResultsViewWithNullSelects(), getJPAEntities(), "xml");
+        } catch (Exception e) {
+            assertTrue(true);
+        }
+    }
+
+    @Test
+    public void testBuildGetCount() {
+        ODataResponse objODataResponse = null;
+        try {
+            objODataResponse = responseBuilder.build(1);
+        } catch (ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        assertNotNull(objODataResponse);
+    }
+
+    private ODataJPAContext getODataJPAContext() {
+        ODataJPAContext objODataJPAContext = EasyMock.createMock(ODataJPAContext.class);
+        EasyMock.expect(objODataJPAContext.getODataContext())
+                .andStubReturn(getLocalODataContext());
+        EasyMock.expect(objODataJPAContext.getPageSize())
+                .andReturn(10);
+        EasyMock.expect(objODataJPAContext.getPaging())
+                .andReturn(mockJPAPaging())
+                .anyTimes();
+        EasyMock.replay(objODataJPAContext);
+        return objODataJPAContext;
+    }
+
+    private ODataContext getLocalODataContext() {
+        ODataContext objODataContext = EasyMock.createMock(ODataContext.class);
+        try {
+            EasyMock.expect(objODataContext.getPathInfo())
+                    .andStubReturn(getLocalPathInfo());
+        } catch (ODataException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        EasyMock.replay(objODataContext);
+        return objODataContext;
+    }
+
+    private JPAPaging mockJPAPaging() {
+        return new JPAPaging() {
+
+            @Override
+            public int getStartPage() {
+                return 0;
+            }
+
+            @Override
+            public List<Object> getPagedEntities() {
+                return null;
+            }
+
+            @Override
+            public int getPageSize() {
+                return 10;
+            }
+
+            @Override
+            public int getNextPage() {
+                return 10;
+            }
+        };
+    }
+
+    private PathInfo getLocalPathInfo() {
+        PathInfo pathInfo = EasyMock.createMock(PathInfo.class);
+        EasyMock.expect(pathInfo.getServiceRoot())
+                .andStubReturn(getLocalURI());
+        EasyMock.expect(pathInfo.getRequestUri())
+                .andStubReturn(getRequestURI());
+        EasyMock.replay(pathInfo);
+        return pathInfo;
+    }
+
+    private URI getRequestURI() {
+        URI uri = null;
+        try {
+            uri = new URI("SalesOrders");
+        } catch (URISyntaxException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        return uri;
+    }
+
+    private URI getLocalURI() {
+        URI uri = null;
+        try {
+            uri = new URI("http://localhost:8080/org.apache.olingo.odata2.processor.ref.web/");
+        } catch (URISyntaxException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        return uri;
+    }
+
+    private GetEntitySetUriInfo getResultsView() {
+        GetEntitySetUriInfo objGetEntitySetUriInfo = EasyMock.createMock(GetEntitySetUriInfo.class);
+        EasyMock.expect(objGetEntitySetUriInfo.getInlineCount())
+                .andStubReturn(getLocalInlineCount());
+        EasyMock.expect(objGetEntitySetUriInfo.getTargetEntitySet())
+                .andStubReturn(getLocalTargetEntitySet());
+        EasyMock.expect(objGetEntitySetUriInfo.getSelect())
+                .andStubReturn(getSelectItemList());
+        EasyMock.expect(objGetEntitySetUriInfo.getExpand())
+                .andStubReturn(getExpandList());
+        EasyMock.expect(objGetEntitySetUriInfo.getSkip())
+                .andStubReturn(new Integer(1));
+        EasyMock.replay(objGetEntitySetUriInfo);
+        return objGetEntitySetUriInfo;
+    }
+
+    private List<ArrayList<NavigationPropertySegment>> getExpandList() {
+        return new ArrayList<ArrayList<NavigationPropertySegment>>();
+    }
+
+    private GetEntitySetUriInfo getResultsViewWithNullSelects() {
+        GetEntitySetUriInfo objGetEntitySetUriInfo = EasyMock.createMock(GetEntitySetUriInfo.class);
+        EasyMock.expect(objGetEntitySetUriInfo.getInlineCount())
+                .andStubReturn(getLocalInlineCount());
+        EasyMock.expect(objGetEntitySetUriInfo.getTargetEntitySet())
+                .andStubReturn(getLocalTargetEntitySet());
+        EasyMock.expect(objGetEntitySetUriInfo.getSelect())
+                .andStubReturn(null);
+        EasyMock.expect(objGetEntitySetUriInfo.getExpand())
+                .andStubReturn(null);
+        EasyMock.expect(objGetEntitySetUriInfo.getSkip())
+                .andStubReturn(new Integer(1));
+
+        EasyMock.replay(objGetEntitySetUriInfo);
+        return objGetEntitySetUriInfo;
+    }
+
+    private GetEntityUriInfo getLocalGetURIInfo() {
+        GetEntityUriInfo objGetEntityUriInfo = EasyMock.createMock(GetEntityUriInfo.class);
+        EasyMock.expect(objGetEntityUriInfo.getSelect())
+                .andStubReturn(getSelectItemList());
+        EasyMock.expect(objGetEntityUriInfo.getTargetEntitySet())
+                .andStubReturn(getLocalTargetEntitySet());
+        EasyMock.expect(objGetEntityUriInfo.getExpand())
+                .andStubReturn(getExpandList());
+        EasyMock.replay(objGetEntityUriInfo);
+        return objGetEntityUriInfo;
+    }
+
+    private List<SelectItem> getSelectItemList() {
+        List<SelectItem> selectItems = new ArrayList<SelectItem>();
+        selectItems.add(getSelectItem());
+        return selectItems;
+    }
+
+    private SelectItem getSelectItem() {
+        SelectItem selectItem = EasyMock.createMock(SelectItem.class);
+        EasyMock.expect(selectItem.getProperty())
+                .andStubReturn(getEdmPropertyForSelect());
+        List<NavigationPropertySegment> navigationSegmentList = new ArrayList<NavigationPropertySegment>();
+        EasyMock.expect(selectItem.getNavigationPropertySegments())
+                .andStubReturn(navigationSegmentList);
+        EasyMock.expect(selectItem.isStar())
+                .andReturn(false)
+                .anyTimes();
+        EasyMock.replay(selectItem);
+        return selectItem;
+    }
+
+    private EdmProperty getEdmPropertyForSelect() {
+        EdmSimpleType edmType = EasyMock.createMock(EdmSimpleType.class);
+        EasyMock.expect(edmType.getKind())
+                .andStubReturn(EdmTypeKind.SIMPLE);
+        Facets facets = new Facets().setNullable(false);
+        try {
+            EasyMock.expect(edmType.valueToString(new Integer(2), EdmLiteralKind.URI, facets))
+                    .andStubReturn("2");
+            EasyMock.expect(edmType.valueToString(new Integer(2), EdmLiteralKind.DEFAULT, facets))
+                    .andStubReturn("2");
+        } catch (EdmSimpleTypeException e1) {
+            fail("There is an exception in mocking EdmType object " + e1.getMessage());
+        }
+        EasyMock.replay(edmType);
+        EdmProperty edmProperty = EasyMock.createMock(EdmProperty.class);
+        JPAEdmMappingImpl edmMapping = EasyMock.createMock(JPAEdmMappingImpl.class);
+        EasyMock.expect(edmMapping.getInternalName())
+                .andStubReturn("soId");
+        EasyMock.expect(edmMapping.getMediaResourceMimeTypeKey())
+                .andReturn(null);
+        EasyMock.expect(edmMapping.isVirtualAccess())
+                .andStubReturn(false);
+        EasyMock.replay(edmMapping);
+        try {
+            EasyMock.expect(edmProperty.getName())
+                    .andStubReturn("ID");
+            EasyMock.expect(edmProperty.getType())
+                    .andStubReturn(edmType);
+            EasyMock.expect(edmProperty.getMapping())
+                    .andStubReturn(edmMapping);
+            EasyMock.expect(edmProperty.getFacets())
+                    .andStubReturn(facets);
+            EasyMock.expect(edmProperty.getCustomizableFeedMappings())
+                    .andStubReturn(null);
+            EasyMock.expect(edmProperty.getMimeType())
+                    .andStubReturn(null);
+            EasyMock.replay(edmProperty);
+
+        } catch (EdmException e) {
+            fail("There is an exception in mocking some object " + e.getMessage());
+        }
+
+        return edmProperty;
+
+    }
+
+    private EdmEntitySet getLocalTargetEntitySet() {
+        EdmEntitySet objEdmEntitySet = EasyMock.createMock(EdmEntitySet.class);
+        try {
+            EasyMock.expect(objEdmEntitySet.getEntityType())
+                    .andStubReturn(getLocalEdmEntityType());
+            EasyMock.expect(objEdmEntitySet.getName())
+                    .andStubReturn("SalesOderHeaders");
+            EasyMock.expect(objEdmEntitySet.getEntityContainer())
+                    .andStubReturn(getLocalEdmEntityContainer());
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+
+        EasyMock.replay(objEdmEntitySet);
+        return objEdmEntitySet;
+    }
+
+    private EdmEntityContainer getLocalEdmEntityContainer() {
+        EdmEntityContainer edmEntityContainer = EasyMock.createMock(EdmEntityContainer.class);
+        EasyMock.expect(edmEntityContainer.isDefaultEntityContainer())
+                .andStubReturn(true);
+        try {
+            EasyMock.expect(edmEntityContainer.getName())
+                    .andStubReturn("salesorderprocessingContainer");
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+
+        EasyMock.replay(edmEntityContainer);
+        return edmEntityContainer;
+    }
+
+    private EdmEntityType getLocalEdmEntityType() {
+        EdmEntityType objEdmEntityType = EasyMock.createMock(EdmEntityType.class);
+        try {
+            EasyMock.expect(objEdmEntityType.getName())
+                    .andStubReturn("SalesOderHeaders");
+            EasyMock.expect(objEdmEntityType.getNamespace())
+                    .andStubReturn("SalesOderHeaders");
+            EasyMock.expect(objEdmEntityType.getKind())
+                    .andStubReturn(EdmTypeKind.ENTITY);
+            EasyMock.expect(objEdmEntityType.hasStream())
+                    .andStubReturn(false);
+            EasyMock.expect(objEdmEntityType.hasStream())
+                    .andStubReturn(false);
+            ArrayList<String> propertyNames = new ArrayList<String>();
+            propertyNames.add("ID");
+            EasyMock.expect(objEdmEntityType.getProperty("ID"))
+                    .andStubReturn(getEdmPropertyForSelect());
+            EasyMock.expect(objEdmEntityType.getPropertyNames())
+                    .andStubReturn(propertyNames);
+            EasyMock.expect(objEdmEntityType.getNavigationPropertyNames())
+                    .andStubReturn(new ArrayList<String>());
+            EasyMock.expect(objEdmEntityType.getKeyPropertyNames())
+                    .andStubReturn(propertyNames);
+            EasyMock.expect(objEdmEntityType.getKeyProperties())
+                    .andStubReturn(getKeyProperties());
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        EasyMock.replay(objEdmEntityType);
+        return objEdmEntityType;
+    }
+
+    private List<EdmProperty> getKeyProperties() {
+        List<EdmProperty> edmProperties = new ArrayList<EdmProperty>();
+        EdmType edmType = EasyMock.createMock(EdmType.class);
+        EasyMock.expect(edmType.getKind())
+                .andStubReturn(EdmTypeKind.SIMPLE);
+        EasyMock.replay(edmType);
+        EdmProperty edmProperty = EasyMock.createMock(EdmProperty.class);
+        EdmMapping edmMapping = EasyMock.createMock(EdmMapping.class);
+        EasyMock.expect(edmMapping.getInternalName())
+                .andStubReturn("soId");
+        EasyMock.replay(edmMapping);
+        try {
+            EasyMock.expect(edmProperty.getName())
+                    .andStubReturn("ID");
+            EasyMock.expect(edmProperty.getType())
+                    .andStubReturn(edmType);
+            EasyMock.expect(edmProperty.getMapping())
+                    .andStubReturn(edmMapping);
+            EasyMock.replay(edmProperty);
+        } catch (EdmException e) {
+            fail("There is an exception is mocking some object " + e.getMessage());
+        }
+
+        edmProperties.add(edmProperty);
+        return edmProperties;
+    }
+
+    private InlineCount getLocalInlineCount() {
+        return InlineCount.NONE;
+    }
+
+    class SalesOrderHeader {
+        private int soId;
+        private int Field1;
+
+        public SalesOrderHeader(final int soId, final int field) {
+            this.soId = soId;
+            Field1 = field;
+        }
+
+        public int getField1() {
+            return Field1;
+        }
+
+        public void setField1(final int field1) {
+            Field1 = field1;
+        }
+
+        public int getSoId() {
+            return soId;
+        }
+
+        public void setSoId(final int soId) {
+            this.soId = soId;
+        }
+
+    }
+
+    private List<Object> getJPAEntities() {
+        List<Object> listJPAEntities = new ArrayList<Object>();
+        SalesOrderHeader entity;
+        entity = new SalesOrderHeader(2, 10);
+        listJPAEntities.add(entity);
+        return listJPAEntities;
+    }
+
+    private Object getEntity() {
+        return new SalesOrderHeader(10, 34);
+    }
+
+    private GetEntityUriInfo mockEntityUriInfoForExpand() {
+
+        List<SelectItem> selectItemList = new ArrayList<SelectItem>();
+        List<ArrayList<NavigationPropertySegment>> expandList = new ArrayList<ArrayList<NavigationPropertySegment>>();
+        ArrayList<NavigationPropertySegment> navigationPropertyList = new ArrayList<NavigationPropertySegment>();
+        // Mocking the navigation property
+        EdmNavigationProperty navigationProperty = EasyMock.createMock(EdmNavigationProperty.class);
+        try {
+            EasyMock.expect(navigationProperty.getName())
+                    .andStubReturn("SalesOrderItemDetails");
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        EasyMock.replay(navigationProperty);
+        // Mocking the navigation property segments and adding to expand list
+        NavigationPropertySegment navigationPropertySegment = EasyMock.createMock(NavigationPropertySegment.class);
+        EasyMock.expect(navigationPropertySegment.getNavigationProperty())
+                .andStubReturn(navigationProperty);
+        EasyMock.expect(navigationPropertySegment.getTargetEntitySet())
+                .andStubReturn(getTargetEntitySetForExpand());
+        EasyMock.replay(navigationPropertySegment);
+        navigationPropertyList.add(navigationPropertySegment);
+        expandList.add(navigationPropertyList);
+        // Mocking EntityUriInfo
+        GetEntityUriInfo entityUriInfo = EasyMock.createMock(GetEntityUriInfo.class);
+        EasyMock.expect(entityUriInfo.getSelect())
+                .andStubReturn(selectItemList);
+        EasyMock.expect(entityUriInfo.getExpand())
+                .andStubReturn(expandList);
+        EasyMock.replay(entityUriInfo);
+        return entityUriInfo;
+    }
+
+    private GetEntitySetUriInfo mockEntitySetUriInfoForExpand() {
+
+        List<SelectItem> selectItemList = new ArrayList<SelectItem>();
+        List<ArrayList<NavigationPropertySegment>> expandList = new ArrayList<ArrayList<NavigationPropertySegment>>();
+        ArrayList<NavigationPropertySegment> navigationPropertyList = new ArrayList<NavigationPropertySegment>();
+        // Mocking the navigation property
+        EdmNavigationProperty navigationProperty = EasyMock.createMock(EdmNavigationProperty.class);
+        try {
+            EasyMock.expect(navigationProperty.getName())
+                    .andStubReturn("SalesOrderItemDetails");
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        EasyMock.replay(navigationProperty);
+        // Mocking the navigation property segments and adding to expand list
+        NavigationPropertySegment navigationPropertySegment = EasyMock.createMock(NavigationPropertySegment.class);
+        EasyMock.expect(navigationPropertySegment.getNavigationProperty())
+                .andStubReturn(navigationProperty);
+        EasyMock.expect(navigationPropertySegment.getTargetEntitySet())
+                .andStubReturn(getTargetEntitySetForExpand());
+        EasyMock.replay(navigationPropertySegment);
+        navigationPropertyList.add(navigationPropertySegment);
+        expandList.add(navigationPropertyList);
+        // Mocking EntityUriInfo
+        UriInfoImpl entitySetUriInfo = EasyMock.createMock(UriInfoImpl.class);
+        EasyMock.expect(entitySetUriInfo.getSelect())
+                .andStubReturn(selectItemList);
+        EasyMock.expect(entitySetUriInfo.getExpand())
+                .andStubReturn(expandList);
+        EasyMock.expect(entitySetUriInfo.getInlineCount())
+                .andStubReturn(InlineCount.ALLPAGES);
+        EasyMock.expect(entitySetUriInfo.getSkip())
+                .andStubReturn(new Integer(1));
+        EasyMock.expect(entitySetUriInfo.getTop())
+                .andStubReturn(new Integer(2));
+        Map<String, String> customQuery = new HashMap<String, String>();
+        customQuery.put("count", "5");
+        entitySetUriInfo.setCustomQueryOptions(null);
+        EasyMock.expectLastCall()
+                .times(1);
+        EasyMock.expect(entitySetUriInfo.getCustomQueryOptions())
+                .andStubReturn(customQuery);
+        EasyMock.replay(entitySetUriInfo);
+        return entitySetUriInfo;
+    }
+
+    private EdmEntitySet getTargetEntitySetForExpand() {
+        EdmEntitySet entitySet = EasyMock.createMock(EdmEntitySet.class);
+        try {
+            EasyMock.expect(entitySet.getName())
+                    .andStubReturn("SalesOrderHeaders");
+            EasyMock.expect(entitySet.getEntityType())
+                    .andStubReturn(null);
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        EasyMock.replay(entitySet);
+        return entitySet;
+    }
+
+    private NavigationPropertySegment getNavigationPropertySegment(final String navPropertyName) {
+        EdmNavigationProperty navigationProperty = EasyMock.createMock(EdmNavigationProperty.class);
+        try {
+            EasyMock.expect(navigationProperty.getName())
+                    .andStubReturn(navPropertyName);
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        EasyMock.replay(navigationProperty);
+        NavigationPropertySegment navPropertySegment = EasyMock.createMock(NavigationPropertySegment.class);
+        EasyMock.expect(navPropertySegment.getNavigationProperty())
+                .andStubReturn(navigationProperty);
+        EasyMock.replay(navPropertySegment);
+        return navPropertySegment;
+    }
+
+    private GetFunctionImportUriInfo mockFunctionImportUriInfo() {
+
+        List<SelectItem> selectItemList = new ArrayList<SelectItem>();
+        List<ArrayList<NavigationPropertySegment>> expandList = new ArrayList<ArrayList<NavigationPropertySegment>>();
+        ArrayList<NavigationPropertySegment> navigationPropertyList = new ArrayList<NavigationPropertySegment>();
+        // Mocking the navigation property
+        EdmNavigationProperty navigationProperty = EasyMock.createMock(EdmNavigationProperty.class);
+        try {
+            EasyMock.expect(navigationProperty.getName())
+                    .andStubReturn("SalesOrderItemDetails");
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        EasyMock.replay(navigationProperty);
+
+        // Mocking the navigation property segments and adding to expand list
+        NavigationPropertySegment navigationPropertySegment = EasyMock.createMock(NavigationPropertySegment.class);
+        EasyMock.expect(navigationPropertySegment.getNavigationProperty())
+                .andStubReturn(navigationProperty);
+        EasyMock.expect(navigationPropertySegment.getTargetEntitySet())
+                .andStubReturn(getTargetEntitySetForExpand());
+        EasyMock.replay(navigationPropertySegment);
+        navigationPropertyList.add(navigationPropertySegment);
+        expandList.add(navigationPropertyList);
+        // Mocking EntityUriInfo
+        UriInfoImpl functionImportUriInfo = EasyMock.createMock(UriInfoImpl.class);
+        EasyMock.expect(functionImportUriInfo.getSelect())
+                .andStubReturn(selectItemList);
+        EasyMock.expect(functionImportUriInfo.getExpand())
+                .andStubReturn(expandList);
+        EasyMock.expect(functionImportUriInfo.getInlineCount())
+                .andStubReturn(InlineCount.ALLPAGES);
+        EasyMock.expect(functionImportUriInfo.getFunctionImport())
+                .andStubReturn(mockEdmFunctionImport());
+        EasyMock.expect(functionImportUriInfo.getCustomQueryOptions())
+                .andStubReturn(null);
+        EasyMock.replay(functionImportUriInfo);
+        return functionImportUriInfo;
+    }
+
+    private EdmFunctionImport mockEdmFunctionImport() {
+        EdmFunctionImport funcImport = EasyMock.createMock(EdmFunctionImport.class);
+        try {
+            EasyMock.expect(funcImport.getName())
+                    .andStubReturn("FindAllSalesOrders");
+            EasyMock.expect(funcImport.getEntitySet())
+                    .andStubReturn(getLocalTargetEntitySet());
+            EasyMock.expect(funcImport.getParameterNames())
+                    .andStubReturn(Arrays.asList("DeliveryStatusCode"));
+            EdmTyped typed = EasyMock.createMock(EdmTyped.class);
+            EasyMock.expect(typed.getName())
+                    .andStubReturn("SalesOrder");
+            EasyMock.expect(typed.getMultiplicity())
+                    .andStubReturn(EdmMultiplicity.MANY);
+            EasyMock.expect(typed.getType())
+                    .andStubReturn(getLocalEdmEntityType());
+            EasyMock.replay(typed);
+            EasyMock.expect(funcImport.getReturnType())
+                    .andStubReturn(typed);
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        EasyMock.replay(funcImport);
+        return funcImport;
+    }
+
+    /*
+     * This Unit is supposed to test the building of Entity Provider Properties for function import
+     */
+    @Test
+    public void testFunctionImportProviderProperties() {
+
+        // Getting the EntityUriInfo
+        GetFunctionImportUriInfo getfuncImportUriInfo = mockFunctionImportUriInfo();
+        ODataJPAContext oDataJPAContext = getODataJPAContext();
+        Class<?> clazz = ODataJPAResponseBuilderDefault.class;
+        // Building the edm entity
+        List<Map<String, Object>> edmEntityList = new ArrayList<Map<String, Object>>();
+        Map<String, Object> edmEntity = new HashMap<String, Object>();
+        edmEntity.put("ID", 1);
+        edmEntityList.add(edmEntity);
+        Object[] actualParameters = {oDataJPAContext, getfuncImportUriInfo, edmEntityList};
+        Class<?>[] formalParameters = {ODataJPAContext.class, GetFunctionImportUriInfo.class, List.class};
+        EntityProviderWriteProperties providerProperties = null;
+        try {
+            Method method = clazz.getDeclaredMethod("getEntityProviderProperties", formalParameters);
+            method.setAccessible(true);
+            providerProperties = (EntityProviderWriteProperties) method.invoke(responseBuilder, actualParameters);
+            assertEquals(1, providerProperties.getExpandSelectTree()
+                                              .getLinks()
+                                              .size());
+            assertEquals(InlineCount.ALLPAGES, providerProperties.getInlineCountType());
+        } catch (SecurityException | NoSuchMethodException | IllegalArgumentException | IllegalAccessException
+                | InvocationTargetException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+
+    }
+
+    @Test
+    public void testBuildListOfGetFunctionimportUriInfo() throws Exception {
+        try {
+            assertNotNull(responseBuilder.build(getFIResultsView(), getJPAEntities(), "application/xml"));
+        } catch (ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+
+    }
+
+    private GetFunctionImportUriInfo getFIResultsView() {
+        GetFunctionImportUriInfo objGetFunctionImportUriInfo = EasyMock.createMock(GetFunctionImportUriInfo.class);
+        EasyMock.expect(objGetFunctionImportUriInfo.getInlineCount())
+                .andStubReturn(getLocalInlineCount());
+        EasyMock.expect(objGetFunctionImportUriInfo.getFunctionImport())
+                .andStubReturn(mockEdmFunctionImport());
+        EasyMock.expect(objGetFunctionImportUriInfo.getSelect())
+                .andStubReturn(getSelectItemList());
+        EasyMock.expect(objGetFunctionImportUriInfo.getExpand())
+                .andStubReturn(getExpandList());
+        EasyMock.replay(objGetFunctionImportUriInfo);
+        return objGetFunctionImportUriInfo;
+    }
 }
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityParserForStaticMethodTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityParserForStaticMethodTest.java
index 7a277fca..cbbbe785 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityParserForStaticMethodTest.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityParserForStaticMethodTest.java
@@ -1,20 +1,16 @@
 /*******************************************************************************
- * 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
- * 
+ * 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.
+ *
+ * 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.odata2.jpa.processor.core.access.data;
 
@@ -22,351 +18,293 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
-
 import java.io.ByteArrayOutputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.Method;
 import java.sql.Blob;
 import java.sql.Clob;
 import java.sql.SQLException;
-
 import javax.sql.rowset.serial.SerialBlob;
 import javax.sql.rowset.serial.SerialClob;
 import javax.sql.rowset.serial.SerialException;
-
 import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPARuntimeException;
 import org.apache.olingo.odata2.jpa.processor.core.common.ODataJPATestConstants;
 import org.junit.Test;
 
 public class JPAEntityParserForStaticMethodTest {
 
-  @Test
-  public void testToStringDefault() {
-
-    Character[] input = new Character[] { 'A', 'B' };
-    assertEquals("AB", JPAEntityParser.toString(input));
-
-  }
-
-  @Test
-  public void testToStringNull() {
-    Character[] input = null;
-    assertNull(JPAEntityParser.toString(input));
-  }
-
-  @Test
-  public void testToStringPartialNull() {
-    Character[] input = new Character[] { 'A', null };
-    assertEquals("A", JPAEntityParser.toString(input));
-  }
-
-  @Test
-  public void testToCharacterArrayDefault() {
-    String input = new String("AB");
-    Character[] ch = JPAEntityParser.toCharacterArray(input);
-
-    assertEquals(2, ch.length);
-    assertTrue(ch[0].equals('A'));
-    assertTrue(ch[1].equals('B'));
-  }
-
-  @Test
-  public void testToCharacterArrayNull() {
-    String input = null;
-    Character[] ch = JPAEntityParser.toCharacterArray(input);
-
-    assertNull(ch);
-  }
-
-  @Test
-  public void testGetPropertyCharacter() {
-    try {
-      Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getCharacter", (Class<?>[]) null);
-      String output = (String) JPAEntityParser.getPropertyValue(method, this, "");
-      assertEquals("A", output);
-
-    } catch (NoSuchMethodException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (SecurityException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    @Test
+    public void testToStringDefault() {
+
+        Character[] input = {'A', 'B'};
+        assertEquals("AB", JPAEntityParser.toString(input));
+
+    }
+
+    @Test
+    public void testToStringNull() {
+        Character[] input = null;
+        assertNull(JPAEntityParser.toString(input));
+    }
+
+    @Test
+    public void testToStringPartialNull() {
+        Character[] input = {'A', null};
+        assertEquals("A", JPAEntityParser.toString(input));
     }
-  }
-
-  @Test
-  public void testGetPropertyCharacterNull() {
-    try {
-      Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getCharacterNull", (Class<?>[]) null);
-      String output = (String) JPAEntityParser.getPropertyValue(method, this, "");
-      assertNull(output);
-
-    } catch (NoSuchMethodException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (SecurityException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+
+    @Test
+    public void testToCharacterArrayDefault() {
+        String input = new String("AB");
+        Character[] ch = JPAEntityParser.toCharacterArray(input);
+
+        assertEquals(2, ch.length);
+        assertTrue(ch[0].equals('A'));
+        assertTrue(ch[1].equals('B'));
     }
-  }
-
-  @Test
-  public void testGetPropertyCharacterArray() {
-    try {
-      Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getCharacterArray", (Class<?>[]) null);
-      String output = (String) JPAEntityParser.getPropertyValue(method, this, "");
-      assertEquals("AB", output);
-
-    } catch (NoSuchMethodException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (SecurityException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+
+    @Test
+    public void testToCharacterArrayNull() {
+        String input = null;
+        Character[] ch = JPAEntityParser.toCharacterArray(input);
+
+        assertNull(ch);
     }
-  }
-
-  @Test
-  public void testGetPropertyCharacterArrayNull() {
-    try {
-      Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getCharacterArrayNull", (Class<?>[]) null);
-      String output = (String) JPAEntityParser.getPropertyValue(method, this, "");
-      assertNull(output);
-
-    } catch (NoSuchMethodException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (SecurityException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+
+    @Test
+    public void testGetPropertyCharacter() {
+        try {
+            Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getCharacter", (Class<?>[]) null);
+            String output = (String) JPAEntityParser.getPropertyValue(method, this, "");
+            assertEquals("A", output);
+
+        } catch (NoSuchMethodException | SecurityException | ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
     }
-  }
-
-  @Test
-  public void testGetPropertyChar() {
-    try {
-      Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getChar", (Class<?>[]) null);
-      String output = (String) JPAEntityParser.getPropertyValue(method, this, "");
-      assertEquals("A", output);
-
-    } catch (NoSuchMethodException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (SecurityException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+
+    @Test
+    public void testGetPropertyCharacterNull() {
+        try {
+            Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getCharacterNull", (Class<?>[]) null);
+            String output = (String) JPAEntityParser.getPropertyValue(method, this, "");
+            assertNull(output);
+
+        } catch (NoSuchMethodException | SecurityException | ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+    }
+
+    @Test
+    public void testGetPropertyCharacterArray() {
+        try {
+            Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getCharacterArray", (Class<?>[]) null);
+            String output = (String) JPAEntityParser.getPropertyValue(method, this, "");
+            assertEquals("AB", output);
+
+        } catch (NoSuchMethodException | SecurityException | ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+    }
+
+    @Test
+    public void testGetPropertyCharacterArrayNull() {
+        try {
+            Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getCharacterArrayNull", (Class<?>[]) null);
+            String output = (String) JPAEntityParser.getPropertyValue(method, this, "");
+            assertNull(output);
+
+        } catch (NoSuchMethodException | SecurityException | ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+    }
+
+    @Test
+    public void testGetPropertyChar() {
+        try {
+            Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getChar", (Class<?>[]) null);
+            String output = (String) JPAEntityParser.getPropertyValue(method, this, "");
+            assertEquals("A", output);
+
+        } catch (NoSuchMethodException | SecurityException | ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+    }
+
+    @Test
+    public void testGetPropertyCharNull() {
+        try {
+            Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getCharNull", (Class<?>[]) null);
+            String output = (String) JPAEntityParser.getPropertyValue(method, this, "");
+            assertNull(output);
+
+        } catch (NoSuchMethodException | SecurityException | ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
     }
-  }
-
-  @Test
-  public void testGetPropertyCharNull() {
-    try {
-      Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getCharNull", (Class<?>[]) null);
-      String output = (String) JPAEntityParser.getPropertyValue(method, this, "");
-      assertNull(output);
-
-    } catch (NoSuchMethodException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (SecurityException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+
+    @Test
+    public void testGetPropertyCharArray() {
+        try {
+            Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getCharArray", (Class<?>[]) null);
+            String output = (String) JPAEntityParser.getPropertyValue(method, this, "");
+            assertEquals("AB", output);
+
+        } catch (NoSuchMethodException | SecurityException | ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
     }
-  }
-
-  @Test
-  public void testGetPropertyCharArray() {
-    try {
-      Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getCharArray", (Class<?>[]) null);
-      String output = (String) JPAEntityParser.getPropertyValue(method, this, "");
-      assertEquals("AB", output);
-
-    } catch (NoSuchMethodException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (SecurityException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+
+    @Test
+    public void testGetPropertyCharArrayNull() {
+        try {
+            Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getCharArrayNull", (Class<?>[]) null);
+            String output = (String) JPAEntityParser.getPropertyValue(method, this, "");
+            assertNull(output);
+
+        } catch (NoSuchMethodException | SecurityException | ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
     }
-  }
-
-  @Test
-  public void testGetPropertyCharArrayNull() {
-    try {
-      Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getCharArrayNull", (Class<?>[]) null);
-      String output = (String) JPAEntityParser.getPropertyValue(method, this, "");
-      assertNull(output);
-
-    } catch (NoSuchMethodException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (SecurityException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+
+    @Test
+    public void testGetPropertyCharArrayValueNull() {
+        try {
+            Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getCharArrayValueNull", (Class<?>[]) null);
+            String output = (String) JPAEntityParser.getPropertyValue(method, this, "");
+            assertEquals("A\u0000", output);
+
+        } catch (NoSuchMethodException | SecurityException | ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
     }
-  }
-
-  @Test
-  public void testGetPropertyCharArrayValueNull() {
-    try {
-      Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getCharArrayValueNull", (Class<?>[]) null);
-      String output = (String) JPAEntityParser.getPropertyValue(method, this, "");
-      assertEquals("A\u0000", output);
-
-    } catch (NoSuchMethodException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (SecurityException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+
+    @Test
+    public void testGetPropertyObject() {
+
+        try {
+            Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getObject", (Class<?>[]) null);
+            Object output = JPAEntityParser.getPropertyValue(method, this, "");
+            assertTrue(output != null);
+
+        } catch (NoSuchMethodException | SecurityException | ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
     }
-  }
-
-  @Test
-  public void testGetPropertyObject() {
-  
-  try {
-      Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getObject", (Class<?>[]) null);
-      Object output = (Object) JPAEntityParser.getPropertyValue(method, this, "");
-      assertTrue(output != null);
-
-      } catch (NoSuchMethodException e) {
-        fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-      } catch (SecurityException e) {
-        fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-      } catch (ODataJPARuntimeException e) {
-        fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-      }
-  }
-
-@Test
-  public void testGetPropertyObjectWithParameters() {
-
-    try {
-      Method method = JPAEntityParserForStaticMethodTest.class.
-            getMethod("getObjectWithParameters", getParameterTypeForMethod("getObjectWithParameters"));
-      Object output = (Object) JPAEntityParser.getPropertyValue(method, this, "obj1");
-      assertTrue(output != null);
-
-    } catch (NoSuchMethodException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (SecurityException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+
+    @Test
+    public void testGetPropertyObjectWithParameters() {
+
+        try {
+            Method method = JPAEntityParserForStaticMethodTest.class.getMethod("getObjectWithParameters",
+                    getParameterTypeForMethod("getObjectWithParameters"));
+            Object output = JPAEntityParser.getPropertyValue(method, this, "obj1");
+            assertTrue(output != null);
+
+        } catch (NoSuchMethodException | SecurityException | ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
     }
-  }
-
-@Test
-  public void testGetString() {
-    char[] expectedChar = new char[] { 'a', 'b', 'c' };
-    try {
-      Clob clob = new SerialClob(expectedChar);
-      String actualString = JPAEntityParser.getString(clob);
-
-      assertEquals(new String(expectedChar), actualString);
-
-    } catch (SerialException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (SQLException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+
+    @Test
+    public void testGetString() {
+        char[] expectedChar = {'a', 'b', 'c'};
+        try {
+            Clob clob = new SerialClob(expectedChar);
+            String actualString = JPAEntityParser.getString(clob);
+
+            assertEquals(new String(expectedChar), actualString);
+
+        } catch (SQLException | ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
     }
-  }
-
-  @Test
-  public void testGetBytes() {
-    final String fileName = "SalesOrderProcessingMappingModels.xml";
-
-    try {
-      InputStream fis = JPAEntityParserForStaticMethodTest.class.getClassLoader().getResourceAsStream(fileName);
-
-      ByteArrayOutputStream baos = new ByteArrayOutputStream();
-      int content = fis.read();
-      while (content != -1) {
-        baos.write(content);
-        content = fis.read();
-      }
-      Blob blob = new SerialBlob(baos.toByteArray());
-      byte[] actualBytes = (byte[]) JPAEntityParser.getBytes(blob);
-      byte[] expectedBytes = baos.toByteArray();
-
-      assertEquals(expectedBytes.length, actualBytes.length);
-      int size = actualBytes.length;
-      int index = 0;
-      while (index < size) {
-        assertEquals(expectedBytes[index], actualBytes[index]);
-        index++;
-      }
-
-    } catch (FileNotFoundException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (SerialException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (SQLException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (IOException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+
+    @Test
+    public void testGetBytes() {
+        final String fileName = "SalesOrderProcessingMappingModels.xml";
+
+        try {
+            InputStream fis = JPAEntityParserForStaticMethodTest.class.getClassLoader()
+                                                                      .getResourceAsStream(fileName);
+
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            int content = fis.read();
+            while (content != -1) {
+                baos.write(content);
+                content = fis.read();
+            }
+            Blob blob = new SerialBlob(baos.toByteArray());
+            byte[] actualBytes = JPAEntityParser.getBytes(blob);
+            byte[] expectedBytes = baos.toByteArray();
+
+            assertEquals(expectedBytes.length, actualBytes.length);
+            int size = actualBytes.length;
+            int index = 0;
+            while (index < size) {
+                assertEquals(expectedBytes[index], actualBytes[index]);
+                index++;
+            }
+
+        } catch (SQLException | IOException | ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
     }
-  }
 
-  public Character getCharacter() {
-    return new Character('A');
-  }
+    public Character getCharacter() {
+        return new Character('A');
+    }
 
-  public Character getCharacterNull() {
-    return null;
-  }
+    public Character getCharacterNull() {
+        return null;
+    }
 
-  public Character[] getCharacterArray() {
-    return new Character[] { 'A', 'B' };
-  }
+    public Character[] getCharacterArray() {
+        return new Character[] {'A', 'B'};
+    }
 
-  public Character[] getCharacterArrayNull() {
-    return null;
-  }
+    public Character[] getCharacterArrayNull() {
+        return null;
+    }
 
-  public char getChar() {
-    return 'A';
-  }
+    public char getChar() {
+        return 'A';
+    }
 
-  public char getCharNull() {
-    return '\u0000';
-  }
+    public char getCharNull() {
+        return '\u0000';
+    }
 
-  public char[] getCharArray() {
-    return new char[] { 'A', 'B' };
-  }
+    public char[] getCharArray() {
+        return new char[] {'A', 'B'};
+    }
 
-  public char[] getCharArrayNull() {
-    return null;
-  }
+    public char[] getCharArrayNull() {
+        return null;
+    }
 
-  public char[] getCharArrayValueNull() {
-    return new char[] { 'A', '\u0000' };
-  }
+    public char[] getCharArrayValueNull() {
+        return new char[] {'A', '\u0000'};
+    }
 
-  public Object getObject() {
-    return new Object();
-  }
+    public Object getObject() {
+        return new Object();
+    }
 
-  public Object getObjectWithParameters(Object ob1) {
-    return new Object();
-  }
+    public Object getObjectWithParameters(Object ob1) {
+        return new Object();
+    }
 
-  private Class<?>[] getParameterTypeForMethod(String methodName) {
+    private Class<?>[] getParameterTypeForMethod(String methodName) {
 
-    Method[] methods = JPAEntityParserForStaticMethodTest.class.getMethods();
-      for (Method method: methods) {
-        if (method.getName().equals(methodName)) {
-          return method.getParameterTypes();
+        Method[] methods = JPAEntityParserForStaticMethodTest.class.getMethods();
+        for (Method method : methods) {
+            if (method.getName()
+                      .equals(methodName)) {
+                return method.getParameterTypes();
+            }
         }
-     }
-    return null;
-  }
+        return null;
+    }
 }
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityParserTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityParserTest.java
index c0b3cf6e..1813557d 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityParserTest.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityParserTest.java
@@ -1,20 +1,16 @@
 /*******************************************************************************
- * 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
- * 
+ * 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.
+ *
+ * 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.odata2.jpa.processor.core.access.data;
 
@@ -22,14 +18,12 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
-
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import org.apache.olingo.odata2.api.edm.EdmException;
 import org.apache.olingo.odata2.api.edm.EdmMapping;
 import org.apache.olingo.odata2.api.edm.EdmNavigationProperty;
@@ -45,619 +39,661 @@ import org.easymock.EasyMock;
 import org.junit.Test;
 
 public class JPAEntityParserTest {
-  /*
-   * TestCase - JPAResultParser is a singleton class Check if the same
-   * instance is returned when create method is called
-   */
-  @Test
-  public void testCreate() {
-    JPAEntityParser resultParser1 = new JPAEntityParser();
-    JPAEntityParser resultParser2 = new JPAEntityParser();
-
-    if (resultParser1.equals(resultParser2)) {
-      fail();
-    }
-  }
-
-  @Test
-  public void testparse2EdmPropertyValueMap() {
-    JPAEntityParser resultParser = new JPAEntityParser();
-    Object jpaEntity = new demoItem("abc", 10);
-    EdmStructuralType structuralType = EasyMock.createMock(EdmStructuralType.class);
-    EdmProperty edmTyped = EasyMock.createMock(EdmProperty.class);
-    EdmType edmType = EasyMock.createMock(EdmType.class);
-    EdmProperty edmTyped01 = EasyMock.createMock(EdmProperty.class);
-    EdmType edmType01 = EasyMock.createMock(EdmType.class);
-    EdmMapping edmMapping = EasyMock.createMock(JPAEdmMappingImpl.class);
-    EdmMapping edmMapping01 = EasyMock.createMock(JPAEdmMappingImpl.class);
-
-    try {
-      EasyMock.expect(edmType.getKind()).andStubReturn(EdmTypeKind.SIMPLE);
-      EasyMock.expect(edmTyped.getName()).andStubReturn("identifier");
-      EasyMock.replay(edmType);
-      EasyMock.expect(edmMapping.getInternalName()).andStubReturn("id");
-      EasyMock.expect(((JPAEdmMappingImpl) edmMapping).isVirtualAccess()).andStubReturn(false);
-      EasyMock.replay(edmMapping);
-      EasyMock.expect(edmTyped.getType()).andStubReturn(edmType);
-      EasyMock.expect(edmTyped.getMapping()).andStubReturn(edmMapping);
-      EasyMock.replay(edmTyped);
-      EasyMock.expect(structuralType.getProperty("identifier")).andStubReturn(edmTyped);
-
-      EasyMock.expect(edmType01.getKind()).andStubReturn(EdmTypeKind.SIMPLE);
-      EasyMock.expect(edmTyped01.getName()).andStubReturn("Value");
-      EasyMock.replay(edmType01);
-      EasyMock.expect(edmMapping01.getInternalName()).andStubReturn("value");
-      EasyMock.expect(((JPAEdmMappingImpl) edmMapping01).isVirtualAccess()).andStubReturn(false);
-      EasyMock.replay(edmMapping01);
-      EasyMock.expect(edmTyped01.getType()).andStubReturn(edmType01);
-      EasyMock.expect(edmTyped01.getMapping()).andStubReturn(edmMapping01);
-      EasyMock.replay(edmTyped01);
-      EasyMock.expect(structuralType.getProperty("value")).andStubReturn(edmTyped01);
-
-      List<String> propNames = new ArrayList<String>();
-      propNames.add("identifier");
-      propNames.add("value");
-      EasyMock.expect(structuralType.getPropertyNames()).andReturn(propNames);
-      EasyMock.replay(structuralType);
-
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
+    /*
+     * TestCase - JPAResultParser is a singleton class Check if the same instance is returned when
+     * create method is called
+     */
+    @Test
+    public void testCreate() {
+        JPAEntityParser resultParser1 = new JPAEntityParser();
+        JPAEntityParser resultParser2 = new JPAEntityParser();
+
+        if (resultParser1.equals(resultParser2)) {
+            fail();
+        }
+    }
+
+    @Test
+    public void testparse2EdmPropertyValueMap() {
+        JPAEntityParser resultParser = new JPAEntityParser();
+        Object jpaEntity = new demoItem("abc", 10);
+        EdmStructuralType structuralType = EasyMock.createMock(EdmStructuralType.class);
+        EdmProperty edmTyped = EasyMock.createMock(EdmProperty.class);
+        EdmType edmType = EasyMock.createMock(EdmType.class);
+        EdmProperty edmTyped01 = EasyMock.createMock(EdmProperty.class);
+        EdmType edmType01 = EasyMock.createMock(EdmType.class);
+        EdmMapping edmMapping = EasyMock.createMock(JPAEdmMappingImpl.class);
+        EdmMapping edmMapping01 = EasyMock.createMock(JPAEdmMappingImpl.class);
+
+        try {
+            EasyMock.expect(edmType.getKind())
+                    .andStubReturn(EdmTypeKind.SIMPLE);
+            EasyMock.expect(edmTyped.getName())
+                    .andStubReturn("identifier");
+            EasyMock.replay(edmType);
+            EasyMock.expect(edmMapping.getInternalName())
+                    .andStubReturn("id");
+            EasyMock.expect(((JPAEdmMappingImpl) edmMapping).isVirtualAccess())
+                    .andStubReturn(false);
+            EasyMock.replay(edmMapping);
+            EasyMock.expect(edmTyped.getType())
+                    .andStubReturn(edmType);
+            EasyMock.expect(edmTyped.getMapping())
+                    .andStubReturn(edmMapping);
+            EasyMock.replay(edmTyped);
+            EasyMock.expect(structuralType.getProperty("identifier"))
+                    .andStubReturn(edmTyped);
+
+            EasyMock.expect(edmType01.getKind())
+                    .andStubReturn(EdmTypeKind.SIMPLE);
+            EasyMock.expect(edmTyped01.getName())
+                    .andStubReturn("Value");
+            EasyMock.replay(edmType01);
+            EasyMock.expect(edmMapping01.getInternalName())
+                    .andStubReturn("value");
+            EasyMock.expect(((JPAEdmMappingImpl) edmMapping01).isVirtualAccess())
+                    .andStubReturn(false);
+            EasyMock.replay(edmMapping01);
+            EasyMock.expect(edmTyped01.getType())
+                    .andStubReturn(edmType01);
+            EasyMock.expect(edmTyped01.getMapping())
+                    .andStubReturn(edmMapping01);
+            EasyMock.replay(edmTyped01);
+            EasyMock.expect(structuralType.getProperty("value"))
+                    .andStubReturn(edmTyped01);
+
+            List<String> propNames = new ArrayList<String>();
+            propNames.add("identifier");
+            propNames.add("value");
+            EasyMock.expect(structuralType.getPropertyNames())
+                    .andReturn(propNames);
+            EasyMock.replay(structuralType);
+
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+
+        try {
+            Map<String, Object> result = resultParser.parse2EdmPropertyValueMap(jpaEntity, structuralType);
+            assertEquals(2, result.size());
+        } catch (ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+
+    }
+
+    @Test
+    public void testparse2EdmPropertyValueMapEdmExcep() {
+        JPAEntityParser resultParser = new JPAEntityParser();
+        Object jpaEntity = new demoItem("abc", 10);
+        EdmStructuralType structuralType = EasyMock.createMock(EdmStructuralType.class);
+        EdmProperty edmTyped = EasyMock.createMock(EdmProperty.class);
+        EdmType edmType = EasyMock.createMock(EdmType.class);
+        EdmProperty edmTyped01 = EasyMock.createMock(EdmProperty.class);
+        EdmType edmType01 = EasyMock.createMock(EdmType.class);
+        EdmMapping edmMapping = EasyMock.createMock(JPAEdmMappingImpl.class);
+        EdmMapping edmMapping01 = EasyMock.createMock(JPAEdmMappingImpl.class);
+
+        try {
+            EasyMock.expect(edmType.getKind())
+                    .andStubReturn(EdmTypeKind.SIMPLE);
+            EasyMock.expect(edmType.getName())
+                    .andReturn("identifier");
+            EasyMock.replay(edmType);
+            EasyMock.expect(edmMapping.getInternalName())
+                    .andStubReturn("id");
+            EasyMock.expect(((JPAEdmMappingImpl) edmMapping).isVirtualAccess())
+                    .andStubReturn(false);
+            EasyMock.replay(edmMapping);
+            EasyMock.expect(edmTyped.getType())
+                    .andStubThrow(new EdmException(null));
+            EasyMock.expect(edmTyped.getMapping())
+                    .andStubReturn(edmMapping);
+            EasyMock.expect(edmTyped.getName())
+                    .andReturn("identifier")
+                    .anyTimes();
+            EasyMock.replay(edmTyped);
+            EasyMock.expect(structuralType.getProperty("identifier"))
+                    .andStubReturn(edmTyped);
+
+            EasyMock.expect(edmType01.getKind())
+                    .andStubReturn(EdmTypeKind.SIMPLE);
+            EasyMock.expect(edmType01.getName())
+                    .andStubReturn("value");
+            EasyMock.replay(edmType01);
+            EasyMock.expect(edmMapping01.getInternalName())
+                    .andStubReturn("value");
+            EasyMock.expect(((JPAEdmMappingImpl) edmMapping01).isVirtualAccess())
+                    .andStubReturn(false);
+            EasyMock.replay(edmMapping01);
+            EasyMock.expect(edmTyped01.getName())
+                    .andReturn("value")
+                    .anyTimes();
+            EasyMock.expect(edmTyped01.getType())
+                    .andStubReturn(edmType01);
+            EasyMock.expect(edmTyped01.getMapping())
+                    .andStubReturn(edmMapping01);
+            EasyMock.replay(edmTyped01);
+            EasyMock.expect(structuralType.getProperty("value"))
+                    .andStubReturn(edmTyped01);
+
+            List<String> propNames = new ArrayList<String>();
+            propNames.add("identifier");
+            propNames.add("value");
+            EasyMock.expect(structuralType.getPropertyNames())
+                    .andReturn(propNames);
+            EasyMock.replay(structuralType);
+
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); // assertTrue(false);
+        }
+
+        try {
+            resultParser.parse2EdmPropertyValueMap(jpaEntity, structuralType);
+        } catch (ODataJPARuntimeException e) {
+            assertTrue(true);
+        }
+
+    }
+
+    @Test
+    public void testparse2EdmPropertyListMap() {
+        JPAEntityParser resultParser = new JPAEntityParser();
+        Map<String, Object> edmEntity = new HashMap<String, Object>();
+        edmEntity.put("SoId", 1);
+        DemoRelatedEntity relatedEntity = new DemoRelatedEntity("NewOrder");
+        demoItem jpaEntity = new demoItem("laptop", 1);
+        jpaEntity.setRelatedEntity(relatedEntity);
+        List<EdmNavigationProperty> navigationPropertyList = new ArrayList<EdmNavigationProperty>();
+        // Mocking a navigation property and its mapping object
+        EdmNavigationProperty navigationProperty = EasyMock.createMock(EdmNavigationProperty.class);
+        JPAEdmMappingImpl edmMapping = EasyMock.createMock(JPAEdmMappingImpl.class);
+        try {
+            EasyMock.expect(edmMapping.getInternalName())
+                    .andStubReturn("relatedEntity");
+            EasyMock.expect(edmMapping.isVirtualAccess())
+                    .andStubReturn(false);
+            EasyMock.replay(edmMapping);
+            EasyMock.expect(navigationProperty.getName())
+                    .andStubReturn("RelatedEntities");
+            EasyMock.expect(navigationProperty.getMapping())
+                    .andStubReturn(edmMapping);
+            EasyMock.replay(navigationProperty);
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+
+        navigationPropertyList.add(navigationProperty);
+        try {
+            HashMap<String, Object> result = resultParser.parse2EdmNavigationValueMap(jpaEntity, navigationPropertyList);
+            assertEquals(relatedEntity, result.get("RelatedEntities"));
+
+        } catch (ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+    }
+
+    @Test
+    public void testparse2EdmPropertyListMapWithVirtualAccess() {
+        JPAEntityParser resultParser = new JPAEntityParser();
+        Map<String, Object> edmEntity = new HashMap<String, Object>();
+        edmEntity.put("SoId", 1);
+        DemoRelatedEntity relatedEntity = new DemoRelatedEntity("NewOrder");
+        demoItem jpaEntity = new demoItem("laptop", 1);
+        jpaEntity.setRelatedEntity(relatedEntity);
+        List<EdmNavigationProperty> navigationPropertyList = new ArrayList<EdmNavigationProperty>();
+        // Mocking a navigation property and its mapping object
+        EdmNavigationProperty navigationProperty = EasyMock.createMock(EdmNavigationProperty.class);
+        JPAEdmMappingImpl edmMapping = EasyMock.createMock(JPAEdmMappingImpl.class);
+        try {
+            EasyMock.expect(edmMapping.getInternalName())
+                    .andStubReturn("relatedEntity");
+            EasyMock.expect(edmMapping.isVirtualAccess())
+                    .andStubReturn(true);
+            EasyMock.replay(edmMapping);
+            EasyMock.expect(navigationProperty.getName())
+                    .andStubReturn("RelatedEntities");
+            EasyMock.expect(navigationProperty.getMapping())
+                    .andStubReturn(edmMapping);
+            EasyMock.replay(navigationProperty);
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+
+        navigationPropertyList.add(navigationProperty);
+        try {
+            HashMap<String, Object> result = resultParser.parse2EdmNavigationValueMap(jpaEntity, navigationPropertyList);
+            assertEquals(relatedEntity, result.get("RelatedEntities"));
+
+        } catch (ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+    }
+
+    // This unit tests when there is a complex type in the select list
+    @SuppressWarnings("unchecked")
+    @Test
+    public void testparse2EdmPropertyValueMapFromListComplex() {
+        JPAEntityParser resultParser = new JPAEntityParser();
+        demoItem jpaEntity = new demoItem("laptop", 1);
+        DemoRelatedEntity relatedEntity = new DemoRelatedEntity("DemoOrder");
+        jpaEntity.setRelatedEntity(relatedEntity);
+        List<EdmProperty> selectPropertyList = new ArrayList<EdmProperty>();
+        // Mocking EdmProperties
+        EdmProperty edmProperty1 = EasyMock.createMock(EdmProperty.class);
+        EdmProperty edmProperty2 = EasyMock.createMock(EdmProperty.class);
+        EdmProperty edmComplexProperty = EasyMock.createMock(EdmProperty.class);
+        EdmType edmType1 = EasyMock.createMock(EdmType.class);
+        EdmStructuralType edmType2 = EasyMock.createMock(EdmStructuralType.class);
+        EdmType edmComplexType = EasyMock.createMock(EdmType.class);
+        JPAEdmMappingImpl mapping1 = EasyMock.createMock(JPAEdmMappingImpl.class);
+        JPAEdmMappingImpl mapping2 = EasyMock.createMock(JPAEdmMappingImpl.class);
+        JPAEdmMappingImpl complexMapping = EasyMock.createMock(JPAEdmMappingImpl.class);
+        try {
+            EasyMock.expect(edmType1.getKind())
+                    .andStubReturn(EdmTypeKind.SIMPLE);
+            EasyMock.replay(edmType1);
+            EasyMock.expect(mapping1.getInternalName())
+                    .andStubReturn("id");
+            EasyMock.expect(mapping1.isVirtualAccess())
+                    .andStubReturn(false);
+            EasyMock.replay(mapping1);
+            EasyMock.expect(edmProperty1.getName())
+                    .andStubReturn("Id");
+            EasyMock.expect(edmProperty1.getMapping())
+                    .andStubReturn(mapping1);
+            EasyMock.expect(edmProperty1.getType())
+                    .andStubReturn(edmType1);
+            EasyMock.replay(edmProperty1);
+            // Mocking the complex properties
+            EasyMock.expect(edmComplexType.getKind())
+                    .andStubReturn(EdmTypeKind.SIMPLE);
+            EasyMock.replay(edmComplexType);
+            EasyMock.expect(complexMapping.getInternalName())
+                    .andStubReturn("order");
+            EasyMock.expect(complexMapping.isVirtualAccess())
+                    .andStubReturn(false);
+            EasyMock.replay(complexMapping);
+            EasyMock.expect(edmComplexProperty.getName())
+                    .andStubReturn("OrderName");
+            EasyMock.expect(edmComplexProperty.getMapping())
+                    .andStubReturn(complexMapping);
+            EasyMock.expect(edmComplexProperty.getType())
+                    .andStubReturn(edmComplexType);
+            EasyMock.replay(edmComplexProperty);
+            EasyMock.expect(edmType2.getKind())
+                    .andStubReturn(EdmTypeKind.COMPLEX);
+            EasyMock.expect(edmType2.getProperty("OrderName"))
+                    .andStubReturn(edmComplexProperty);
+            List<String> propertyNames = new ArrayList<String>();
+            propertyNames.add("OrderName");
+            EasyMock.expect(edmType2.getPropertyNames())
+                    .andStubReturn(propertyNames);
+            EasyMock.replay(edmType2);
+            EasyMock.expect(mapping2.getInternalName())
+                    .andStubReturn("relatedEntity");
+            EasyMock.expect(mapping2.isVirtualAccess())
+                    .andStubReturn(false);
+            EasyMock.replay(mapping2);
+            EasyMock.expect(edmProperty2.getName())
+                    .andStubReturn("Order");
+            EasyMock.expect(edmProperty2.getMapping())
+                    .andStubReturn(mapping2);
+            EasyMock.expect(edmProperty2.getType())
+                    .andStubReturn(edmType2);
+            EasyMock.replay(edmProperty2);
+
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        selectPropertyList.add(edmProperty1);
+        selectPropertyList.add(edmProperty2);
+        try {
+            Map<String, Object> result = resultParser.parse2EdmPropertyValueMap(jpaEntity, selectPropertyList);
+            assertEquals(1, ((HashMap<String, Object>) result.get("Order")).size());
+        } catch (ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+
+    }
+
+    /*
+     * TestCase - getGetterName is a private method in JPAResultParser. The method is uses reflection to
+     * derive the property access methods from EdmProperty
+     */
+    @Test
+    public void testGetGettersWithOutMapping() {
+        JPAEntityParser resultParser = new JPAEntityParser();
+        try {
+
+            /*
+             * Case 1 - Property having No mapping
+             */
+            Class<?>[] pars = {String.class, EdmMapping.class, String.class};
+            Object[] params = {"Field1", null, "get"};
+            Method getGetterName = resultParser.getClass()
+                                               .getDeclaredMethod("getAccessModifierName", pars);
+            getGetterName.setAccessible(true);
+            String name = (String) getGetterName.invoke(resultParser, params);
+
+            assertEquals("getField1", name);
+
+        } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException
+                | SecurityException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+
+        }
+    }
+
+    @Test
+    public void testGetGettersWithNullPropname() {
+        JPAEntityParser resultParser = new JPAEntityParser();
+        try {
+
+            /*
+             * Case 1 - Property having No mapping and no name
+             */
+            Class<?>[] pars = {String.class, EdmMapping.class, String.class};
+            Object[] params = {null, null, null};
+            Method getGetterName = resultParser.getClass()
+                                               .getDeclaredMethod("getAccessModifierName", pars);
+            getGetterName.setAccessible(true);
+
+            String name = (String) getGetterName.invoke(resultParser, params);
+            assertNull(name);
+
+        } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException
+                | SecurityException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+
+        }
+    }
+
+    /*
+     * TestCase - getGetterName is a private method in JPAResultParser. The method is uses reflection to
+     * derive the property access methods from EdmProperty
+     *
+     * EdmProperty name could have been modified. Then mapping object of EdmProperty should be used for
+     * deriving the name
+     */
+    @Test
+    public void testGetGettersWithMapping() {
+        JPAEntityParser resultParser = new JPAEntityParser();
+        EdmMapping edmMapping = EasyMock.createMock(EdmMapping.class);
+        EasyMock.expect(edmMapping.getInternalName())
+                .andStubReturn("field1");
+        EasyMock.replay(edmMapping);
+        try {
+
+            Class<?>[] pars = {String.class, EdmMapping.class, String.class};
+            Object[] params = {"myField", edmMapping, "get"};
+            Method getGetterName = resultParser.getClass()
+                                               .getDeclaredMethod("getAccessModifierName", pars);
+            getGetterName.setAccessible(true);
+
+            String name = (String) getGetterName.invoke(resultParser, params);
+            assertEquals("getField1", name);
+
+        } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException
+                | SecurityException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+
+        }
+    }
+
+    @Test
+    public void testGetGettersNoSuchMethodException() {
+        JPAEntityParser resultParser = new JPAEntityParser();
+        try {
+
+            Method getGetterName = resultParser.getClass()
+                                               .getDeclaredMethod("getGetterName1", EdmProperty.class);
+            getGetterName.setAccessible(true);
+
+        } catch (NoSuchMethodException e) {
+            assertEquals("org.apache.olingo.odata2.jpa.processor.core.access.data.JPAEntityParser.getGetterName1"
+                    + "(org.apache.olingo.odata2.api.edm.EdmProperty)", e.getMessage());
+        } catch (SecurityException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+
+        }
+    }
+
+    @Test
+    public void testParse2EdmPropertyValueMap() {
+        JPAEntityParser resultParser = new JPAEntityParser();
+        Object jpaEntity = new DemoItem2("abc");
+        try {
+            resultParser.parse2EdmPropertyValueMap(jpaEntity, getEdmPropertyList());
+        } catch (ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+    }
+
+    @Test
+    public void testParse2EdmPropertyValueMapWithVirtualAccess() {
+        JPAEntityParser resultParser = new JPAEntityParser();
+        Object jpaEntity = new DemoItem2("abc");
+        try {
+            resultParser.parse2EdmPropertyValueMap(jpaEntity, getEdmPropertyListWithVirtualAccess());
+        } catch (ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+    }
+
+    @Test
+    public void testGetGetterEdmException() {
+        JPAEntityParser resultParser = new JPAEntityParser();
+        Object jpaEntity = new demoItem("abc", 10);
+        EdmStructuralType structuralType = EasyMock.createMock(EdmStructuralType.class);
+        try {
+            EasyMock.expect(structuralType.getPropertyNames())
+                    .andStubThrow(new EdmException(null));
+            EasyMock.replay(structuralType);
+            Method getGetters = resultParser.getClass()
+                                            .getDeclaredMethod("getGetters", Object.class, EdmStructuralType.class);
+            getGetters.setAccessible(true);
+            try {
+                getGetters.invoke(resultParser, jpaEntity, structuralType);
+            } catch (IllegalAccessException | IllegalArgumentException e) {
+                fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+            } catch (InvocationTargetException e) {
+                assertTrue(true);
+            }
+        } catch (NoSuchMethodException e) {
+            assertEquals("org.apache.olingo.odata2.jpa.processor.core.access.data.JPAEntityParser.getGetters(java.lang.Object,"
+                    + "org.apache.olingo.odata2.api.edm.EdmStructuralType)", e.getMessage());
+        } catch (SecurityException | EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+    }
+
+    @Test
+    public void testForNullJPAEntity() {
+        JPAEntityParser resultParser = new JPAEntityParser();
+        EdmStructuralType structuralType = EasyMock.createMock(EdmStructuralType.class);
+        Object map;
+        try {
+            map = resultParser.parse2EdmPropertyValueMap(null, structuralType);
+            assertNull(map);
+        } catch (ODataJPARuntimeException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+    }
+
+    class demoItem {
+        private String id;
+        private int value;
+        private DemoRelatedEntity relatedEntity;
+
+        public String getId() {
+            return id;
+        }
+
+        public void setId(final String id) {
+            this.id = id;
+        }
+
+        public DemoRelatedEntity getRelatedEntity() {
+            return relatedEntity;
+        }
+
+        public void setRelatedEntity(final DemoRelatedEntity relatedEntity) {
+            this.relatedEntity = relatedEntity;
+        }
+
+        public int getValue() {
+            return value;
+        }
+
+        public void set(String property, Object value)
+                throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
+            this.getClass()
+                .getDeclaredField(property)
+                .set(this, value);
+        }
+
+        public Object get(String property)
+                throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
+            return this.getClass()
+                       .getDeclaredField(property)
+                       .get(this);
+        }
+
+        public void setValue(final int value) {
+            this.value = value;
+        }
+
+        demoItem(final String id, final int value) {
+            this.id = id;
+            this.value = value;
+        }
+
+    }
+
+    class DemoRelatedEntity {
+        String order;
+
+        public String getOrder() {
+            return order;
+        }
+
+        public void setOrder(final String order) {
+            this.order = order;
+        }
+
+        public DemoRelatedEntity(final String order) {
+            this.order = order;
+        }
+
+    }
+
+    private List<EdmProperty> getEdmPropertyList() {
+        List<EdmProperty> properties = new ArrayList<EdmProperty>();
+        properties.add(getEdmProperty());
+        return properties;
+    }
+
+    private List<EdmProperty> getEdmPropertyListWithVirtualAccess() {
+        List<EdmProperty> properties = new ArrayList<EdmProperty>();
+        properties.add(getEdmPropertyWithVirtualAccess());
+        return properties;
+    }
+
+    class DemoItem2 {
+        private String field1;
+
+        public String getField1() {
+            return field1;
+        }
 
-    try {
-      Map<String, Object> result = resultParser.parse2EdmPropertyValueMap(jpaEntity, structuralType);
-      assertEquals(2, result.size());
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
+        public void setField1(final String field) {
+            field1 = field;
+        }
+
+        // Getter for Dynamic Entity
+        public String get(String fieldName) {
+            return field1;
+        }
 
-  }
-
-  @Test
-  public void testparse2EdmPropertyValueMapEdmExcep() {
-    JPAEntityParser resultParser = new JPAEntityParser();
-    Object jpaEntity = new demoItem("abc", 10);
-    EdmStructuralType structuralType = EasyMock
-        .createMock(EdmStructuralType.class);
-    EdmProperty edmTyped = EasyMock.createMock(EdmProperty.class);
-    EdmType edmType = EasyMock.createMock(EdmType.class);
-    EdmProperty edmTyped01 = EasyMock.createMock(EdmProperty.class);
-    EdmType edmType01 = EasyMock.createMock(EdmType.class);
-    EdmMapping edmMapping = EasyMock.createMock(JPAEdmMappingImpl.class);
-    EdmMapping edmMapping01 = EasyMock.createMock(JPAEdmMappingImpl.class);
-
-    try {
-      EasyMock.expect(edmType.getKind())
-          .andStubReturn(EdmTypeKind.SIMPLE);
-      EasyMock.expect(edmType.getName()).andReturn("identifier");
-      EasyMock.replay(edmType);
-      EasyMock.expect(edmMapping.getInternalName()).andStubReturn("id");
-      EasyMock.expect(((JPAEdmMappingImpl)edmMapping).isVirtualAccess()).andStubReturn(false);
-      EasyMock.replay(edmMapping);
-      EasyMock.expect(edmTyped.getType()).andStubThrow(
-          new EdmException(null));
-      EasyMock.expect(edmTyped.getMapping()).andStubReturn(edmMapping);
-      EasyMock.expect(edmTyped.getName()).andReturn("identifier").anyTimes();
-      EasyMock.replay(edmTyped);
-      EasyMock.expect(structuralType.getProperty("identifier"))
-          .andStubReturn(edmTyped);
-
-      EasyMock.expect(edmType01.getKind()).andStubReturn(
-          EdmTypeKind.SIMPLE);
-      EasyMock.expect(edmType01.getName()).andStubReturn("value");
-      EasyMock.replay(edmType01);
-      EasyMock.expect(edmMapping01.getInternalName()).andStubReturn(
-          "value");
-      EasyMock.expect(((JPAEdmMappingImpl)edmMapping01).isVirtualAccess())
-      .andStubReturn(false);
-      EasyMock.replay(edmMapping01);
-      EasyMock.expect(edmTyped01.getName()).andReturn("value").anyTimes();
-      EasyMock.expect(edmTyped01.getType()).andStubReturn(edmType01);
-      EasyMock.expect(edmTyped01.getMapping())
-          .andStubReturn(edmMapping01);
-      EasyMock.replay(edmTyped01);
-      EasyMock.expect(structuralType.getProperty("value")).andStubReturn(
-          edmTyped01);
-
-      List<String> propNames = new ArrayList<String>();
-      propNames.add("identifier");
-      propNames.add("value");
-      EasyMock.expect(structuralType.getPropertyNames()).andReturn(
-          propNames);
-      EasyMock.replay(structuralType);
-
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
-          + ODataJPATestConstants.EXCEPTION_MSG_PART_2); // assertTrue(false);
-    }
+        // Setter for Dynamic Entity
+        public void set(final String fieldName, Object fieldValue) {
+            field1 = (String) fieldValue;
+        }
 
-    try {
-      resultParser.parse2EdmPropertyValueMap(jpaEntity, structuralType);
-    } catch (ODataJPARuntimeException e) {
-      assertTrue(true);
-    }
+        public DemoItem2(final String field) {
+            field1 = field;
+        }
 
-  }
-  
-  @Test
-  public void testparse2EdmPropertyListMap() {
-    JPAEntityParser resultParser = new JPAEntityParser();
-    Map<String, Object> edmEntity = new HashMap<String, Object>();
-    edmEntity.put("SoId", 1);
-    DemoRelatedEntity relatedEntity = new DemoRelatedEntity("NewOrder");
-    demoItem jpaEntity = new demoItem("laptop", 1);
-    jpaEntity.setRelatedEntity(relatedEntity);
-    List<EdmNavigationProperty> navigationPropertyList = new ArrayList<EdmNavigationProperty>();
-    // Mocking a navigation property and its mapping object
-    EdmNavigationProperty navigationProperty = EasyMock.createMock(EdmNavigationProperty.class);
-    JPAEdmMappingImpl edmMapping = EasyMock.createMock(JPAEdmMappingImpl.class);
-    try {
-      EasyMock.expect(edmMapping.getInternalName()).andStubReturn("relatedEntity");
-      EasyMock.expect(((JPAEdmMappingImpl)edmMapping).isVirtualAccess()).andStubReturn(false);      
-      EasyMock.replay(edmMapping);
-      EasyMock.expect(navigationProperty.getName()).andStubReturn("RelatedEntities");
-      EasyMock.expect(navigationProperty.getMapping()).andStubReturn(edmMapping);
-      EasyMock.replay(navigationProperty);
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-    
-    navigationPropertyList.add(navigationProperty);
-    try {
-      HashMap<String, Object> result = resultParser.parse2EdmNavigationValueMap(jpaEntity, navigationPropertyList);
-      assertEquals(relatedEntity, result.get("RelatedEntities"));
-      
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-  }
-
-  @Test
-  public void testparse2EdmPropertyListMapWithVirtualAccess() {
-    JPAEntityParser resultParser = new JPAEntityParser();
-    Map<String, Object> edmEntity = new HashMap<String, Object>();
-    edmEntity.put("SoId", 1);
-    DemoRelatedEntity relatedEntity = new DemoRelatedEntity("NewOrder");
-    demoItem jpaEntity = new demoItem("laptop", 1);
-    jpaEntity.setRelatedEntity(relatedEntity);
-    List<EdmNavigationProperty> navigationPropertyList = new ArrayList<EdmNavigationProperty>();
-    // Mocking a navigation property and its mapping object
-    EdmNavigationProperty navigationProperty = EasyMock.createMock(EdmNavigationProperty.class);
-    JPAEdmMappingImpl edmMapping = EasyMock.createMock(JPAEdmMappingImpl.class);
-    try {
-      EasyMock.expect(edmMapping.getInternalName()).andStubReturn("relatedEntity");
-      EasyMock.expect(((JPAEdmMappingImpl)edmMapping).isVirtualAccess()).andStubReturn(true);      
-      EasyMock.replay(edmMapping);
-      EasyMock.expect(navigationProperty.getName()).andStubReturn("RelatedEntities");
-      EasyMock.expect(navigationProperty.getMapping()).andStubReturn(edmMapping);
-      EasyMock.replay(navigationProperty);
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
     }
 
-    navigationPropertyList.add(navigationProperty);
-    try {
-      HashMap<String, Object> result = resultParser.parse2EdmNavigationValueMap(jpaEntity, navigationPropertyList);
-      assertEquals(relatedEntity, result.get("RelatedEntities"));
+    private EdmProperty getEdmProperty() {
+        EdmProperty edmTyped = EasyMock.createMock(EdmProperty.class);
 
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-  }
-
-  // This unit tests when there is a complex type in the select list
-  @SuppressWarnings("unchecked")
-  @Test
-  public void testparse2EdmPropertyValueMapFromListComplex() {
-    JPAEntityParser resultParser = new JPAEntityParser();
-    demoItem jpaEntity = new demoItem("laptop", 1);
-    DemoRelatedEntity relatedEntity = new DemoRelatedEntity("DemoOrder");
-    jpaEntity.setRelatedEntity(relatedEntity);
-    List<EdmProperty> selectPropertyList = new ArrayList<EdmProperty>();
-    // Mocking EdmProperties
-    EdmProperty edmProperty1 = EasyMock.createMock(EdmProperty.class);
-    EdmProperty edmProperty2 = EasyMock.createMock(EdmProperty.class);
-    EdmProperty edmComplexProperty = EasyMock.createMock(EdmProperty.class);
-    EdmType edmType1 = EasyMock.createMock(EdmType.class);
-    EdmStructuralType edmType2 = EasyMock.createMock(EdmStructuralType.class);
-    EdmType edmComplexType = EasyMock.createMock(EdmType.class);
-    JPAEdmMappingImpl mapping1 = EasyMock.createMock(JPAEdmMappingImpl.class);
-    JPAEdmMappingImpl mapping2 = EasyMock.createMock(JPAEdmMappingImpl.class);
-    JPAEdmMappingImpl complexMapping = EasyMock.createMock(JPAEdmMappingImpl.class);
-    try {
-      EasyMock.expect(edmType1.getKind()).andStubReturn(EdmTypeKind.SIMPLE);
-      EasyMock.replay(edmType1);
-      EasyMock.expect(mapping1.getInternalName()).andStubReturn("id");
-      EasyMock.expect(((JPAEdmMappingImpl) mapping1).isVirtualAccess()).andStubReturn(false);
-      EasyMock.replay(mapping1);
-      EasyMock.expect(edmProperty1.getName()).andStubReturn("Id");
-      EasyMock.expect(edmProperty1.getMapping()).andStubReturn(mapping1);
-      EasyMock.expect(edmProperty1.getType()).andStubReturn(edmType1);
-      EasyMock.replay(edmProperty1);
-      // Mocking the complex properties
-      EasyMock.expect(edmComplexType.getKind()).andStubReturn(EdmTypeKind.SIMPLE);
-      EasyMock.replay(edmComplexType);
-      EasyMock.expect(complexMapping.getInternalName()).andStubReturn("order");
-      EasyMock.expect(((JPAEdmMappingImpl) complexMapping).isVirtualAccess()).andStubReturn(false);
-      EasyMock.replay(complexMapping);
-      EasyMock.expect(edmComplexProperty.getName()).andStubReturn("OrderName");
-      EasyMock.expect(edmComplexProperty.getMapping()).andStubReturn(complexMapping);
-      EasyMock.expect(edmComplexProperty.getType()).andStubReturn(edmComplexType);
-      EasyMock.replay(edmComplexProperty);
-      EasyMock.expect(edmType2.getKind()).andStubReturn(EdmTypeKind.COMPLEX);
-      EasyMock.expect(edmType2.getProperty("OrderName")).andStubReturn(edmComplexProperty);
-      List<String> propertyNames = new ArrayList<String>();
-      propertyNames.add("OrderName");
-      EasyMock.expect(edmType2.getPropertyNames()).andStubReturn(propertyNames);
-      EasyMock.replay(edmType2);
-      EasyMock.expect(mapping2.getInternalName()).andStubReturn("relatedEntity");
-      EasyMock.expect(((JPAEdmMappingImpl) mapping2).isVirtualAccess()).andStubReturn(false);
-      EasyMock.replay(mapping2);
-      EasyMock.expect(edmProperty2.getName()).andStubReturn("Order");
-      EasyMock.expect(edmProperty2.getMapping()).andStubReturn(mapping2);
-      EasyMock.expect(edmProperty2.getType()).andStubReturn(edmType2);
-      EasyMock.replay(edmProperty2);
-
-    } catch (EdmException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
-          + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-    selectPropertyList.add(edmProperty1);
-    selectPropertyList.add(edmProperty2);
-    try {
-      Map<String, Object> result = resultParser.parse2EdmPropertyValueMap(jpaEntity, selectPropertyList);
-      assertEquals(1, ((HashMap<String, Object>) result.get("Order")).size());
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
-          + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
+        JPAEdmMappingImpl edmMapping = EasyMock.createMock(JPAEdmMappingImpl.class);
+        EasyMock.expect(edmMapping.getInternalName())
+                .andStubReturn("Field1");
+        EasyMock.expect(edmMapping.isVirtualAccess())
+                .andStubReturn(false);
+        EasyMock.replay(edmMapping);
 
-  }
-
-  /*
-   * TestCase - getGetterName is a private method in JPAResultParser. The
-   * method is uses reflection to derive the property access methods from
-   * EdmProperty
-   */
-  @Test
-  public void testGetGettersWithOutMapping() {
-    JPAEntityParser resultParser = new JPAEntityParser();
-    try {
-
-      /*
-       * Case 1 - Property having No mapping
-       */
-      Class<?>[] pars = { String.class, EdmMapping.class, String.class };
-      Object[] params = { "Field1", null, "get" };
-      Method getGetterName = resultParser.getClass().getDeclaredMethod("getAccessModifierName", pars);
-      getGetterName.setAccessible(true);
-      String name = (String) getGetterName.invoke(resultParser, params);
-
-      assertEquals("getField1", name);
-
-    } catch (IllegalAccessException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (IllegalArgumentException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (InvocationTargetException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (NoSuchMethodException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (SecurityException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        EdmType edmType = EasyMock.createMock(EdmType.class);
 
-    }
-  }
-
-  @Test
-  public void testGetGettersWithNullPropname() {
-    JPAEntityParser resultParser = new JPAEntityParser();
-    try {
-
-      /*
-       * Case 1 - Property having No mapping and no name
-       */
-      Class<?>[] pars = { String.class, EdmMapping.class, String.class };
-      Object[] params = { null, null, null };
-      Method getGetterName = resultParser.getClass().getDeclaredMethod("getAccessModifierName", pars);
-      getGetterName.setAccessible(true);
-
-      String name = (String) getGetterName.invoke(resultParser, params);
-      assertNull(name);
-
-    } catch (IllegalAccessException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (IllegalArgumentException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (InvocationTargetException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (NoSuchMethodException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (SecurityException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        try {
+            EasyMock.expect(edmType.getKind())
+                    .andStubReturn(EdmTypeKind.SIMPLE);
+            EasyMock.expect(edmType.getName())
+                    .andStubReturn("identifier");
+            EasyMock.expect(edmTyped.getName())
+                    .andStubReturn("SalesOrderHeader");
+            EasyMock.expect(edmTyped.getMapping())
+                    .andStubReturn(edmMapping);
 
-    }
-  }
-
-  /*
-   * TestCase - getGetterName is a private method in JPAResultParser. The
-   * method is uses reflection to derive the property access methods from
-   * EdmProperty
-   * 
-   * EdmProperty name could have been modified. Then mapping object of
-   * EdmProperty should be used for deriving the name
-   */
-  @Test
-  public void testGetGettersWithMapping() {
-    JPAEntityParser resultParser = new JPAEntityParser();
-    EdmMapping edmMapping = EasyMock.createMock(EdmMapping.class);
-    EasyMock.expect(edmMapping.getInternalName()).andStubReturn("field1");
-    EasyMock.replay(edmMapping);
-    try {
-
-      Class<?>[] pars = { String.class, EdmMapping.class, String.class };
-      Object[] params = { "myField", edmMapping, "get" };
-      Method getGetterName = resultParser.getClass().getDeclaredMethod("getAccessModifierName", pars);
-      getGetterName.setAccessible(true);
-
-      String name = (String) getGetterName.invoke(resultParser, params);
-      assertEquals("getField1", name);
-
-    } catch (IllegalAccessException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (IllegalArgumentException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (InvocationTargetException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (NoSuchMethodException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    } catch (SecurityException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+            EasyMock.expect(edmTyped.getType())
+                    .andStubReturn(edmType);
+            EasyMock.expect(edmTyped.getMapping())
+                    .andStubReturn(edmMapping);
 
+        } catch (EdmException e) {
+            fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        }
+        EasyMock.replay(edmType);
+        EasyMock.replay(edmTyped);
+        return edmTyped;
     }
-  }
 
-  @Test
-  public void testGetGettersNoSuchMethodException() {
-    JPAEntityParser resultParser = new JPAEntityParser();
-    try {
+    private EdmProperty getEdmPropertyWithVirtualAccess() {
+        EdmProperty edmTyped = EasyMock.createMock(EdmProperty.class);
 
-      Method getGetterName = resultParser.getClass().getDeclaredMethod("getGetterName1", EdmProperty.class);
-      getGetterName.setAccessible(true);
+        JPAEdmMappingImpl edmMapping = EasyMock.createMock(JPAEdmMappingImpl.class);
+        EasyMock.expect(edmMapping.getInternalName())
+                .andStubReturn("Field1");
+        EasyMock.expect(edmMapping.isVirtualAccess())
+                .andStubReturn(true);
+        EasyMock.replay(edmMapping);
 
-    } catch (NoSuchMethodException e) {
-      assertEquals(
-          "org.apache.olingo.odata2.jpa.processor.core.access.data.JPAEntityParser.getGetterName1" +
-              "(org.apache.olingo.odata2.api.edm.EdmProperty)",
-          e.getMessage());
-    } catch (SecurityException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+        EdmSimpleType edmType = EasyMock.createMock(EdmSimpleType.class);
 
-    }
-  }
-  
-  @Test
-  public void testParse2EdmPropertyValueMap() {
-    JPAEntityParser resultParser = new JPAEntityParser();
-    Object jpaEntity = new DemoItem2("abc");
-    try {
-      resultParser.parse2EdmPropertyValueMap(jpaEntity, getEdmPropertyList());
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-  }
-
-  @Test
-  public void testParse2EdmPropertyValueMapWithVirtualAccess() {
-    JPAEntityParser resultParser = new JPAEntityParser();
-    Object jpaEntity = new DemoItem2("abc");
-    try {
-      resultParser.parse2EdmPropertyValueMap(jpaEntity, getEdmPropertyListWithVirtualAccess());
-    } catch (ODataJPARuntimeException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-  }
-
... 25581 lines suppressed ...