[ 
https://jira.jboss.org/browse/CDITCK-161?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Pete Muir closed CDITCK-161.
----------------------------

      Assignee: Pete Muir
    Resolution: Done


> 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
>            Assignee: Pete Muir
>             Fix For: 1.0.2.CR1, 1.1.0.CR1
>
>
> 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

        
_______________________________________________
weld-issues mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/weld-issues

Reply via email to