You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2011/06/30 17:52:12 UTC
svn commit: r1141583 - in /openjpa/trunk/openjpa-persistence/src/main:
java/org/apache/openjpa/persistence/meta/MetamodelImpl.java
resources/org/apache/openjpa/persistence/meta/localizer.properties
Author: ppoddar
Date: Thu Jun 30 15:52:11 2011
New Revision: 1141583
URL: http://svn.apache.org/viewvc?rev=1141583&view=rev
Log:
OPENJPA-2024: Ignore non-canonical fields during metamodel assignment
Modified:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/MetamodelImpl.java
openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/meta/localizer.properties
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/MetamodelImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/MetamodelImpl.java?rev=1141583&r1=1141582&r2=1141583&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/MetamodelImpl.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/MetamodelImpl.java Thu Jun 30 15:52:11 2011
@@ -308,6 +308,9 @@ public class MetamodelImpl implements Me
for (Field mf : mfields) {
try {
ParameterizedType mfType = getParameterziedType(mf);
+ if (mfType == null) {
+ continue;
+ }
Attribute<? super X, ?> f = type.getAttribute(mf.getName());
Class<?> fClass = f.getJavaType();
java.lang.reflect.Type[] args = mfType.getActualTypeArguments();
@@ -334,12 +337,18 @@ public class MetamodelImpl implements Me
/**
* Gets the parameterized type of the given field after validating.
+ *
+ * @return the field's type as a parameterized type. If the field
+ * is not parameterized type (that can happen for non-canonical
+ * metamodel or weaving process introducing synthetic fields),
+ * returns null.
*/
ParameterizedType getParameterziedType(Field mf) {
java.lang.reflect.Type t = mf.getGenericType();
if (t instanceof ParameterizedType == false) {
- throw new IllegalStateException(_loc.get("meta-field-not-param",
+ repos.getLog().warn(_loc.get("meta-field-not-param",
mf.getDeclaringClass(), mf.getName(), toTypeName(t)).getMessage());
+ return null;
}
ParameterizedType mfType = (ParameterizedType)t;
java.lang.reflect.Type[] args = mfType.getActualTypeArguments();
@@ -367,9 +376,9 @@ public class MetamodelImpl implements Me
java.lang.reflect.Type[] args = pType.getActualTypeArguments();
StringBuilder tmp = new StringBuilder(pType.getRawType().toString());
for (int i = 0; i < args.length; i++) {
- tmp.append((i == 0) ? "<" : ",");
+ tmp.append((i == 0) ? '<' : ',');
tmp.append(toTypeName(args[i]));
- tmp.append((i == args.length-1) ? ">" : "");
+ if (i == args.length-1) tmp.append('>');
}
return tmp.toString();
}
Modified: openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/meta/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/meta/localizer.properties?rev=1141583&r1=1141582&r2=1141583&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/meta/localizer.properties (original)
+++ openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/meta/localizer.properties Thu Jun 30 15:52:11 2011
@@ -53,7 +53,9 @@ mmg-bad-log: Log level specified in -Alo
meta-class-no-anno: Meta class "{0}" registered for "{1}" is not annotated \
with "{2}" annotation.
meta-field-mismatch: The field "{0}" in meta class "{1}" is of type "{2}" \
- which does not match the persistent property type "{3}".
+ which does not match the persistent property type "{3}".
+meta-field-not-param: Encountered field " {2} {1}" in "{0}". This field is \
+ not recognized as canonical field. Ignoring.
type-wrong-category:"{0}" categorized as "{1}" should be a "{2}"
mmg-asl-header: Licensed to the Apache Software Foundation (ASF) under one \
or more contributor license agreements. See the NOTICE file distributed \