[weld-issues] [JBoss JIRA] Created: (CDITCK-161) Test Fails With IllegalAccessError:org.jboss.jsr299.tck.tests.implementation.enterprise.definition.EnterpriseBeanDefinitionTest.testConstructorAnnotatedInjectCalled

Roger Kitain (JIRA) jira-events at lists.jboss.org
Wed May 19 09:09:06 EDT 2010


Test Fails With IllegalAccessError:org.jboss.jsr299.tck.tests.implementation.enterprise.definition.EnterpriseBeanDefinitionTest.testConstructorAnnotatedInjectCalled
--------------------------------------------------------------------------------------------------------------------------------------------------------------------

                 Key: CDITCK-161
                 URL: https://jira.jboss.org/browse/CDITCK-161
             Project: CDI TCK
          Issue Type: Bug
      Security Level: Public (Everyone can see)
         Environment: GlassFish v3.0.1
            Reporter: Roger Kitain


org.jboss.jsr299.tck.tests.implementation.enterprise.definition.EnterpriseBeanDefinitionTest.testConstructorAnnotatedInjectCalled fails with:

[testng] java.lang.IllegalAccessError: tried to access class org.jboss.jsr299.tck.tests.implementation.enterprise.definition.SimpleBean from class $Proxy150
>>>  [testng] 	at $Proxy150.getInjectedSimpleBean(Unknown Source)
>>>  [testng] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>  [testng] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>  [testng] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>  [testng] 	at java.lang.reflect.Method.invoke(Method.java:597)
>>>  [testng] 	at org.jboss.weld.util.reflection.SecureReflections$13.work(SecureReflections.java:304)
>>>  [testng] 	at org.jboss.weld.util.reflection.SecureReflectionAccess.run(SecureReflectionAccess.java:54)
>>>  [testng] 	at org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInvocation(SecureReflectionAccess.java:163)
>>>  [testng] 	at org.jboss.weld.util.reflection.SecureReflections.invoke(SecureReflections.java:298)
>>>  [testng] 	at org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:127)
>>>  [testng] 	at org.jboss.weld.util.CleanableMethodHandler.invoke(CleanableMethodHandler.java:43)
>>>  [testng] 	at org.jboss.jsr299.tck.tests.implementation.enterprise.definition.ExplicitConstructor_$$_javassist_13.getInjectedSimpleBean(ExplicitConstructor_$$_javassist_13.java)
>>>  [testng] 	at org.jboss.jsr299.tck.tests.implementation.enterprise.definition.EnterpriseBeanDefinitionTest.testConstructorAnnotatedInjectCalled(EnterpriseBeanDefinitionTest.java:63)
>>>  [testng] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>  [testng] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>  [testng] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>  [testng] 	at java.lang.reflect.Method.invoke(Method.java:597)
>>>  [testng] 	at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:609)
>>>  [testng] 	at org.testng.internal.MethodHelper$1.runTestMethod(MethodHelper.java:727)
>>>  [testng] 	at org.jboss.testharness.AbstractTest.run(AbstractTest.java:244)
>>>  [testng] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>  [testng] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>  [testng] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>  [testng] 	at java.lang.reflect.Method.invoke(Method.java:597)
>>>  [testng] 	at org.testng.internal.MethodHelper.invokeHookable(MethodHelper.java:735)
>>>  [testng] 	at org.testng.internal.Invoker.invokeMethod(Invoker.java:525)
>>>  [testng] 	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:686)
>>>  [testng] 	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1018)
>>>  [testng] 	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:128)
>>>  [testng] 	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
>>>  [testng] 	at org.testng.TestRunner.runWorkers(TestRunner.java:759)
>>>  [testng] 	at org.testng.TestRunner.privateRun(TestRunner.java:592)
>>>  [testng] 	at org.testng.TestRunner.run(TestRunner.java:486)
>>>  [testng] 	at org.testng.SuiteRunner.runTest(SuiteRunner.java:332)
>>>  [testng] 	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:327)
>>>  [testng] 	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:299)
>>>  [testng] 	at org.testng.SuiteRunner.run(SuiteRunner.java:204)
>>>  [testng] 	at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:912)
>>>  [testng] 	at org.testng.TestNG.runSuitesLocally(TestNG.java:876)
>>>  [testng] 	at org.testng.TestNG.run(TestNG.java:784)
>>>  [testng] 	at org.jboss.testharness.impl.runner.TestRunner.run(TestRunner.java:61)
>>>  [testng] 	at org.jboss.testharness.impl.runner.servlet.ServletTestRunner.doGet(ServletTestRunner.java:120)
>>>  [testng] 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
>>>  [testng] 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
>>>  [testng] 	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
>>>  [testng] 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
>>>  [testng] 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
>>>  [testng] 	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
>>>  [testng] 	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
>>>  [testng] 	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
>>>  [testng] 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
>>>  [testng] 	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
>>>  [testng] 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
>>>  [testng] 	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
>>>  [testng] 	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
>>>  [testng] 	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
>>>  [testng] 	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
>>>  [testng] 	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
>>>  [testng] 	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
>>>  [testng] 	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
>>>  [testng] 	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
>>>  [testng] 	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
>>>  [testng] 	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
>>>  [testng] 	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
>>>  [testng] 	at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
>>>  [testng] 	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
>>>  [testng] 	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
>>>  [testng] 	at java.lang.Thread.run(Thread.java:637)

===========================

> Am Dienstag, den 18.05.2010, 14:07 +0100 schrieb Pete Muir:
>> >> Upon some quick investigation, the problem is that:
>> >> 
>> >> * SimpleBean is package protected
>> >> * SimpleBean, the Test and the ExplicitConstructor & it's bean are in the same package
>> >> * the proxy isn't, thus trying to access SimpleBean via it causes this error (I think, not 100% on this)
> > 
> > Yes, this appears to be an EJB proxy in GF?  
Yes, it's a Java dynamic proxy used by the container to implement an EJB reference for the Local business view of the bean.   I found the JDK issue filed for this as of JDK 1.5 , still not addressed : http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6256803.  The root cause is that the java.lang.reflect.Proxy javadoc says the package of a dynamic proxy for a public interface is undefined.   In SUN's JDK the actual package assigned to the package at runtime is 'null', so the proxy gets an IllegalAccessError when attempting to access SimpleBean, which is package private.    

The first thing to note is this has nothing to do with the fix to support constructor injection on EJB bean classes.    It's pretty easy to reproduce the IllegalAccessError on an unrelated app.  Unfortunately the constructor injection fix revealed issues in the only two WELD TCK tests that exercise EJB constructor injection, this being one of them.    There's obviously no requirement that the EJB container use JDK dynamic proxies to implement EJB reference objects but it's unrealistic for that strategy to change at this stage and for this issue.   The JDK bug evaluator's note makes the point that it's generally bad practice for a public interface to depend on non-public types.  

Seems like the best two options are to either modify the test to make SimpleBean a public class or exclude the test.   Thoughts? 



-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the weld-issues mailing list