Enhancement may cause corruption of classes using method overloading
--------------------------------------------------------------------
Key: OPENJPA-383
URL: https://issues.apache.org/jira/browse/OPENJPA-383
Project: OpenJPA
Issue Type: Bug
Affects Versions: 1.0.0, 1.0.1, 1.1.0
Environment: Java 1.5.0_12, Java 1.6.0_02
Reporter: Janko Heilgeist
As already reported on the developers mailing-list, the enhancement of classes
that use method overloading may corrupt these classes. An example:
public interface GenericEntity<PK extends Serializable> {
PK getEntityId();
void setEntityId(PK entityId);
}
public interface LongObjIdEntity extends GenericEntity<Long> {
Long getEntityId();
void setEntityId(Long entityId);
}
@Entity
public class SomeEntity implements LongObjIdEntity {
private Long entityId;
@Id
@GeneratedValue
public Long getEntityId() { return entityId; }
public void setEntityId(Long entityId) { this.entityId = entityId; }
}
After enhancement of the class SomeEntity, calls to
SomeEntity.class.getDeclaredFields() may fail with an VerifyError due to a
"Wrong return type in function" getEntityId. This is a serious error because
getDeclaredFields() is called for example during the deserialization of objects
from an ObjectInputStream (which prohibits e.g. usage of such an enhanced
entity as argument to an EJB-function) and even in the PCEnhancer class itself,
which will fail when analyizing a previously enhanced class.
The cause of this error is in my opinion related to bugs OPENJPA-251 and
OPENJPA-329. Reflection on the class returns two versions of the
getEntityId()-function: "Serializable getEntityId()" and "Long getEntityId()".
The enhancer uses a version of the function getDeclaredMethod() of the
serp-library, that does not guarantee which of these methods is returned, if
only the name of the function and its parameter-types are specified. If the
wrong method is picked, the enhanced class is no longer usable.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.