Bug 390932 - ValidationException thrown when a non-JPA annotation is used on a @Transient annotated field/property
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/annotations/TransientCompatibleAnnotations.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/annotations/TransientCompatibleAnnotations.java
index 2c20ebd..9ff791a 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/annotations/TransientCompatibleAnnotations.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/annotations/TransientCompatibleAnnotations.java
@@ -43,6 +43,7 @@
             transientCompatibleAnnotations.add("javax.persistence.PersistenceContext");

             transientCompatibleAnnotations.add("javax.persistence.PersistenceContexts");

             transientCompatibleAnnotations.add("javax.persistence.Access");

+            transientCompatibleAnnotations.add("javax.persistence.Transient");

         }

         return transientCompatibleAnnotations;

     }

diff --git a/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa/advanced/Employee.java b/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa/advanced/Employee.java
index b69a115..2706275 100644
--- a/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa/advanced/Employee.java
+++ b/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/jpa/advanced/Employee.java
@@ -16,6 +16,7 @@
 import java.util.*;

 import java.io.Serializable;

 import javax.persistence.*;

+import javax.xml.bind.annotation.XmlTransient;

 

 import org.eclipse.persistence.annotations.BasicCollection;

 import org.eclipse.persistence.annotations.Cache;

@@ -41,6 +42,7 @@
 import org.eclipse.persistence.annotations.WriteTransformer;

 import org.eclipse.persistence.annotations.WriteTransformers;

 import org.eclipse.persistence.config.QueryHints;

+import org.eclipse.persistence.oxm.annotations.XmlPath;

 import org.eclipse.persistence.sessions.Record;

 import org.eclipse.persistence.sessions.Session;

 

@@ -526,6 +528,8 @@
      * Return the first element of the Transformation mapped normalHours.

      */

     @Transient

+    // XmlPath Annotation added as test for bug 390932

+    @XmlPath("")

     public java.sql.Time getStartTime() {

         return getNormalHours()[0];

     }

diff --git a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/MetadataConstants.java b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/MetadataConstants.java
index 45de4fd..2b7b80c 100644
--- a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/MetadataConstants.java
+++ b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/MetadataConstants.java
@@ -170,5 +170,7 @@
     

     /** Used by canonical model generator */ 

     public static final String JPA_PERSISTENCE_PACKAGE_PREFIX = "javax.persistence";

-    public static final String ECLIPSELINK_PERSISTENCE_PACKAGE_PREFIX = "org.eclipse.persistence.annotations";

+    public static final String ECLIPSELINK_PERSISTENCE_PACKAGE_PREFIX = "org.eclipse.persistence";

+    public static final String ECLIPSELINK_OXM_PACKAGE_PREFIX = "org.eclipse.persistence.oxm";

+

 }

diff --git a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/accessors/objects/MetadataAnnotatedElement.java b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/accessors/objects/MetadataAnnotatedElement.java
index b47a91d..ec982c0 100644
--- a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/accessors/objects/MetadataAnnotatedElement.java
+++ b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/metadata/accessors/objects/MetadataAnnotatedElement.java
@@ -47,7 +47,6 @@
 import java.lang.reflect.Modifier;

 import java.util.ArrayList;

 import java.util.HashMap;

-import java.util.Iterator;

 import java.util.List;

 import java.util.Map;

 

@@ -81,6 +80,7 @@
 import static org.eclipse.persistence.internal.jpa.metadata.MetadataConstants.JPA_ONE_TO_ONE;

 import static org.eclipse.persistence.internal.jpa.metadata.MetadataConstants.JPA_TEMPORAL;

 import static org.eclipse.persistence.internal.jpa.metadata.MetadataConstants.JPA_VERSION;

+import static org.eclipse.persistence.internal.jpa.metadata.MetadataConstants.ECLIPSELINK_OXM_PACKAGE_PREFIX;

 

 /**

  * INTERNAL:

@@ -407,14 +407,13 @@
      * persistence annotations.

      */

     public boolean areAnnotationsCompatibleWithTransient(ClassAccessor classAccessor) {

-        int legalAnnotationCount = 1;

-        Iterator annotations = TransientCompatibleAnnotations.getTransientCompatibleAnnotations().iterator();

-        while (annotations.hasNext()){

-            if (m_annotations.containsKey(annotations.next())){

-                legalAnnotationCount++;

+        List<String> annotations = TransientCompatibleAnnotations.getTransientCompatibleAnnotations();

+        for (String key: m_annotations.keySet()){

+            if (!key.startsWith(ECLIPSELINK_OXM_PACKAGE_PREFIX) && !annotations.contains(key)){

+                return false;

             }

         }

-        return getDeclaredAnnotationsCount(classAccessor) <= legalAnnotationCount;

+        return true;

     }

     

     /**