[jbossseam-issues] [JBoss JIRA] Closed: (JBSEAM-3851) Seam reflection has lower access than Java reflection
Norman Richards (JIRA)
jira-events at lists.jboss.org
Wed Jan 21 20:19:14 EST 2009
[ https://jira.jboss.org/jira/browse/JBSEAM-3851?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Norman Richards closed JBSEAM-3851.
-----------------------------------
Fix Version/s: 2.1.2.CR1
Resolution: Done
Assignee: Norman Richards
It took a while to convince myself this was a necessary change. I was not as concerned about setAccessible() access as I was that the proxies will fail on legitimate package protected access. Since we do similar things elsewhere, so it should be ok to assume that anyone who has successfully called into the proxy should be able to call the same method on the proxied object.
> Seam reflection has lower access than Java reflection
> -----------------------------------------------------
>
> Key: JBSEAM-3851
> URL: https://jira.jboss.org/jira/browse/JBSEAM-3851
> Project: Seam
> Issue Type: Bug
> Affects Versions: 2.0.2.SP1
> Environment: Jboss Embedded, Java 5
> Reporter: Gabriel Goïc
> Assignee: Norman Richards
> Fix For: 2.1.2.CR1
>
>
> This simple class is to be unit-tested, the SeamTest way:
> @Name("hibean")
> public class HiSayerBean {
>
> public HiSayerBean () {
> }
> protected void sayHi(){
> System.out.println("hello");
> }
> }
> All tests occur in the SeamTest framework:
> new ComponentTest() {
> @Override
> protected void testComponents() throws Exception {
> //test code
> }
> }.run();
> Using Java Reflection - works:
> HiSayerBean impl = new HiSayerBean();
> Method m = impl.getClass().getDeclaredMethod("sayHi");
> m.setAccessible(true);
> m.invoke(impl);
> Using Java Reflection with Seam - fails:
> HiSayerBean impl = (HiSayerBean) getInstance("hibean");
> Method m = impl.getClass().getDeclaredMethod("sayHi");
> m.setAccessible(true);
> m.invoke(impl);
> Error log:
> java.lang.reflect.InvocationTargetException
> (...)
> Caused by: java.lang.IllegalAccessException: Class org.jboss.seam.util.Reflections can not access a member of class HiSayerBean with modifiers "protected"
> at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
> at java.lang.reflect.Method.invoke(Method.java:578)
> at org.jboss.seam.util.Reflections.invoke(Reflections.java:21)
> at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:31)
> at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56)
> at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:31)
> at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
> at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:46)
> at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
> at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:42)
> at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
> at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
> at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:166)
> at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:102)
> at HiSayerBean_$$_javassist_0.sayHi(HiSayerBean_$$_javassist_0.java)
> ... 29 more
> So, using Seam gives me a lower capacity to access methods in a reflected class than with raw Java. I'm not sure if it's a bug or a feature request though. But it would be nice to be granted to do this in unit-testing.
> Please note that access to a private method in the same way than above works with Java but produces a java.lang.NoSuchMethodException with Seam.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the seam-issues
mailing list