Summary: | VerifyError with Java7 but not with Java6 (Problem with StackMapTable) | ||
---|---|---|---|
Product: | [Tools] AspectJ | Reporter: | Thomas Pasch <thomas.pasch> |
Component: | Compiler | Assignee: | aspectj inbox <aspectj-inbox> |
Status: | NEW --- | QA Contact: | |
Severity: | normal | ||
Priority: | P3 | CC: | aclement, k3vlee+eclipse, thomas.pasch |
Version: | 1.7.4 | ||
Target Milestone: | 1.8.0 | ||
Hardware: | PC | ||
OS: | Linux | ||
Whiteboard: | |||
Attachments: |
Description
Thomas Pasch
2013-11-08 03:50:20 EST
Created attachment 237299 [details]
java source code of the impacted class
Created attachment 237300 [details]
stacktrace snipplet from (tomcat) server.log
Created attachment 237301 [details]
corresponding class file of the impacted class (zip, as there are inner classes)
Created attachment 237302 [details]
Disassembled class files (with 'javap -constants -sysinfo -s -p -l -c *.class')
In Java7 it is possible to circumvent the problem with -XX:-UseSplitVerifier . This disables the (new) verifier and still uses the Java6 verifier. However this is not an option with Java8, as -XX:-UseSplitVerifier has been removed from the VM. Believed fixed by 1.8.0.RC3 (same issue as https://bugs.eclipse.org/bugs/show_bug.cgi?id=432714 ) (In reply to Andrew Clement from comment #6) > Believed fixed by 1.8.0.RC3 (same issue as > https://bugs.eclipse.org/bugs/show_bug.cgi?id=432714 ) I don't think that one is fixed. I'm using Java 8 and still have the same problem. But I'm not one hundred percent sure what I have is exactly the same as this bug as my weaveDirectory is ${project.build.directory}/classes not the source directory. I have to do it in order to use AspectJ with Lombok. (Tested with both released and RC3) ================================================== Invocation of init method failed; nested exception is java.lang.VerifyError: Expecting a stackmap frame at branch target 78 Exception Details: Location: com/lckymn/kevin/myapp/core/domain/personal/Address.printDetails(Lcom/lckymn/kevin/myapp/core/domain/personal/AddressDetailGroup;Ljava/util/Map;)Ljava/lang/String; @21: goto Reason: Expected stackmap frame at this location. Bytecode: 0000000: bb00 4959 124b b700 4d4d 2ab6 004e b900 0000010: 5401 003a 04a7 0039 1904 b900 5a01 00c0 0000020: 0060 4e2b 2db6 0062 b900 6602 00c0 006c 0000030: 3a05 2c2d b600 6eb6 0072 1276 b600 722d 0000040: 1905 b600 78b6 0072 127c b600 7257 1904 0000050: b900 7e01 009a ffc3 042c b600 82a2 0012 0000060: 2c2c b600 8205 642c b600 82b6 0086 572c 0000070: 128a b600 7257 2cb6 008c b0 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553) ~[spring-beans-4.0.5.RELEASE.jar:4.0.5.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) ~[spring-beans-4.0.5.RELEASE.jar:4.0.5.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) ~[spring-beans-4.0.5.RELEASE.jar:4.0.5.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) ~[spring-beans-4.0.5.RELEASE.jar:4.0.5.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-4.0.5.RELEASE.jar:4.0.5.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) ~[spring-beans-4.0.5.RELEASE.jar:4.0.5.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) ~[spring-beans-4.0.5.RELEASE.jar:4.0.5.RELEASE] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973) ~[spring-context-4.0.5.RELEASE.jar:4.0.5.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:750) ~[spring-context-4.0.5.RELEASE.jar:4.0.5.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) ~[spring-context-4.0.5.RELEASE.jar:4.0.5.RELEASE] at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403) ~[spring-web-4.0.5.RELEASE.jar:4.0.5.RELEASE] at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) ~[spring-web-4.0.5.RELEASE.jar:4.0.5.RELEASE] at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) [spring-web-4.0.5.RELEASE.jar:4.0.5.RELEASE] at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4973) [catalina.jar:7.0.54] at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467) [catalina.jar:7.0.54] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:7.0.54] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) [catalina.jar:7.0.54] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) [catalina.jar:7.0.54] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_05] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_05] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_05] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_05] Caused by: java.lang.VerifyError: Expecting a stackmap frame at branch target 78 Exception Details: Location: com/lckymn/kevin/myapp/core/domain/personal/Address.printDetails(Lcom/lckymn/kevin/myapp/core/domain/personal/AddressDetailGroup;Ljava/util/Map;)Ljava/lang/String; @21: goto Reason: Expected stackmap frame at this location. Bytecode: 0000000: bb00 4959 124b b700 4d4d 2ab6 004e b900 0000010: 5401 003a 04a7 0039 1904 b900 5a01 00c0 0000020: 0060 4e2b 2db6 0062 b900 6602 00c0 006c 0000030: 3a05 2c2d b600 6eb6 0072 1276 b600 722d 0000040: 1905 b600 78b6 0072 127c b600 7257 1904 0000050: b900 7e01 009a ffc3 042c b600 82a2 0012 0000060: 2c2c b600 8205 642c b600 82b6 0086 572c 0000070: 128a b600 7257 2cb6 008c b0 at java.lang.Class.forName0(Native Method) ~[na:1.8.0_05] at java.lang.Class.forName(Class.java:340) ~[na:1.8.0_05] at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:240) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.buildHibernateConfiguration(EntityManagerFactoryBuilderImpl.java:1112) ~[hibernate-entitymanager-4.3.5.Final.jar:4.3.5.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:846) ~[hibernate-entitymanager-4.3.5.Final.jar:4.3.5.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843) ~[hibernate-entitymanager-4.3.5.Final.jar:4.3.5.Final] at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:397) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842) ~[hibernate-entitymanager-4.3.5.Final.jar:4.3.5.Final] at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152) ~[hibernate-entitymanager-4.3.5.Final.jar:4.3.5.Final] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:336) ~[spring-orm-4.0.5.RELEASE.jar:4.0.5.RELEASE] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318) ~[spring-orm-4.0.5.RELEASE.jar:4.0.5.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612) ~[spring-beans-4.0.5.RELEASE.jar:4.0.5.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549) ~[spring-beans-4.0.5.RELEASE.jar:4.0.5.RELEASE] ... 21 common frames omitted ================================================== 1.8.0 had a number of other issues with stack maps. I recommend you try 1.8.1 that I've just built since it includes quite a few fixes: https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&list_id=9406620&product=AspectJ&query_format=advanced&target_milestone=1.8.1 and updates the internal Java8 to a much more recent Eclipse JDT version. You can access it from our maven repo right now (it will be in central when I get a minute): http://repo.spring.io/release version: 1.8.1 Thank you so much, Andrew. 1.8.1 works! even without updating Eclipse JDT. I think I still need to test more with another project which uses AspectJ a lot more than the one tested, yet it looks good so far. The project I will test with has to be updated to use Java 8, Spring 4 and AspectJ 1.8.1 so I can't do it right now but will probably try next weekend. Thank you. (In reply to Andrew Clement from comment #8) > 1.8.0 had a number of other issues with stack maps. I recommend you try > 1.8.1 that I've just built since it includes quite a few fixes: > > https://bugs.eclipse.org/bugs/buglist. > cgi?bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&list_id=9406620 > &product=AspectJ&query_format=advanced&target_milestone=1.8.1 > > and updates the internal Java8 to a much more recent Eclipse JDT version. > > You can access it from our maven repo right now (it will be in central when > I get a minute): > > http://repo.spring.io/release > > version: 1.8.1 |