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;
}
/**