[ https://issues.apache.org/jira/browse/WW-5005?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16748544#comment-16748544 ]
Sebastian Götz commented on WW-5005: ------------------------------------ As we compile with JDK 11 already (class version 55) we get a lot of these exceptions (using 2.5.20): {{ java.lang.IllegalArgumentException}} {{ at org.objectweb.asm.ClassReader.<init>(Unknown Source)}} {{ at org.objectweb.asm.ClassReader.<init>(Unknown Source)}} {{ at org.objectweb.asm.ClassReader.<init>(Unknown Source)}} {{ at org.apache.struts2.convention.DefaultClassFinder.readClassDef(DefaultClassFinder.java:461)}} {{ at org.apache.struts2.convention.DefaultClassFinder.<init>(DefaultClassFinder.java:93)}} {{ at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildClassFinder(PackageBasedActionConfigBuilder.java:395)}} {{ at org.apache.struts2.convention.PackageBasedActionConfigBuilder.findActions(PackageBasedActionConfigBuilder.java:377)}} {{ at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:333)}} {{ at org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:52)}} {{ at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:206)}} {{ at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66)}} {{ at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:957)}} {{ at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:463)}} {{ at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:496)}} {{ at org.apache.struts2.dispatcher.InitOperations.initDispatcher(InitOperations.java:73)}} {{ at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:61)}} {{ at eu.inform.servlet.context.URIExcludeFilter.init(URIExcludeFilter.java:37)}} {{ at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:270)}} {{ at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:251)}} {{ at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:102)}} {{ at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4491)}} {{ at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5135)}} {{ at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)}} {{ at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1432)}} {{ at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1422)}} {{ at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)}} {{ at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)}} {{ at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)}} {{ at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:944)}} {{ at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:831)}} {{ at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)}} {{ at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1432)}} {{ at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1422)}} {{ at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)}} {{ at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)}} {{ at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)}} {{ at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:944)}} {{ at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:261)}} {{ at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)}} {{ at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)}} {{ at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)}} {{ at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:801)}} {{ at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)}} {{ at org.apache.catalina.startup.Catalina.start(Catalina.java:695)}} {{ at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)}} {{ at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)}} {{ at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)}} {{ at java.base/java.lang.reflect.Method.invoke(Method.java:566)}} {{ at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:350)}} {{ at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492)}} I tried to exclude asm 5.2 in favor of 7.0 which works from the dependency resolving side. But the Struts2 ClassVisitor implementation is tied to ASM 5: {{public class InfoBuildingVisitor extends ClassVisitor {}} {{ private Info info;}} {{ private ClassFinder classFinder;}} {{ public InfoBuildingVisitor(ClassFinder classFinder) {}} {{ super(Opcodes.ASM5);}} {{ this.classFinder = classFinder;}} {{ }}} {{...}} {{}}} Therefore this leads to the following problem: {{java.lang.UnsupportedOperationException: This feature requires ASM7}} {{ at org.objectweb.asm.ClassVisitor.visitNestMember(ClassVisitor.java:236)}} {{ at org.objectweb.asm.ClassReader.accept(ClassReader.java:651)}} {{ at org.objectweb.asm.ClassReader.accept(ClassReader.java:391)}} {{ at org.apache.struts2.convention.DefaultClassFinder.readClassDef(DefaultClassFinder.java:462)}} {{ at org.apache.struts2.convention.DefaultClassFinder.<init>(DefaultClassFinder.java:93)}} {{ at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildClassFinder(PackageBasedActionConfigBuilder.java:395)}} {{ at org.apache.struts2.convention.PackageBasedActionConfigBuilder.findActions(PackageBasedActionConfigBuilder.java:377)}} {{ at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:333)}} {{ at org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:52)}} {{ at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:206)}} {{ at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66)}} {{ at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:957)}} {{ at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:463)}} {{ at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:496)}} {{ at org.apache.struts2.dispatcher.InitOperations.initDispatcher(InitOperations.java:73)}} {{ at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:61)}} {{ at eu.inform.servlet.context.URIExcludeFilter.init(URIExcludeFilter.java:37)}} {{ at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:270)}} {{ at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:251)}} {{ at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:102)}} {{ at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4491)}} {{ at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5135)}} {{ at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)}} {{ at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1432)}} {{ at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1422)}} {{ at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)}} {{ at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)}} {{ at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)}} {{ at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:944)}} {{ at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:831)}} {{ at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)}} {{ at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1432)}} {{ at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1422)}} {{ at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)}} {{ at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)}} {{ at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)}} {{ at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:944)}} {{ at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:261)}} {{ at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)}} {{ at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)}} {{ at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)}} {{ at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:801)}} {{ at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)}} {{ at org.apache.catalina.startup.Catalina.start(Catalina.java:695)}} {{ at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)}} {{ at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)}} {{ at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)}} {{ at java.base/java.lang.reflect.Method.invoke(Method.java:566)}} {{ at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:350)}} {{ at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492)}} > Struts2 convention plugin lacks Java 11 support > ----------------------------------------------- > > Key: WW-5005 > URL: https://issues.apache.org/jira/browse/WW-5005 > Project: Struts 2 > Issue Type: New Feature > Components: Plugin - Convention > Affects Versions: 2.5.20, 2.6 > Reporter: Sebastian Götz > Priority: Major > > As discussed in the mailing list, the convention plugin is uncapable of > analysing web applications that have classes compiled with class versions > higher than 52. This blocks users that compile their web app projects with > Java 9, 10 or 11. > Excerpt from the mailing list discussion: > I have taken a look at the struts-2-5-x branch in github. There is a global > property in the {{struts-parent}} of that defines the version for ASM: > {{<asm.version>5.2</asm.version>}} > The {{struts-master}} pom of the current github *master branch* has: > {{<asm.version>7.0</asm.version>}} > But when I look into {{DefaultClassFinder$InfoBuildingVisitor}} class (line > 461) of the *master branch* there is still ASM 5 used: > {{public class InfoBuildingVisitor extends ClassVisitor {}} > {{ private Info info;}} > {{ private ClassFinder classFinder;}} > {{ public InfoBuildingVisitor(ClassFinder classFinder) {}} > *{{super(Opcodes.ASM5);}}* > {{ this.classFinder = classFinder;}} > \{{ }}} > So first step would be to change this coupling to ASM's version 7 API and > check how this affects classes compiled with Java 8 or below. -- This message was sent by Atlassian JIRA (v7.6.3#76005)