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 2017/10/02 13:35:14 UTC

olingo-odata2 git commit: [OLINGO-605] Optional xml adapter for properties

Repository: olingo-odata2
Updated Branches:
  refs/heads/master 751e316da -> 7aac7976b


[OLINGO-605] Optional xml adapter for properties


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

Branch: refs/heads/master
Commit: 7aac7976b3d576f3f24c8c0f4d75e0c7b1e96f95
Parents: 751e316
Author: mibo <mi...@apache.org>
Authored: Mon Oct 2 15:25:51 2017 +0200
Committer: mibo <mi...@apache.org>
Committed: Mon Oct 2 15:32:45 2017 +0200

----------------------------------------------------------------------
 .../api/jpql/JPQLSelectContextView.java         |  11 +-
 .../processor/core/access/data/JPAEntity.java   |  16 +
 .../core/access/model/JPATypeConverter.java     | 173 ++++++++++
 .../core/access/model/JPATypeConvertor.java     | 137 --------
 .../core/model/JPAEdmFunctionImport.java        |   6 +-
 .../processor/core/model/JPAEdmProperty.java    |   4 +-
 .../core/access/data/JPAEntityTest.java         |  23 ++
 .../core/access/model/JPATypeConverterTest.java | 332 +++++++++++++++++++
 .../core/access/model/JPATypeConvertorTest.java | 301 -----------------
 .../core/jpql/JPQLJoinStatementBuilderTest.java |   2 +-
 .../processor/core/mock/data/EdmMockUtilV2.java |  13 +
 .../data/EntityWithXmlAdapterOnProperty.java    |  16 +
 .../processor/core/mock/data/JPATypeMock.java   |  16 +-
 .../core/mock/data/ODataEntryMockUtil.java      |   2 +
 .../processor/core/mock/data/XmlAdapter.java    |  16 +
 15 files changed, 622 insertions(+), 446 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/7aac7976/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/jpql/JPQLSelectContextView.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/jpql/JPQLSelectContextView.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/jpql/JPQLSelectContextView.java
index fc41411..2fcc897 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/jpql/JPQLSelectContextView.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/jpql/JPQLSelectContextView.java
@@ -41,7 +41,16 @@ public interface JPQLSelectContextView extends JPQLContextView {
   /**
    * The method returns an JPQL ORDERBY clause. The ORDERBY clause
    * is built from $orderby OData system query option. The hash map contains
-   * @return an order by expression (JPA Property Name,Sort Order)
+   * <ol>
+   * <li>Key - JPA Entity Property name to be ordered</li>
+   * <li>Value - Sort Order in JPQL (desc,asc)</li>
+   * </ol>
+   * in the order based on the expression specified
+   * (accessible with <code>Map.entrySet(..)</code>).
+   * 
+   * https://issues.apache.org/jira/browse/OLINGO-606
+   * 
+   * @return an ordered map of (JPA Property Name,Sort Order)
    */
   public String getOrderByCollection();
 

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/7aac7976/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntity.java
----------------------------------------------------------------------
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 d3fd2da..d278e4c 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
@@ -33,6 +33,9 @@ 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;
@@ -505,6 +508,19 @@ public class JPAEntity {
           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) {

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/7aac7976/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConverter.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..ec3b493
--- /dev/null
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConverter.java
@@ -0,0 +1,173 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ******************************************************************************/
+package org.apache.olingo.odata2.jpa.processor.core.access.model;
+
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.math.BigDecimal;
+import java.sql.Blob;
+import java.sql.Clob;
+import java.sql.Date;
+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 org.apache.olingo.odata2.api.edm.EdmSimpleTypeKind;
+import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPAModelException;
+
+/**
+ * This class holds utility methods for Type conversions between JPA and OData Types.
+ * 
+ * 
+ * 
+ */
+public class JPATypeConverter {
+
+  /**
+   * This utility method converts a given jpa Type to equivalent
+   * EdmSimpleTypeKind for maintaining compatibility between Java and OData
+   * Types.
+   * 
+   * @param jpaType
+   * The JPA Type input.
+   * @return The corresponding EdmSimpleTypeKind.
+   * @throws ODataJPAModelException
+   * @throws org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPARuntimeException
+   * 
+   * @see EdmSimpleTypeKind
+   */
+
+  public static EdmSimpleTypeKind
+      convertToEdmSimpleType(final Class<?> jpaType, final Attribute<?, ?> currentAttribute)
+          throws ODataJPAModelException {
+    if (jpaType.equals(String.class) || jpaType.equals(Character.class) || jpaType.equals(char.class)
+        || jpaType.equals(char[].class) ||
+        jpaType.equals(Character[].class)) {
+      return EdmSimpleTypeKind.String;
+    } else if (jpaType.equals(Long.class) || jpaType.equals(long.class)) {
+      return EdmSimpleTypeKind.Int64;
+    } else if (jpaType.equals(Short.class) || jpaType.equals(short.class)) {
+      return EdmSimpleTypeKind.Int16;
+    } else if (jpaType.equals(Integer.class) || jpaType.equals(int.class)) {
+      return EdmSimpleTypeKind.Int32;
+    } else if (jpaType.equals(Double.class) || jpaType.equals(double.class)) {
+      return EdmSimpleTypeKind.Double;
+    } else if (jpaType.equals(Float.class) || jpaType.equals(float.class)) {
+      return EdmSimpleTypeKind.Single;
+    } else if (jpaType.equals(BigDecimal.class)) {
+      return EdmSimpleTypeKind.Decimal;
+    } else if (jpaType.equals(byte[].class)) {
+      return EdmSimpleTypeKind.Binary;
+    } else if (jpaType.equals(Byte.class) || jpaType.equals(byte.class)) {
+      return EdmSimpleTypeKind.Byte;
+    } else if (jpaType.equals(Boolean.class) || jpaType.equals(boolean.class)) {
+      return EdmSimpleTypeKind.Boolean;
+    } else if (jpaType.equals(java.sql.Time.class)) {
+      return EdmSimpleTypeKind.Time;
+    } else if (jpaType.equals(Date.class) || jpaType.equals(Calendar.class) ||
+        jpaType.equals(Timestamp.class) || jpaType.equals(java.util.Date.class)) {
+      try {
+        if ((currentAttribute != null)
+            && (determineTemporalType(currentAttribute)
+              == TemporalType.TIME)) {
+          return EdmSimpleTypeKind.Time;
+        } else {
+          return EdmSimpleTypeKind.DateTime;
+        }
+      } catch (SecurityException e) {
+        throw ODataJPAModelException.throwException(ODataJPAModelException.GENERAL.addContent(e.getMessage()), e);
+      }
+    } else if (jpaType.equals(UUID.class)) {
+      return EdmSimpleTypeKind.Guid;
+    } else if (jpaType.equals(Byte[].class)) {
+      return EdmSimpleTypeKind.Binary;
+    } else if (jpaType.equals(Blob.class) && isBlob(currentAttribute)) {
+      return EdmSimpleTypeKind.Binary;
+    } else if (jpaType.equals(Clob.class) && isBlob(currentAttribute)) {
+      return EdmSimpleTypeKind.String;
+    } else if (jpaType.isEnum()) {
+      return EdmSimpleTypeKind.String;
+    } else {
+        // https://issues.apache.org/jira/browse/OLINGO-605
+    	// if we cannot find a generic JPA type we try to use the XmlJavaTypeAdapter
+    	// to find a property that we can serialize
+    	if(currentAttribute == null) {
+    		throw ODataJPAModelException.throwException(ODataJPAModelException.TYPE_NOT_SUPPORTED
+			        .addContent(jpaType.toString()), null);
+    	}
+	    String propertyName = currentAttribute.getName();
+	    if(propertyName == null) {
+	    	throw ODataJPAModelException.throwException(ODataJPAModelException.TYPE_NOT_SUPPORTED
+			        .addContent(jpaType.toString()), null);
+	    }
+	    String getterName = "get"+propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);
+	    try {
+        Method method = currentAttribute.getDeclaringType().getJavaType().getMethod(getterName);
+        XmlJavaTypeAdapter xmlAdapterAnnotation = method.getAnnotation(XmlJavaTypeAdapter.class);
+        if(xmlAdapterAnnotation == null) {
+          throw ODataJPAModelException.throwException(ODataJPAModelException.TYPE_NOT_SUPPORTED
+                  .addContent(jpaType.toString()), null);
+			}
+			@SuppressWarnings("unchecked")
+			Class<XmlAdapter<?,?>> xmlAdapterClass = (Class<XmlAdapter<?, ?>>) xmlAdapterAnnotation.value();
+			
+			ParameterizedType genericSuperClass =
+          (ParameterizedType) xmlAdapterClass.getGenericSuperclass();
+			Class<?> converterTargetType = (Class<?>) genericSuperClass.getActualTypeArguments()[0];
+			return convertToEdmSimpleType(converterTargetType, currentAttribute);
+		} catch (NoSuchMethodException e) {
+			throw ODataJPAModelException.throwException(
+			    ODataJPAModelException.GENERAL.addContent(e.getMessage()), e);
+		} catch (SecurityException e) {
+			throw ODataJPAModelException.throwException(
+			    ODataJPAModelException.GENERAL.addContent(e.getMessage()), e);
+		}
+    }
+  }
+
+  private static boolean isBlob(final Attribute<?, ?> currentAttribute) {
+    if (currentAttribute != null) {
+      AnnotatedElement annotatedElement = (AnnotatedElement) currentAttribute.getJavaMember();
+      if (annotatedElement != null && annotatedElement.getAnnotation(Lob.class) != null) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  private static TemporalType determineTemporalType(final Attribute<?, ?> currentAttribute)
+      throws ODataJPAModelException {
+    if (currentAttribute != null) {
+      AnnotatedElement annotatedElement = (AnnotatedElement) currentAttribute.getJavaMember();
+      if (annotatedElement != null && annotatedElement.getAnnotation(Temporal.class) != null) {
+        return annotatedElement.getAnnotation(Temporal.class).value();
+      }
+    }
+    return null;
+
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/7aac7976/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConvertor.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConvertor.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConvertor.java
deleted file mode 100644
index af8508f..0000000
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConvertor.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ******************************************************************************/
-package org.apache.olingo.odata2.jpa.processor.core.access.model;
-
-import java.lang.reflect.AnnotatedElement;
-import java.math.BigDecimal;
-import java.sql.Blob;
-import java.sql.Clob;
-import java.sql.Date;
-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 org.apache.olingo.odata2.api.edm.EdmSimpleTypeKind;
-import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPAModelException;
-
-/**
- * This class holds utility methods for Type conversions between JPA and OData Types.
- * 
- * 
- * 
- */
-public class JPATypeConvertor {
-
-  /**
-   * This utility method converts a given jpa Type to equivalent
-   * EdmSimpleTypeKind for maintaining compatibility between Java and OData
-   * Types.
-   * 
-   * @param jpaType
-   * The JPA Type input.
-   * @return The corresponding EdmSimpleTypeKind.
-   * @throws ODataJPAModelException
-   * @throws org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPARuntimeException
-   * 
-   * @see EdmSimpleTypeKind
-   */
-
-  public static EdmSimpleTypeKind
-      convertToEdmSimpleType(final Class<?> jpaType, final Attribute<?, ?> currentAttribute)
-          throws ODataJPAModelException {
-    if (jpaType.equals(String.class) || jpaType.equals(Character.class) || jpaType.equals(char.class)
-        || jpaType.equals(char[].class) ||
-        jpaType.equals(Character[].class)) {
-      return EdmSimpleTypeKind.String;
-    } else if (jpaType.equals(Long.class) || jpaType.equals(long.class)) {
-      return EdmSimpleTypeKind.Int64;
-    } else if (jpaType.equals(Short.class) || jpaType.equals(short.class)) {
-      return EdmSimpleTypeKind.Int16;
-    } else if (jpaType.equals(Integer.class) || jpaType.equals(int.class)) {
-      return EdmSimpleTypeKind.Int32;
-    } else if (jpaType.equals(Double.class) || jpaType.equals(double.class)) {
-      return EdmSimpleTypeKind.Double;
-    } else if (jpaType.equals(Float.class) || jpaType.equals(float.class)) {
-      return EdmSimpleTypeKind.Single;
-    } else if (jpaType.equals(BigDecimal.class)) {
-      return EdmSimpleTypeKind.Decimal;
-    } else if (jpaType.equals(byte[].class)) {
-      return EdmSimpleTypeKind.Binary;
-    } else if (jpaType.equals(Byte.class) || jpaType.equals(byte.class)) {
-      return EdmSimpleTypeKind.Byte;
-    } else if (jpaType.equals(Boolean.class) || jpaType.equals(boolean.class)) {
-      return EdmSimpleTypeKind.Boolean;
-    } else if (jpaType.equals(java.sql.Time.class)) {
-      return EdmSimpleTypeKind.Time;
-    } else if (jpaType.equals(Date.class) || jpaType.equals(Calendar.class) ||
-        jpaType.equals(Timestamp.class) || jpaType.equals(java.util.Date.class)) {
-      try {
-        if ((currentAttribute != null)
-            && (determineTemporalType(currentAttribute)
-              == TemporalType.TIME)) {
-          return EdmSimpleTypeKind.Time;
-        } else {
-          return EdmSimpleTypeKind.DateTime;
-        }
-      } catch (SecurityException e) {
-        throw ODataJPAModelException.throwException(ODataJPAModelException.GENERAL.addContent(e.getMessage()), e);
-      }
-    } else if (jpaType.equals(UUID.class)) {
-      return EdmSimpleTypeKind.Guid;
-    } else if (jpaType.equals(Byte[].class)) {
-      return EdmSimpleTypeKind.Binary;
-    } else if (jpaType.equals(Blob.class) && isBlob(currentAttribute)) {
-      return EdmSimpleTypeKind.Binary;
-    } else if (jpaType.equals(Clob.class) && isBlob(currentAttribute)) {
-      return EdmSimpleTypeKind.String;
-    } else if (jpaType.isEnum()) {
-      return EdmSimpleTypeKind.String;
-    }
-
-    throw ODataJPAModelException.throwException(ODataJPAModelException.TYPE_NOT_SUPPORTED
-        .addContent(jpaType.toString()), null);
-  }
-
-  private static boolean isBlob(final Attribute<?, ?> currentAttribute) {
-    if (currentAttribute != null) {
-      AnnotatedElement annotatedElement = (AnnotatedElement) currentAttribute.getJavaMember();
-      if (annotatedElement != null && annotatedElement.getAnnotation(Lob.class) != null) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  private static TemporalType determineTemporalType(final Attribute<?, ?> currentAttribute)
-      throws ODataJPAModelException {
-    if (currentAttribute != null) {
-      AnnotatedElement annotatedElement = (AnnotatedElement) currentAttribute.getJavaMember();
-      if (annotatedElement != null && annotatedElement.getAnnotation(Temporal.class) != null) {
-        return annotatedElement.getAnnotation(Temporal.class).value();
-      }
-    }
-    return null;
-
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/7aac7976/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmFunctionImport.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmFunctionImport.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmFunctionImport.java
index 60baa9d..e041c28 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmFunctionImport.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmFunctionImport.java
@@ -46,7 +46,7 @@ import org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmFunctionImportView
 import org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmMapping;
 import org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmSchemaView;
 import org.apache.olingo.odata2.jpa.processor.core.access.model.JPAEdmNameBuilder;
-import org.apache.olingo.odata2.jpa.processor.core.access.model.JPATypeConvertor;
+import org.apache.olingo.odata2.jpa.processor.core.access.model.JPATypeConverter;
 
 public class JPAEdmFunctionImport extends JPAEdmBaseViewImpl implements JPAEdmFunctionImportView {
 
@@ -193,7 +193,7 @@ public class JPAEdmFunctionImport extends JPAEdmBaseViewImpl implements JPAEdmFu
               functionImportParameter.setName(annotation.name());
             }
 
-            functionImportParameter.setType(JPATypeConvertor.convertToEdmSimpleType(parameterType, null));
+            functionImportParameter.setType(JPATypeConverter.convertToEdmSimpleType(parameterType, null));
 
             Facets facets = new Facets();
             if (annotation.facets().maxLength() > 0) {
@@ -268,7 +268,7 @@ public class JPAEdmFunctionImport extends JPAEdmBaseViewImpl implements JPAEdmFu
           functionReturnType.setTypeName(JPAEdmNameBuilder.build(schemaView, edmEntityType.getName()));
           break;
         case SIMPLE:
-          EdmSimpleTypeKind edmSimpleTypeKind = JPATypeConvertor.convertToEdmSimpleType(methodReturnType, null);
+          EdmSimpleTypeKind edmSimpleTypeKind = JPATypeConverter.convertToEdmSimpleType(methodReturnType, null);
           functionReturnType.setTypeName(edmSimpleTypeKind.getFullQualifiedName());
 
           break;

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/7aac7976/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmProperty.java
----------------------------------------------------------------------
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 360ee5b..f65cb01 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
@@ -57,7 +57,7 @@ import org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmPropertyView;
 import org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmReferentialConstraintView;
 import org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmSchemaView;
 import org.apache.olingo.odata2.jpa.processor.core.access.model.JPAEdmNameBuilder;
-import org.apache.olingo.odata2.jpa.processor.core.access.model.JPATypeConvertor;
+import org.apache.olingo.odata2.jpa.processor.core.access.model.JPATypeConverter;
 
 public class JPAEdmProperty extends JPAEdmBaseViewImpl implements
     JPAEdmPropertyView, JPAEdmComplexPropertyView {
@@ -332,7 +332,7 @@ public class JPAEdmProperty extends JPAEdmBaseViewImpl implements
 
       boolean isForeignKey = joinColumn != null;
       JPAEdmNameBuilder.build(JPAEdmProperty.this, isBuildModeComplexType, skipDefaultNaming, isForeignKey);
-      EdmSimpleTypeKind simpleTypeKind = JPATypeConvertor
+      EdmSimpleTypeKind simpleTypeKind = JPATypeConverter
           .convertToEdmSimpleType(jpaAttribute
               .getJavaType(), jpaAttribute);
       simpleProperty.setType(simpleTypeKind);

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/7aac7976/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityTest.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityTest.java
index a642235..1b05fcb 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityTest.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityTest.java
@@ -37,6 +37,7 @@ import org.apache.olingo.odata2.jpa.processor.core.mock.ODataContextMock;
 import org.apache.olingo.odata2.jpa.processor.core.mock.ODataJPAContextMock;
 import org.apache.olingo.odata2.jpa.processor.core.mock.PathInfoMock;
 import org.apache.olingo.odata2.jpa.processor.core.mock.data.EdmMockUtilV2;
+import org.apache.olingo.odata2.jpa.processor.core.mock.data.EntityWithXmlAdapterOnProperty;
 import org.apache.olingo.odata2.jpa.processor.core.mock.data.JPATypeMock;
 import org.apache.olingo.odata2.jpa.processor.core.mock.data.JPATypeMock.JPARelatedTypeMock;
 import org.apache.olingo.odata2.jpa.processor.core.mock.data.JPATypeMock.JPATypeEmbeddableMock;
@@ -111,6 +112,28 @@ public class JPAEntityTest {
   }
 
   @Test
+  public void testCreateODataEntryWithXmlAdapter() {
+    try {
+      EdmEntitySet edmEntitySet = EdmMockUtilV2.mockEdmEntitySet(JPATypeMock.ENTITY_NAME, false);
+      EdmEntityType edmEntityType = edmEntitySet.getEntityType();
+
+      jpaEntity = new JPAEntity(edmEntityType, edmEntitySet, mockODataJPAContext());
+      jpaEntity.create(ODataEntryMockUtil.mockODataEntry(JPATypeMock.ENTITY_NAME));
+    } catch (ODataJPARuntimeException 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);
+    } catch (ODataException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
+          + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    }
+    JPATypeMock jpaTypeMock = (JPATypeMock) jpaEntity.getJPAEntity();
+    assertEquals(jpaTypeMock.getPropertyWithXmlAdapter().getClass(), EntityWithXmlAdapterOnProperty.class);
+  }
+
+  @Test
   public void testCreateODataEntryWithInline() {
     try {
       EdmEntitySet edmEntitySet = EdmMockUtilV2.mockEdmEntitySet(JPATypeMock.ENTITY_NAME, false);

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/7aac7976/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConverterTest.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConverterTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConverterTest.java
new file mode 100644
index 0000000..52b9212
--- /dev/null
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConverterTest.java
@@ -0,0 +1,332 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ******************************************************************************/
+package org.apache.olingo.odata2.jpa.processor.core.access.model;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Member;
+import java.math.BigDecimal;
+import java.sql.Blob;
+import java.sql.Clob;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.UUID;
+
+import javax.persistence.Lob;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.metamodel.ManagedType;
+
+import org.apache.olingo.odata2.api.edm.EdmSimpleTypeKind;
+import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPAModelException;
+import org.apache.olingo.odata2.jpa.processor.core.common.ODataJPATestConstants;
+import org.apache.olingo.odata2.jpa.processor.core.mock.data.EntityWithXmlAdapterOnProperty;
+import org.apache.olingo.odata2.jpa.processor.core.mock.model.JPAAttributeMock;
+import org.apache.olingo.odata2.jpa.processor.core.mock.model.JPAJavaMemberMock;
+import org.easymock.EasyMock;
+import org.junit.Test;
+
+public class JPATypeConverterTest {
+
+  private static String testCase = "datetime";
+
+  private EdmSimpleTypeKind edmSimpleKindTypeString;
+  private EdmSimpleTypeKind edmSimpleKindTypeCharacter;
+  private EdmSimpleTypeKind edmSimpleKindTypeByteArr;
+  private EdmSimpleTypeKind edmSimpleKindTypeLong;
+  private EdmSimpleTypeKind edmSimpleKindTypeShort;
+  private EdmSimpleTypeKind edmSimpleKindTypeInteger;
+  private EdmSimpleTypeKind edmSimpleKindTypeDouble;
+  private EdmSimpleTypeKind edmSimpleKindTypeFloat;
+  private EdmSimpleTypeKind edmSimpleKindTypeBigDecimal;
+  private EdmSimpleTypeKind edmSimpleKindTypeByte;
+  private EdmSimpleTypeKind edmSimpleKindTypeBoolean;
+  private EdmSimpleTypeKind edmSimpleKindTypeUUID;
+  private EdmSimpleTypeKind edmSimpleKindTypeStringFromEnum;
+
+  enum SomeEnum {TEST}
+
+  @Test
+  public void testConvertToEdmSimpleType() {
+    String str = "entity";
+    byte[] byteArr = new byte[3];
+    Long longObj = new Long(0);
+    Short shortObj = new Short((short) 0);
+    Integer integerObj = new Integer(0);
+    Double doubleObj = new Double(0);
+    Float floatObj = new Float(0);
+    BigDecimal bigDecimalObj = new BigDecimal(0);
+    Byte byteObj = new Byte((byte) 0);
+    Boolean booleanObj = Boolean.TRUE;
+    UUID uUID = new UUID(0, 0);
+    SomeEnum someEnum = SomeEnum.TEST;
+    Character charObj = new Character('c');
+
+    try {
+      edmSimpleKindTypeString = JPATypeConverter.convertToEdmSimpleType(str.getClass(), null);
+      edmSimpleKindTypeByteArr = JPATypeConverter.convertToEdmSimpleType(byteArr.getClass(), null);
+      edmSimpleKindTypeLong = JPATypeConverter.convertToEdmSimpleType(longObj.getClass(), null);
+      edmSimpleKindTypeShort = JPATypeConverter.convertToEdmSimpleType(shortObj.getClass(), null);
+      edmSimpleKindTypeInteger = JPATypeConverter.convertToEdmSimpleType(integerObj.getClass(), null);
+      edmSimpleKindTypeDouble = JPATypeConverter.convertToEdmSimpleType(doubleObj.getClass(), null);
+      edmSimpleKindTypeFloat = JPATypeConverter.convertToEdmSimpleType(floatObj.getClass(), null);
+      edmSimpleKindTypeBigDecimal = JPATypeConverter.convertToEdmSimpleType(bigDecimalObj.getClass(), null);
+      edmSimpleKindTypeByte = JPATypeConverter.convertToEdmSimpleType(byteObj.getClass(), null);
+      edmSimpleKindTypeBoolean = JPATypeConverter.convertToEdmSimpleType(booleanObj.getClass(), null);
+      edmSimpleKindTypeStringFromEnum = JPATypeConverter.convertToEdmSimpleType(someEnum.getClass(), null);
+      edmSimpleKindTypeCharacter = JPATypeConverter.convertToEdmSimpleType(charObj.getClass(), null);
+      edmSimpleKindTypeUUID = JPATypeConverter.convertToEdmSimpleType(uUID.getClass(), null);
+    } catch (ODataJPAModelException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    }
+
+    assertEquals(EdmSimpleTypeKind.String, edmSimpleKindTypeString);
+    assertEquals(EdmSimpleTypeKind.Binary, edmSimpleKindTypeByteArr);
+    assertEquals(EdmSimpleTypeKind.Int64, edmSimpleKindTypeLong);
+    assertEquals(EdmSimpleTypeKind.Int16, edmSimpleKindTypeShort);
+    assertEquals(EdmSimpleTypeKind.Int32, edmSimpleKindTypeInteger);
+    assertEquals(EdmSimpleTypeKind.Double, edmSimpleKindTypeDouble);
+    assertEquals(EdmSimpleTypeKind.Single, edmSimpleKindTypeFloat);
+    assertEquals(EdmSimpleTypeKind.Decimal, edmSimpleKindTypeBigDecimal);
+    assertEquals(EdmSimpleTypeKind.Byte, edmSimpleKindTypeByte);
+    assertEquals(EdmSimpleTypeKind.Boolean, edmSimpleKindTypeBoolean);
+    assertEquals(EdmSimpleTypeKind.String, edmSimpleKindTypeCharacter);
+    assertEquals(EdmSimpleTypeKind.Guid, edmSimpleKindTypeUUID);
+    assertEquals(EdmSimpleTypeKind.String, edmSimpleKindTypeStringFromEnum);
+  }
+
+  @Test
+  public void testConvertTypeCharacter() {
+    try {
+      assertEquals(EdmSimpleTypeKind.String, JPATypeConverter.convertToEdmSimpleType(Character[].class, null));
+      assertEquals(EdmSimpleTypeKind.String, JPATypeConverter.convertToEdmSimpleType(char[].class, null));
+      assertEquals(EdmSimpleTypeKind.String, JPATypeConverter.convertToEdmSimpleType(char.class, null));
+    } catch (ODataJPAModelException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    }
+  }
+
+  @Test
+  public void testConvertTypeNumbers() {
+    try {
+      assertEquals(EdmSimpleTypeKind.Int64, JPATypeConverter.convertToEdmSimpleType(long.class, null));
+      assertEquals(EdmSimpleTypeKind.Int16, JPATypeConverter.convertToEdmSimpleType(short.class, null));
+      assertEquals(EdmSimpleTypeKind.Int32, JPATypeConverter.convertToEdmSimpleType(int.class, null));
+      assertEquals(EdmSimpleTypeKind.Double, JPATypeConverter.convertToEdmSimpleType(double.class, null));
+      assertEquals(EdmSimpleTypeKind.Single, JPATypeConverter.convertToEdmSimpleType(float.class, null));
+      assertEquals(EdmSimpleTypeKind.Byte, JPATypeConverter.convertToEdmSimpleType(byte.class, null));
+      assertEquals(EdmSimpleTypeKind.Boolean, JPATypeConverter.convertToEdmSimpleType(boolean.class, null));
+    } catch (ODataJPAModelException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    }
+  }
+
+  @Test
+  public void testConvertTypeByteArray() {
+    try {
+      assertEquals(EdmSimpleTypeKind.Binary, JPATypeConverter.convertToEdmSimpleType(Byte[].class, null));
+    } catch (ODataJPAModelException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    }
+  }
+
+  @Test
+  public void testConvertTypeBlob() {
+    testCase = "lob";
+    try {
+      assertEquals(EdmSimpleTypeKind.Binary, JPATypeConverter.convertToEdmSimpleType(Blob.class,
+          new JPASimpleAttribute()));
+    } catch (ODataJPAModelException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    }
+  }
+
+  @Test
+  public void testConvertTypeClob() {
+    testCase = "lob";
+    try {
+      assertEquals(EdmSimpleTypeKind.String, JPATypeConverter.convertToEdmSimpleType(Clob.class,
+          new JPASimpleAttribute()));
+    } catch (ODataJPAModelException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    }
+  }
+
+  @Test
+  public void testConvertTypeBLobNegative() {
+    try {
+      JPATypeConverter.convertToEdmSimpleType(Blob.class, null);
+    } catch (ODataJPAModelException e) {
+      assertTrue(true);
+      return;
+    }
+    fail("ExceptionExpected");
+  }
+
+  @Test
+  public void testConvertTypeClobNegative() {
+    try {
+      JPATypeConverter.convertToEdmSimpleType(Clob.class, null);
+    } catch (ODataJPAModelException e) {
+      assertTrue(true);
+      return;
+    }
+    fail("ExceptionExpected");
+  }
+
+  @Test
+  public void testConvertTypeCalendar() {
+    try {
+      assertEquals(EdmSimpleTypeKind.DateTime, JPATypeConverter.convertToEdmSimpleType(Calendar.class, null));
+      assertEquals(EdmSimpleTypeKind.Time, JPATypeConverter.convertToEdmSimpleType(Time.class, null));
+      assertEquals(EdmSimpleTypeKind.DateTime, JPATypeConverter.convertToEdmSimpleType(Date.class, null));
+      assertEquals(EdmSimpleTypeKind.DateTime, JPATypeConverter.convertToEdmSimpleType(Timestamp.class, null));
+      assertEquals(EdmSimpleTypeKind.DateTime, JPATypeConverter.convertToEdmSimpleType(java.sql.Date.class, null));
+    } catch (ODataJPAModelException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+      ;
+    }
+  }
+
+  @Test
+  public void testConvertTypeTemporal() {
+    testCase = "datetime";
+    try {
+      EdmSimpleTypeKind edmDateType = JPATypeConverter.convertToEdmSimpleType(Calendar.class, new JPASimpleAttribute());
+      assertEquals(EdmSimpleTypeKind.DateTime, edmDateType);
+    } catch (ODataJPAModelException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    }
+  }
+
+  @Test
+  public void testConvertTypeTemporalTime() {
+    testCase = "time";
+    try {
+      EdmSimpleTypeKind edmTimeType = JPATypeConverter.convertToEdmSimpleType(Calendar.class, new JPASimpleAttribute());
+      assertEquals(EdmSimpleTypeKind.Time, edmTimeType);
+    } catch (ODataJPAModelException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    }
+  }
+
+  @Test
+  public void testConvertTypeTemporalNull() {
+    testCase = "temporalnull";
+    try {
+      EdmSimpleTypeKind edmDateType = JPATypeConverter.convertToEdmSimpleType(Calendar.class, new JPASimpleAttribute());
+      assertEquals(EdmSimpleTypeKind.DateTime, edmDateType);
+    } catch (ODataJPAModelException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    }
+  }
+
+  @Test
+  public void testConvertTypeTemporalNull2() {
+    testCase = "temporalnull2";
+    try {
+      EdmSimpleTypeKind edmDateType =
+    		  JPATypeConverter.convertToEdmSimpleType(Calendar.class,new JPASimpleAttribute());
+      assertEquals(EdmSimpleTypeKind.DateTime, edmDateType);
+    } catch (ODataJPAModelException e) {
+      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+    }
+  }
+  
+  @Test
+  public void testConvertPropertyWithXmlAdapter() {
+	  try {
+		 EdmSimpleTypeKind edmDateType =
+				 JPATypeConverter
+				 .convertToEdmSimpleType(EntityWithXmlAdapterOnProperty.class,
+						 new JPAAttributeWithXmlAdapterType());
+		 assertEquals(EdmSimpleTypeKind.String, edmDateType);
+	} catch (ODataJPAModelException e) {
+		fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() +
+				ODataJPATestConstants.EXCEPTION_MSG_PART_2);
+	}
+  }
+
+  private static class JPASimpleAttribute extends JPAAttributeMock<Object, String> {
+
+    @Override
+    public Member getJavaMember() {
+      if (testCase.equals("temporalNull2")) {
+        return null;
+      }
+      return new JPAJavaMember();
+    }
+  }
+
+  private static class JPAJavaMember extends JPAJavaMemberMock {
+
+    private Temporal temporal = null;
+    private Lob lob = null;
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public <T extends Annotation> T getAnnotation(final Class<T> annotationClass) {
+
+      if (testCase.equals("temporalnull")) {
+        return null;
+      }
+
+      if (annotationClass.equals(Temporal.class)) {
+        if (temporal == null) {
+          temporal = EasyMock.createMock(Temporal.class);
+          if (testCase.equals("datetime")) {
+            EasyMock.expect(temporal.value()).andReturn(TemporalType.TIMESTAMP).anyTimes();
+            EasyMock.replay(temporal);
+          } else if (testCase.equals("time")) {
+            EasyMock.expect(temporal.value()).andReturn(TemporalType.TIME).anyTimes();
+            EasyMock.replay(temporal);
+          }
+        }
+        return (T) temporal;
+      } else if (annotationClass.equals(Lob.class)) {
+        if (testCase.equals("lob")) {
+          lob = EasyMock.createMock(Lob.class);
+          EasyMock.replay(lob);
+        }
+        return (T) lob;
+      }
+      return null;
+
+    }
+  }
+  
+  private static class JPAAttributeWithXmlAdapterType extends JPAAttributeMock<EntityWithXmlAdapterOnProperty, String> {
+	  @Override
+	  public String getName() {
+		  return "self";
+	  }
+	  
+	  public ManagedType<EntityWithXmlAdapterOnProperty> getDeclaringType() {
+		ManagedType<EntityWithXmlAdapterOnProperty> mock = EasyMock.createMock(ManagedType.class);
+		EasyMock.expect(mock.getJavaType()).andStubReturn(EntityWithXmlAdapterOnProperty.class);
+		EasyMock.replay(mock);
+		return mock;
+	  }
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/7aac7976/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConvertorTest.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConvertorTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConvertorTest.java
deleted file mode 100644
index 91639c4..0000000
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConvertorTest.java
+++ /dev/null
@@ -1,301 +0,0 @@
-/*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ******************************************************************************/
-package org.apache.olingo.odata2.jpa.processor.core.access.model;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Member;
-import java.math.BigDecimal;
-import java.sql.Blob;
-import java.sql.Clob;
-import java.sql.Time;
-import java.sql.Timestamp;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.UUID;
-
-import javax.persistence.Lob;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-
-import org.apache.olingo.odata2.api.edm.EdmSimpleTypeKind;
-import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPAModelException;
-import org.apache.olingo.odata2.jpa.processor.core.common.ODataJPATestConstants;
-import org.apache.olingo.odata2.jpa.processor.core.mock.model.JPAAttributeMock;
-import org.apache.olingo.odata2.jpa.processor.core.mock.model.JPAJavaMemberMock;
-import org.easymock.EasyMock;
-import org.junit.Test;
-
-public class JPATypeConvertorTest {
-
-  private static String testCase = "datetime";
-
-  private EdmSimpleTypeKind edmSimpleKindTypeString;
-  private EdmSimpleTypeKind edmSimpleKindTypeCharacter;
-  private EdmSimpleTypeKind edmSimpleKindTypeByteArr;
-  private EdmSimpleTypeKind edmSimpleKindTypeLong;
-  private EdmSimpleTypeKind edmSimpleKindTypeShort;
-  private EdmSimpleTypeKind edmSimpleKindTypeInteger;
-  private EdmSimpleTypeKind edmSimpleKindTypeDouble;
-  private EdmSimpleTypeKind edmSimpleKindTypeFloat;
-  private EdmSimpleTypeKind edmSimpleKindTypeBigDecimal;
-  private EdmSimpleTypeKind edmSimpleKindTypeByte;
-  private EdmSimpleTypeKind edmSimpleKindTypeBoolean;
-  private EdmSimpleTypeKind edmSimpleKindTypeUUID;
-  private EdmSimpleTypeKind edmSimpleKindTypeStringFromEnum;
-
-  enum SomeEnum {TEST}
-
-  @Test
-  public void testConvertToEdmSimpleType() {
-    String str = "entity";
-    byte[] byteArr = new byte[3];
-    Long longObj = new Long(0);
-    Short shortObj = new Short((short) 0);
-    Integer integerObj = new Integer(0);
-    Double doubleObj = new Double(0);
-    Float floatObj = new Float(0);
-    BigDecimal bigDecimalObj = new BigDecimal(0);
-    Byte byteObj = new Byte((byte) 0);
-    Boolean booleanObj = Boolean.TRUE;
-    UUID uUID = new UUID(0, 0);
-    SomeEnum someEnum = SomeEnum.TEST;
-    Character charObj = new Character('c');
-
-    try {
-      edmSimpleKindTypeString = JPATypeConvertor.convertToEdmSimpleType(str.getClass(), null);
-      edmSimpleKindTypeByteArr = JPATypeConvertor.convertToEdmSimpleType(byteArr.getClass(), null);
-      edmSimpleKindTypeLong = JPATypeConvertor.convertToEdmSimpleType(longObj.getClass(), null);
-      edmSimpleKindTypeShort = JPATypeConvertor.convertToEdmSimpleType(shortObj.getClass(), null);
-      edmSimpleKindTypeInteger = JPATypeConvertor.convertToEdmSimpleType(integerObj.getClass(), null);
-      edmSimpleKindTypeDouble = JPATypeConvertor.convertToEdmSimpleType(doubleObj.getClass(), null);
-      edmSimpleKindTypeFloat = JPATypeConvertor.convertToEdmSimpleType(floatObj.getClass(), null);
-      edmSimpleKindTypeBigDecimal = JPATypeConvertor.convertToEdmSimpleType(bigDecimalObj.getClass(), null);
-      edmSimpleKindTypeByte = JPATypeConvertor.convertToEdmSimpleType(byteObj.getClass(), null);
-      edmSimpleKindTypeBoolean = JPATypeConvertor.convertToEdmSimpleType(booleanObj.getClass(), null);
-      edmSimpleKindTypeStringFromEnum = JPATypeConvertor.convertToEdmSimpleType(someEnum.getClass(), null);
-      edmSimpleKindTypeCharacter = JPATypeConvertor.convertToEdmSimpleType(charObj.getClass(), null);
-      edmSimpleKindTypeUUID = JPATypeConvertor.convertToEdmSimpleType(uUID.getClass(), null);
-    } catch (ODataJPAModelException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-
-    assertEquals(EdmSimpleTypeKind.String, edmSimpleKindTypeString);
-    assertEquals(EdmSimpleTypeKind.Binary, edmSimpleKindTypeByteArr);
-    assertEquals(EdmSimpleTypeKind.Int64, edmSimpleKindTypeLong);
-    assertEquals(EdmSimpleTypeKind.Int16, edmSimpleKindTypeShort);
-    assertEquals(EdmSimpleTypeKind.Int32, edmSimpleKindTypeInteger);
-    assertEquals(EdmSimpleTypeKind.Double, edmSimpleKindTypeDouble);
-    assertEquals(EdmSimpleTypeKind.Single, edmSimpleKindTypeFloat);
-    assertEquals(EdmSimpleTypeKind.Decimal, edmSimpleKindTypeBigDecimal);
-    assertEquals(EdmSimpleTypeKind.Byte, edmSimpleKindTypeByte);
-    assertEquals(EdmSimpleTypeKind.Boolean, edmSimpleKindTypeBoolean);
-    assertEquals(EdmSimpleTypeKind.String, edmSimpleKindTypeCharacter);
-    assertEquals(EdmSimpleTypeKind.Guid, edmSimpleKindTypeUUID);
-    assertEquals(EdmSimpleTypeKind.String, edmSimpleKindTypeStringFromEnum);
-  }
-
-  @Test
-  public void testConvertTypeCharacter() {
-    try {
-      assertEquals(EdmSimpleTypeKind.String, JPATypeConvertor.convertToEdmSimpleType(Character[].class, null));
-      assertEquals(EdmSimpleTypeKind.String, JPATypeConvertor.convertToEdmSimpleType(char[].class, null));
-      assertEquals(EdmSimpleTypeKind.String, JPATypeConvertor.convertToEdmSimpleType(char.class, null));
-    } catch (ODataJPAModelException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-  }
-
-  @Test
-  public void testConvertTypeNumbers() {
-    try {
-      assertEquals(EdmSimpleTypeKind.Int64, JPATypeConvertor.convertToEdmSimpleType(long.class, null));
-      assertEquals(EdmSimpleTypeKind.Int16, JPATypeConvertor.convertToEdmSimpleType(short.class, null));
-      assertEquals(EdmSimpleTypeKind.Int32, JPATypeConvertor.convertToEdmSimpleType(int.class, null));
-      assertEquals(EdmSimpleTypeKind.Double, JPATypeConvertor.convertToEdmSimpleType(double.class, null));
-      assertEquals(EdmSimpleTypeKind.Single, JPATypeConvertor.convertToEdmSimpleType(float.class, null));
-      assertEquals(EdmSimpleTypeKind.Byte, JPATypeConvertor.convertToEdmSimpleType(byte.class, null));
-      assertEquals(EdmSimpleTypeKind.Boolean, JPATypeConvertor.convertToEdmSimpleType(boolean.class, null));
-    } catch (ODataJPAModelException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-  }
-
-  @Test
-  public void testConvertTypeByteArray() {
-    try {
-      assertEquals(EdmSimpleTypeKind.Binary, JPATypeConvertor.convertToEdmSimpleType(Byte[].class, null));
-    } catch (ODataJPAModelException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-  }
-
-  @Test
-  public void testConvertTypeBlob() {
-    testCase = "lob";
-    try {
-      assertEquals(EdmSimpleTypeKind.Binary, JPATypeConvertor.convertToEdmSimpleType(Blob.class,
-          new JPASimpleAttribute()));
-    } catch (ODataJPAModelException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-  }
-
-  @Test
-  public void testConvertTypeClob() {
-    testCase = "lob";
-    try {
-      assertEquals(EdmSimpleTypeKind.String, JPATypeConvertor.convertToEdmSimpleType(Clob.class,
-          new JPASimpleAttribute()));
-    } catch (ODataJPAModelException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-  }
-
-  @Test
-  public void testConvertTypeBLobNegative() {
-    try {
-      JPATypeConvertor.convertToEdmSimpleType(Blob.class, null);
-    } catch (ODataJPAModelException e) {
-      assertTrue(true);
-      return;
-    }
-    fail("ExceptionExpected");
-  }
-
-  @Test
-  public void testConvertTypeClobNegative() {
-    try {
-      JPATypeConvertor.convertToEdmSimpleType(Clob.class, null);
-    } catch (ODataJPAModelException e) {
-      assertTrue(true);
-      return;
-    }
-    fail("ExceptionExpected");
-  }
-
-  @Test
-  public void testConvertTypeCalendar() {
-    try {
-      assertEquals(EdmSimpleTypeKind.DateTime, JPATypeConvertor.convertToEdmSimpleType(Calendar.class, null));
-      assertEquals(EdmSimpleTypeKind.Time, JPATypeConvertor.convertToEdmSimpleType(Time.class, null));
-      assertEquals(EdmSimpleTypeKind.DateTime, JPATypeConvertor.convertToEdmSimpleType(Date.class, null));
-      assertEquals(EdmSimpleTypeKind.DateTime, JPATypeConvertor.convertToEdmSimpleType(Timestamp.class, null));
-      assertEquals(EdmSimpleTypeKind.DateTime, JPATypeConvertor.convertToEdmSimpleType(java.sql.Date.class, null));
-    } catch (ODataJPAModelException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-      ;
-    }
-  }
-
-  @Test
-  public void testConvertTypeTemporal() {
-    testCase = "datetime";
-    try {
-      EdmSimpleTypeKind edmDateType = JPATypeConvertor.convertToEdmSimpleType(Calendar.class, new JPASimpleAttribute());
-      assertEquals(EdmSimpleTypeKind.DateTime, edmDateType);
-    } catch (ODataJPAModelException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-  }
-
-  @Test
-  public void testConvertTypeTemporalTime() {
-    testCase = "time";
-    try {
-      EdmSimpleTypeKind edmTimeType = JPATypeConvertor.convertToEdmSimpleType(Calendar.class, new JPASimpleAttribute());
-      assertEquals(EdmSimpleTypeKind.Time, edmTimeType);
-    } catch (ODataJPAModelException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-  }
-
-  @Test
-  public void testConvertTypeTemporalNull() {
-    testCase = "temporalnull";
-    try {
-      EdmSimpleTypeKind edmDateType = JPATypeConvertor.convertToEdmSimpleType(Calendar.class, new JPASimpleAttribute());
-      assertEquals(EdmSimpleTypeKind.DateTime, edmDateType);
-    } catch (ODataJPAModelException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-  }
-
-  @Test
-  public void testConvertTypeTemporalNull2() {
-    testCase = "temporalnull2";
-    try {
-      EdmSimpleTypeKind edmDateType = JPATypeConvertor.convertToEdmSimpleType(Calendar.class, new JPASimpleAttribute());
-      assertEquals(EdmSimpleTypeKind.DateTime, edmDateType);
-    } catch (ODataJPAModelException e) {
-      fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2);
-    }
-  }
-
-  private static class JPASimpleAttribute extends JPAAttributeMock<Object, String> {
-
-    @Override
-    public Member getJavaMember() {
-      if (testCase.equals("temporalNull2")) {
-        return null;
-      }
-      return new JPAJavaMember();
-    }
-  }
-
-  private static class JPAJavaMember extends JPAJavaMemberMock {
-
-    private Temporal temporal = null;
-    private Lob lob = null;
-
-    @SuppressWarnings("unchecked")
-    @Override
-    public <T extends Annotation> T getAnnotation(final Class<T> annotationClass) {
-
-      if (testCase.equals("temporalnull")) {
-        return null;
-      }
-
-      if (annotationClass.equals(Temporal.class)) {
-        if (temporal == null) {
-          temporal = EasyMock.createMock(Temporal.class);
-          if (testCase.equals("datetime")) {
-            EasyMock.expect(temporal.value()).andReturn(TemporalType.TIMESTAMP).anyTimes();
-            EasyMock.replay(temporal);
-          } else if (testCase.equals("time")) {
-            EasyMock.expect(temporal.value()).andReturn(TemporalType.TIME).anyTimes();
-            EasyMock.replay(temporal);
-          }
-        }
-        return (T) temporal;
-      } else if (annotationClass.equals(Lob.class)) {
-        if (testCase.equals("lob")) {
-          lob = EasyMock.createMock(Lob.class);
-          EasyMock.replay(lob);
-        }
-        return (T) lob;
-      }
-      return null;
-
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/7aac7976/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/jpql/JPQLJoinStatementBuilderTest.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/jpql/JPQLJoinStatementBuilderTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/jpql/JPQLJoinStatementBuilderTest.java
index c4812d6..5701a4c 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/jpql/JPQLJoinStatementBuilderTest.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/jpql/JPQLJoinStatementBuilderTest.java
@@ -53,7 +53,7 @@ public class JPQLJoinStatementBuilderTest {
     EasyMock.expect(context.getSelectExpression()).andStubReturn("mat");
     EasyMock.expect(context.getWhereExpression()).andStubReturn("soh.buyerId = 2");
     String orderByMap = new String("mat.buyerId asc , mat.city desc");
-     EasyMock.expect(context.getOrderByCollection()).andStubReturn(orderByMap);
+    EasyMock.expect(context.getOrderByCollection()).andStubReturn(orderByMap);
     EasyMock.expect(context.getJPAJoinClauses()).andStubReturn(joinClauseList);
     EasyMock.replay(context);
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/7aac7976/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/EdmMockUtilV2.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/EdmMockUtilV2.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/EdmMockUtilV2.java
index dcf3ab9..eb5e02e 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/EdmMockUtilV2.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/EdmMockUtilV2.java
@@ -107,6 +107,8 @@ public class EdmMockUtilV2 {
           mockEdmProperty(entityName, JPATypeMock.PROPERTY_NAME_MCHARARRAY)).anyTimes();
       EasyMock.expect(entityType.getProperty(JPATypeMock.PROPERTY_NAME_MCOMPLEXTYPE)).andReturn(
           mockEdmProperty(entityName, JPATypeMock.PROPERTY_NAME_MCOMPLEXTYPE)).anyTimes();
+      EasyMock.expect(entityType.getProperty(JPATypeMock.PROPERTY_NAME_XMLADAPTER)).andReturn(
+              mockEdmProperty(entityName, JPATypeMock.PROPERTY_NAME_XMLADAPTER)).anyTimes();
       EasyMock.expect(entityType.getProperty(JPATypeMock.NAVIGATION_PROPERTY_X)).andReturn(
           mockEdmNavigationProperty(JPATypeMock.NAVIGATION_PROPERTY_X, EdmMultiplicity.ONE)).anyTimes();
       EasyMock.expect(entityType.getProperty(JPATypeMock.NAVIGATION_PROPERTY_XS)).andReturn(null).anyTimes();
@@ -167,6 +169,7 @@ public class EdmMockUtilV2 {
       propertyNames.add(JPATypeMock.PROPERTY_NAME_MCHAR);
       propertyNames.add(JPATypeMock.PROPERTY_NAME_MCHARARRAY);
       propertyNames.add(JPATypeMock.PROPERTY_NAME_ENUM);
+      propertyNames.add(JPATypeMock.PROPERTY_NAME_XMLADAPTER);
     } else if (entityName.equals(JPARelatedTypeMock.ENTITY_NAME)) {
       propertyNames.add(JPARelatedTypeMock.PROPERTY_NAME_MLONG);
       propertyNames.add(JPARelatedTypeMock.PROPERTY_NAME_MBYTE);
@@ -269,6 +272,7 @@ public class EdmMockUtilV2 {
         propertyName.equals(JPATypeMock.PROPERTY_NAME_MC) ||
         propertyName.equals(JPATypeMock.PROPERTY_NAME_MCHAR) ||
         propertyName.equals(JPATypeMock.PROPERTY_NAME_MCHARARRAY) ||
+        propertyName.equals(JPATypeMock.PROPERTY_NAME_XMLADAPTER) ||
         propertyName.equals(JPATypeMock.JPATypeEmbeddableMock.PROPERTY_NAME_MSHORT) ||
         propertyName.equals(JPATypeMock.JPATypeEmbeddableMock2.PROPERTY_NAME_MFLOAT) ||
         propertyName.equals(JPATypeMock.JPATypeEmbeddableMock2.PROPERTY_NAME_MUUID) ||
@@ -294,6 +298,9 @@ public class EdmMockUtilV2 {
         EasyMock.<Class<?>> expect(edmType.getDefaultType()).andReturn(String.class).anyTimes();
       } else if (propertyName.equals(JPATypeMock.PROPERTY_NAME_MBLOB)) {
         EasyMock.<Class<?>> expect(edmType.getDefaultType()).andReturn(Blob.class).anyTimes();
+      } else if (propertyName.equals(JPATypeMock.PROPERTY_NAME_XMLADAPTER)) {
+    	  EasyMock.<Class<?>> expect(edmType.getDefaultType())
+    	  	.andReturn(String.class).anyTimes();
       } else {
         EasyMock.<Class<?>> expect(edmType.getDefaultType()).andReturn(Integer.class).anyTimes();
       }
@@ -301,6 +308,9 @@ public class EdmMockUtilV2 {
       EasyMock.expect(edmType.isCompatible(EasyMock.isA(EdmSimpleType.class))).andReturn(true).anyTimes();
       EasyMock.replay(edmType);
       EasyMock.expect(edmProperty.getName()).andReturn(propertyName).anyTimes();
+      
+      
+      
       EasyMock.expect(edmProperty.getMapping()).andReturn((EdmMapping) mockEdmMapping(entityName, propertyName, null))
           .anyTimes();
 
@@ -402,6 +412,9 @@ public class EdmMockUtilV2 {
     } else if (propertyName.equals(JPATypeMock.PROPERTY_NAME_MCHARARRAY)) {
       mapping.setJPAType(Character[].class);
       ((Mapping) mapping).setInternalName(JPATypeMock.PROPERTY_NAME_MCHARARRAY);
+    } else if (propertyName.equals(JPATypeMock.PROPERTY_NAME_XMLADAPTER)) {
+        mapping.setJPAType(EntityWithXmlAdapterOnProperty.class);
+        ((Mapping) mapping).setInternalName(JPATypeMock.PROPERTY_NAME_XMLADAPTER);
     } else if (propertyName.equals(JPATypeMock.PROPERTY_NAME_MDATETIME)) {
       mapping.setJPAType(Calendar.class);
       ((Mapping) mapping).setInternalName(JPATypeMock.PROPERTY_NAME_MDATETIME);

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/7aac7976/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/EntityWithXmlAdapterOnProperty.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/EntityWithXmlAdapterOnProperty.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/EntityWithXmlAdapterOnProperty.java
new file mode 100644
index 0000000..029a3ff
--- /dev/null
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/EntityWithXmlAdapterOnProperty.java
@@ -0,0 +1,16 @@
+package org.apache.olingo.odata2.jpa.processor.core.mock.data;
+
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+public class EntityWithXmlAdapterOnProperty {
+	private EntityWithXmlAdapterOnProperty self;
+
+	@XmlJavaTypeAdapter(XmlAdapter.class)
+	public EntityWithXmlAdapterOnProperty getSelf() {
+		return self;
+	}
+
+	public void setSelf(EntityWithXmlAdapterOnProperty self) {
+		this.self = self;
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/7aac7976/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/JPATypeMock.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/JPATypeMock.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/JPATypeMock.java
index 60b1c91..a9d0c4e 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/JPATypeMock.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/JPATypeMock.java
@@ -28,6 +28,8 @@ import java.util.Date;
 import java.util.List;
 import java.util.UUID;
 
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
 /* ========================================================================= */
 public class JPATypeMock {
 
@@ -46,7 +48,8 @@ public class JPATypeMock {
   public static final String PROPERTY_NAME_MKEY = "key";
   public static final String PROPERTY_NAME_MCOMPLEXTYPE = "complexType";
   public static final String PROPERTY_NAME_ENUM = "mSomeEnum";
-  
+  public static final String PROPERTY_NAME_XMLADAPTER = "propertyWithXmlAdapter";
+
   public static final String NAVIGATION_PROPERTY_X = "mRelatedEntity";
   public static final String NAVIGATION_PROPERTY_XS = "mRelatedEntities";
 
@@ -62,6 +65,8 @@ public class JPATypeMock {
   private Character mChar;
   private Character[] mCharArray;
   private JPATypeMockEnum mSomeEnum;
+  
+  private EntityWithXmlAdapterOnProperty propertyWithXmlAdapter;
 
   public Clob getMClob() {
     return mClob;
@@ -177,6 +182,15 @@ public class JPATypeMock {
   public void setMSomeEnum(JPATypeMockEnum mSomeEnum) {
     this.mSomeEnum = mSomeEnum;
   }
+  
+  @XmlJavaTypeAdapter(XmlAdapter.class)
+  public EntityWithXmlAdapterOnProperty getPropertyWithXmlAdapter() {
+    return propertyWithXmlAdapter;
+  }
+
+  public void setPropertyWithXmlAdapter(EntityWithXmlAdapterOnProperty propertyWithXmlAdapter) {
+    this.propertyWithXmlAdapter = propertyWithXmlAdapter;
+  }
 
   /* ========================================================================= */
   public static class JPATypeEmbeddableMock {

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/7aac7976/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/ODataEntryMockUtil.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/ODataEntryMockUtil.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/ODataEntryMockUtil.java
index a199329..b0a2c31 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/ODataEntryMockUtil.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/ODataEntryMockUtil.java
@@ -47,6 +47,7 @@ public class ODataEntryMockUtil {
   public static final String VALUE_CHAR = "I";
   public static final String VALUE_CHARARRAY = "LMN";
   public static final String VALUE_MSTRING = "Mock";
+  public static final String VALUE_XMLADAPTER = "DOES-NOT-MATTER";
   public static final long VALUE_MLONG = 1234567890L;
   public static final double VALUE_MDOUBLE = 20.12;
   public static final byte VALUE_MBYTE = 0XA;
@@ -143,6 +144,7 @@ public class ODataEntryMockUtil {
       propertyMap.put(JPATypeMock.PROPERTY_NAME_MCHAR, VALUE_CHAR);
       propertyMap.put(JPATypeMock.PROPERTY_NAME_MCHARARRAY, VALUE_CHARARRAY);
       propertyMap.put(JPATypeMock.PROPERTY_NAME_MSTRING, VALUE_MSTRING);
+      propertyMap.put(JPATypeMock.PROPERTY_NAME_XMLADAPTER, VALUE_XMLADAPTER);
     } else if (entityName.equals(JPARelatedTypeMock.ENTITY_NAME)) {
       propertyMap.put(JPARelatedTypeMock.PROPERTY_NAME_MLONG, VALUE_MLONG);
       propertyMap.put(JPARelatedTypeMock.PROPERTY_NAME_MDOUBLE, VALUE_MDOUBLE);

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/7aac7976/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/XmlAdapter.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/XmlAdapter.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/XmlAdapter.java
new file mode 100644
index 0000000..f0d0478
--- /dev/null
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/mock/data/XmlAdapter.java
@@ -0,0 +1,16 @@
+package org.apache.olingo.odata2.jpa.processor.core.mock.data;
+
+public class XmlAdapter extends
+	javax.xml.bind.annotation.adapters.XmlAdapter<String, EntityWithXmlAdapterOnProperty> {
+
+	@Override
+	public String marshal(EntityWithXmlAdapterOnProperty arg0) throws Exception {
+		return "self";
+	}
+
+	@Override
+	public EntityWithXmlAdapterOnProperty unmarshal(String arg0) throws Exception {
+		return new EntityWithXmlAdapterOnProperty();
+	}
+
+}
\ No newline at end of file