[
http://jira.jboss.com/jira/browse/JBSEAM-1295?page=comments#action_12361656 ]
Chris Rudd commented on JBSEAM-1295:
------------------------------------
I altered Entity.java :
public Entity(Class<?> beanClass)
{
super(beanClass);
for ( Class<?> clazz=beanClass; clazz!=Object.class; clazz =
clazz.getSuperclass() )
{
for ( Method method: getBeanClass().getDeclaredMethods() )
{
//TODO: does the spec allow multiple lifecycle method
// in the entity class heirarchy?
if ( method.isAnnotationPresent(PreRemove.class) )
{
preRemoveMethod = method;
preRemoveMethod.setAccessible(true);
}
if ( method.isAnnotationPresent(PrePersist.class) )
{
prePersistMethod = method;
prePersistMehod.setAccessible(true);
}
if ( method.isAnnotationPresent(PreUpdate.class) )
{
preUpdateMethod = method;
preUpdateMethod.setAccessible(true);
}
if ( method.isAnnotationPresent(PostLoad.class) )
{
postLoadMethod = method;
postLoadMethod.setAccessible(true);
}
if ( method.isAnnotationPresent(Id.class) )
{
identifierGetter = method;
identifierGetter.setAccessible(true);
}
}
if (identifierGetter==null)
{
for ( Field field: getBeanClass().getDeclaredFields() )
{
if ( field.isAnnotationPresent(Id.class) )
{
identifierField = field;
identifierField.setAccessible(true);
}
}
}
}
}
Alternatly you could modify Reflections.java :
line 16
try
{
+ if( !method.isAccessible() )
+ method.setAccessible() )
return method.invoke( target, args );
line 45
try
{
+ if( !field.isAccessible() )
+ field.setAccessible() )
return field.get( target );
line 59
try
{
+ if( !field.isAccessible() )
+ field.setAccessible() )
field.set( target, value );
Entity component doesnt ensure that the the identifier field is
accessible.
---------------------------------------------------------------------------
Key: JBSEAM-1295
URL:
http://jira.jboss.com/jira/browse/JBSEAM-1295
Project: JBoss Seam
Issue Type: Bug
Affects Versions: 1.2.1.GA, 1.2.0.GA
Reporter: Chris Rudd
The Entity component uses reflection to get the identifier of that @Entity it represents.
If the identifier is a private/protected @Id annotated field Entity.getIdentifier will
fail with an IllegalAccessException.
The code should be updated to call setAccessible(true) for each member / method that
could be private/protected that will be accessed.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira