Community
Participate
Working Groups
In aspectj 1.1rc / jdk1.4.1 / linux the following aspect causes an illegal access error: aspect RequestDispatcherAspect { public ServletContext ActionServlet.servletContext = null; public ServletContext ActionServlet.getServletContext() { if ( this.servletContext == null ) { this.servletContext = (ServletContext) Proxy.newProxyInstance( getClass().getClassLoader(), new Class[] { ServletContext.class }, new RequestDispatcherInvocator(super.getServletContext())); } return this.servletContext; } } java.lang.IllegalAccessError: tried to access field org.apache.struts.action.ActionServlet.class$0 from class com.syngenio.struts.performance.measurement.RequestDispatcherAspect at com.syngenio.struts.performance.measurement.RequestDispatcherAspect.ajc$interMethod$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$org_apache_struts_action_ActionServlet$getServletContext(RequestDispatcherAspect.java:42) at org.apache.struts.action.ActionServlet.getServletContext(ActionServlet.java) at javax.servlet.GenericServlet.log(GenericServlet.java:300) at javax.servlet.GenericServlet.init(GenericServlet.java:257) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:918) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:810) at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3279) at org.apache.catalina.core.StandardContext.start(StandardContext.java:3421) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:785) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:478) at org.apache.catalina.core.StandardHost.install(StandardHost.java:738) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:324) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:389) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:232) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:155) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1131) at org.apache.catalina.core.StandardHost.start(StandardHost.java:638) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1123) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:343) at org.apache.catalina.core.StandardService.start(StandardService.java:388) at org.apache.catalina.core.StandardServer.start(StandardServer.java:506) at org.apache.catalina.startup.Catalina.start(Catalina.java:781) at org.apache.catalina.startup.Catalina.execute(Catalina.java:681) at org.apache.catalina.startup.Catalina.process(Catalina.java:179) 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:324) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:243) Jad: import java.lang.reflect.Proxy; import javax.servlet.ServletContext; import org.apache.struts.action.ActionServlet; import org.aspectj.lang.NoAspectBoundException; // Referenced classes of package com.syngenio.struts.performance.measurement: // RequestDispatcherInvocator public class RequestDispatcherAspect { RequestDispatcherAspect() { } public static void ajc$interFieldInit$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$org_apache_struts_action_ActionServlet$servletContext(ActionServlet arg0) { arg0.ajc$interField$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$servletContext = null; } public static ServletContext ajc$interFieldGetDispatch$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$org_apache_struts_action_ActionServlet$servletContext(ActionServlet arg0) { return arg0.ajc$interField$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$servletContext; } public static void ajc$interFieldSetDispatch$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$org_apache_struts_action_ActionServlet$servletContext(ActionServlet arg0, ServletContext arg1) { arg0.ajc$interField$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$servletContext = arg1; } public static ServletContext ajc$interMethod$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$org_apache_struts_action_ActionServlet$getServletContext(ActionServlet arg0) { if(ajc$interFieldGetDispatch$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$org_apache_struts_action_ActionServlet$servletContext(arg0) != null) goto _L2; else goto _L1 _L1: arg0; arg0.getClass().getClassLoader(); Class aclass[] = new Class[1]; aclass; aclass; 0; ActionServlet.class$0; if(ActionServlet.class$0 != null) goto _L4; else goto _L3 _L3: JVM INSTR pop ; ActionServlet.class$0 = Class.forName("javax.servlet.ServletContext"); goto _L4 JVM INSTR new #60 <Class NoClassDefFoundError>; getMessage(); NoClassDefFoundError(); throw ; _L4: JVM INSTR aastore ; new RequestDispatcherInvocator(arg0.ajc$superDispatch$org_apache_struts_action_ActionServlet$getServletContext()); Proxy.newProxyInstance(); (ServletContext); ajc$interFieldSetDispatch$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$org_apache_struts_action_ActionServlet$servletContext(); _L2: return ajc$interFieldGetDispatch$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$org_apache_struts_action_ActionServlet$servletContext(arg0); } public static ServletContext ajc$interMethodDispatch1$com_syngenio_struts_performance_measurement_RequestDispatcherAspect$org_apache_struts_action_ActionServlet$getServletContext(ActionServlet arg0) { return arg0.getServletContext(); } public static RequestDispatcherAspect aspectOf() { ajc$perSingletonInstance; if(ajc$perSingletonInstance == null) goto _L2; else goto _L1 _L1: return; _L2: throw new NoAspectBoundException(); } public static boolean hasAspect() { return ajc$perSingletonInstance != null; } private static void ajc$postClinit() { ajc$perSingletonInstance = new RequestDispatcherAspect(); } public static final RequestDispatcherAspect ajc$perSingletonInstance; static { ajc$postClinit(); } }
Raising priority to make sure this is fixed. It would help a lot if you could provide a small self-contained test case with 1-2 source files that would reproduce this bug.
This has been isolated to be a result of use .class in an introduction that affects a type in a different package from the aspect. This is now fixed in the current tree with a test in bugs/interSpecials.