Community
Participate
Working Groups
Created attachment 116974 [details] 2 eclipse projects higlighting the bug Build ID: M20080911-1700 Steps To Reproduce: 1.import the attached zip with import->Existing projects into workspace 2.run Caller.java More information: maybe related to bug 251326
Please include the failure message when you raise a bug, it may lead to it getting diagnosed faster. I have recreated it: Exception in thread "main" java.lang.IllegalAccessError: tried to access class pack.AdvisedClass$InnerIterator from class otherPack.Caller at otherPack.Caller.main(Caller.java:9) The problem is that AspectJ cannot do its job with the project configuration like this. In order for Caller to access the inner type, it needs to expose it as public. The type 'pack.AdvisedClass' is not exposed for weaving since it is in another project and only on the classpath of testproj. There should really be a compile time error saying that AspectJ cannot modify the inner type that it needs to. A solution to this is to alter the configuration so that the builder for testproj can see and change AdvisedClass but it isn't ideal. If you change the testproj so that instead of just a classpath dependency on testcode, it has an inpath dependency on testcode, then it will be able to see and weave AdvisedClass - *but* the modified version of AdvisedClass will be in the bin folder of the testproj. Caller will then run just fine. You can't put testproj on the aspectpath of testcode (which would also allow AdvisedClass to be modified) because that creates a project dependency cycle. Or, you could just change the visibility of the AdvisedClass.InnerIterator type from private to public - but I guess that violates the visibility you are trying to achieve.
(In reply to comment #1) > Or, you could just change the visibility of the AdvisedClass.InnerIterator type > from private to public - but I guess that violates the visibility you are > trying to achieve. I would actually like to have a private inner class woven at loadtime... From what I see this doesn't seem possible right?
at loadtime you may be OK as the type will be available for the weaver to modify.
(In reply to comment #3) > at loadtime you may be OK as the type will be available for the weaver to > modify. > unfortunately not... I'm trying to weave Tomcat with the following package javax.el.aspects; import javax.el.*; public privileged aspect CompositeELResolver_FeatureIterator_next_NotNullReturn{ //Checks if a method returns Null after() returning(Object retVal): call(* *.next(..)) && target(CompositeELResolver.FeatureIterator){ if(retVal==null){ System.out.println("Null object returned"); } } } where javax.el.CompositeELResolver.FeatureIterator is a private inner class and I get the same IllegalAccessError: 12-dic-2008 21.12.11 org.apache.tomcat.util.digester.Digester startElement GRAVE: Begin event threw error java.lang.IllegalAccessError: tried to access class javax.el.CompositeELResolver$FeatureIterator from class org.apache.tomcat.util.digester.RulesBase at org.apache.tomcat.util.digester.RulesBase.match(RulesBase.java:221) at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1267) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:767) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1359) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(XMLDocumentScannerImpl.java:1316) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3095) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:921) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1581) at org.apache.tomcat.util.modeler.modules.MbeansDescriptorsDigesterSource.execute(MbeansDescriptorsDigesterSource.java:227) at org.apache.tomcat.util.modeler.modules.MbeansDescriptorsDigesterSource.loadDescriptors(MbeansDescriptorsDigesterSource.java:210) at org.apache.tomcat.util.modeler.Registry.load(Registry.java:753) at org.apache.tomcat.util.modeler.Registry.loadDescriptors(Registry.java:865) at org.apache.tomcat.util.modeler.Registry.loadDescriptors(Registry.java:843) at org.apache.catalina.mbeans.MBeanUtils.createRegistry(MBeanUtils.java:1359) at org.apache.catalina.mbeans.MBeanUtils.<clinit>(MBeanUtils.java:99) at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.<clinit>(GlobalResourcesLifecycleListener.java:66) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at java.lang.Class.newInstance0(Class.java:355) at java.lang.Class.newInstance(Class.java:308) at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:206) at org.apache.tomcat.util.digester.Rule.begin(Rule.java:153) at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1276) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501) at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:179) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1339) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2747) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1562) at org.apache.catalina.startup.Catalina.load(Catalina.java:490) at org.apache.catalina.startup.Catalina.load(Catalina.java:524) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:260) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:412) java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:260) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:412) Caused by: java.lang.IllegalAccessError: tried to access class javax.el.CompositeELResolver$FeatureIterator from class org.apache.tomcat.util.digester.RulesBase at org.apache.tomcat.util.digester.RulesBase.match(RulesBase.java:221) at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1267) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:767) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1359) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(XMLDocumentScannerImpl.java:1316) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3095) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:921) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1581) at org.apache.tomcat.util.modeler.modules.MbeansDescriptorsDigesterSource.execute(MbeansDescriptorsDigesterSource.java:227) at org.apache.tomcat.util.modeler.modules.MbeansDescriptorsDigesterSource.loadDescriptors(MbeansDescriptorsDigesterSource.java:210) at org.apache.tomcat.util.modeler.Registry.load(Registry.java:753) at org.apache.tomcat.util.modeler.Registry.loadDescriptors(Registry.java:865) at org.apache.tomcat.util.modeler.Registry.loadDescriptors(Registry.java:843) at org.apache.catalina.mbeans.MBeanUtils.createRegistry(MBeanUtils.java:1359) at org.apache.catalina.mbeans.MBeanUtils.<clinit>(MBeanUtils.java:99) at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.<clinit>(GlobalResourcesLifecycleListener.java:66) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at java.lang.Class.newInstance0(Class.java:355) at java.lang.Class.newInstance(Class.java:308) at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:206) at org.apache.tomcat.util.digester.Rule.begin(Rule.java:153) at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1276) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501) at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:179) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1339) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2747) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1562) at org.apache.catalina.startup.Catalina.load(Catalina.java:490) at org.apache.catalina.startup.Catalina.load(Catalina.java:524) ... 6 more
you didnt say it was a javax.* class... AspectJ has special rules for java.* and javax.* - they are not woven by default. Under https://bugs.eclipse.org/bugs/show_bug.cgi?id=149261 I added some options to allow them to be woven *if* you can get the weaver correctly associated with the classloader that loads them. You need to try: > <weaver options="-Xset:weaveJavaxPackages=true"/> in your aop.xml
(In reply to comment #5) > You need to try: > > <weaver options="-Xset:weaveJavaxPackages=true"/> > in your aop.xml wow... this should really be a FAQ and maybe a warning from the compiler
*** This bug has been marked as a duplicate of bug 255643 ***
(In reply to comment #7) > > *** This bug has been marked as a duplicate of bug 255643 *** A you said this bug also highlights a problem in the compile time weaving: "There should really be a compile time error saying that AspectJ cannot modify the inner type that it needs to."
actually, on closer examination, that comes out already. When I import your projects into eclipse I see the warning: warning this affected type is not exposed to the weaver: pack.AdvisedClass$InnerIterator (needed for privileged access) [Xlint:typeNotExposedToWeaver] which is precisely the problem here. did you not get the warning? Whether it should be an error or a warning - different users will have different opinions. If running the aspect immediately after then the warning should have been an error. If just getting it compile in the IDE then running it with LTW, then a warning is fine as the code will execute OK. It is an XLint and so the severity you care about is configurable as a project property, in the AspectJ section. If you are regularly running inside the IDE then up the severity on that xlint to error.
(In reply to comment #9) > actually, on closer examination, that comes out already. When I import your > projects into eclipse I see the warning: > which is precisely the problem here. did you not get the warning? true but I found the IllegalAccessError at runtime misleading...
Does this bug in progress ? I have the same issue with a Hibernate Class and a call pointcut. I use AspectJ Version DEVELOPMENT released on Friday Jul 17, 2009. And with LTW i get this exception (java.lang.IllegalAccessError) : [WebappClassLoader@5060d5] weaveinfo Join point 'method-call(int org.hibernate.t ype.ComponentType.getColumnSpan(org.hibernate.engine.Mapping))' in Type 'org.hib ernate.type.ComponentType' (ComponentType.java:618) advised by around advice fro m 'iep.perf.aspects.abstractAspects.AbstractCPUDurationSimpleMethodWithParentImp l' (AbstractCPUDurationSimpleMethodWithParent.aj:80) [WebappClassLoader@5060d5] weaveinfo Join point 'method-call(java.lang.Object[] org.hibernate.type.ComponentType.getPropertyValues(java.lang.Object, org.hiberna te.EntityMode))' in Type 'org.hibernate.type.ComponentType' (ComponentType.java: 622) advised by around advice from 'iep.perf.aspects.abstractAspects.AbstractCPU DurationSimpleMethodWithParentImpl' (AbstractCPUDurationSimpleMethodWithParent.a j:80) [WebappClassLoader@5060d5] weaveinfo Join point 'method-call(boolean[] org.hiber nate.type.Type.toColumnNullness(java.lang.Object, org.hibernate.engine.Mapping)) ' in Type 'org.hibernate.type.ComponentType' (ComponentType.java:625) advised by around advice from 'iep.perf.aspects.abstractAspects.AbstractCPUDurationSimpleM ethodWithParentImpl' (AbstractCPUDurationSimpleMethodWithParent.aj:80) [WebappClassLoader@5060d5] debug generating class 'org.hibernate.type.ComponentT ype$AjcClosure1' [WebappClassLoader@5060d5] debug generating class 'org.hibernate.type.ComponentT ype$AjcClosure3' [WebappClassLoader@5060d5] debug generating class 'org.hibernate.type.ComponentT ype$AjcClosure5' [WebappClassLoader@5060d5] debug generating class 'org.hibernate.type.ComponentT ype$AjcClosure7' [WebappClassLoader@5060d5] debug generating class 'org.hibernate.type.ComponentT ype$AjcClosure9' [WebappClassLoader@5060d5] debug generating class 'org.hibernate.type.ComponentT ype$AjcClosure11' [WebappClassLoader@5060d5] debug generating class 'org.hibernate.type.ComponentT .... [WebappClassLoader@5060d5] debug generating class 'org.hibernate.type.ComponentT ype$AjcClosure241' [WebappClassLoader@5060d5] debug generating class 'org.hibernate.type.ComponentT ype$AjcClosure243' [WebappClassLoader@5060d5] debug generating class 'org.hibernate.type.ComponentT ype$AjcClosure245' [WebappClassLoader@5060d5] debug generating class 'org.hibernate.type.ComponentT ype$AjcClosure247' [WebappClassLoader@5060d5] debug generating class 'org.hibernate.type.ComponentT ype$AjcClosure249' Initial SessionFactory creation failed. java.lang.IllegalAccessError: tried to a ccess class org.hibernate.tuple.component.ComponentEntityModeToTuplizerMapping f rom class org.hibernate.type.ComponentType [JClassLoader@1551b0] debug weaving 'org.apache.log4j.spi.ThrowableInformation'
this bug is closed as a duplicate of 255643. And is particularly related to weaving javax packages. If you are seeing this problem on a version of AspectJ later than the version in which it claims to be fixed, you should reopen it - or open a new bug if you are not dealing with javax types.
I open a new bug 284224, the IllegalAccessException occurs with a Hibernate Class