Hey guys, I can tell you now that my other problems or not related to the ASM configuration or Java 11. In the Apache JIRA I have created another issues (https://issues.apache.org/jira/browse/WW-5006) which is related to OGNL accessing static fields.
Kind regards, Sebastian Am 24.01.2019 um 12:13 schrieb Yasser Zamani: > Hi Sebastian, thanks again for your time to feed back! It's really a > great help. > > Regarding the web app doesn't work, it always a good practice to enable > devMode and set log mode to warn or at next step to debug. > > Kind Regards. > > On 1/24/2019 2:11 PM, Sebastian Götz wrote: >> Hello Yasser, >> >> I have followed your instructions. The exceptions are gone although my >> webapp does not work either. >> But I need more time to figure out whether this is a general >> compatibility issue between struts2 2.5.2 and 2.5.20 or a matter of the >> Java 11 compiler. >> >> >> Am 23.01.2019 um 08:17 schrieb Yasser Zamani: >>>> -----Original Message----- >>>> From: Sebastian Götz <s.go...@inform-technology.de> >>>> Sent: Thursday, January 17, 2019 4:41 PM >>>> To: user@struts.apache.org >>>> Subject: Re: Java 11 support >>>> >>>> Hi folks, >>>> >>>> it appears that there is some work left in the convention plugin. As I can >>>> see from >>>> my IVY resolve process this plugin drags in asm 5.2. From its sources it >>>> looks like it >>>> supports class version up to 1.8 (class version 52). >>>> As we compile with JDK 11 already (class version 55) we get a lot of these >>>> exceptions: >>>> >>>> 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(DefaultClassFind >>>> er.java:461) >>>> at >>>> org.apache.struts2.convention.DefaultClassFinder.<init>(DefaultClassFinder.java: >>>> 93) >>>> at >>>> org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildClassFind >>>> er(PackageBasedActionConfigBuilder.java:395) >>>> at >>>> org.apache.struts2.convention.PackageBasedActionConfigBuilder.findActions(Pa >>>> ckageBasedActionConfigBuilder.java:377) >>>> at >>>> org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionCo >>>> nfigs(PackageBasedActionConfigBuilder.java:333) >>>> at >>>> org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(Classpat >>>> hPackageProvider.java:52) >>>> at >>>> com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(D >>>> efaultConfiguration.java:206) >>>> at >>>> com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(Con >>>> figurationManager.java:66) >>>> at >>>> org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:957) >>>> at >>>> org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.j >>>> ava:463) >>>> at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:496) >>>> at >>>> org.apache.struts2.dispatcher.InitOperations.initDispatcher(InitOperations.java:7 >>>> 3) >>>> at >>>> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrep >>>> areAndExecuteFilter.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.ja >>>> va:102) >>>> at >>>> org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4491) >>>> at >>>> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:51 >>>> 35) >>>> 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(InlineExecutorServ >>>> ice.java:75) >>>> at >>>> java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorS >>>> ervice.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(InlineExecutorServ >>>> ice.java:75) >>>> at >>>> java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorS >>>> ervice.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(NativeMethodA >>>> ccessorImpl.java:62) >>>> at >>>> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Delegating >>>> MethodAccessorImpl.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 on 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(DefaultClassFind >>>> er.java:462) >>>> at >>>> org.apache.struts2.convention.DefaultClassFinder.<init>(DefaultClassFinder.java: >>>> 93) >>>> at >>>> org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildClassFind >>>> er(PackageBasedActionConfigBuilder.java:395) >>>> at >>>> org.apache.struts2.convention.PackageBasedActionConfigBuilder.findActions(Pa >>>> ckageBasedActionConfigBuilder.java:377) >>>> at >>>> org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionCo >>>> nfigs(PackageBasedActionConfigBuilder.java:333) >>>> at >>>> org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(Classpat >>>> hPackageProvider.java:52) >>>> at >>>> com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(D >>>> efaultConfiguration.java:206) >>>> at >>>> com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(Con >>>> figurationManager.java:66) >>>> at >>>> org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:957) >>>> at >>>> org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.j >>>> ava:463) >>>> at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:496) >>>> at >>>> org.apache.struts2.dispatcher.InitOperations.initDispatcher(InitOperations.java:7 >>>> 3) >>>> at >>>> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrep >>>> areAndExecuteFilter.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.ja >>>> va:102) >>>> at >>>> org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4491) >>>> at >>>> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:51 >>>> 35) >>>> 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(InlineExecutorServ >>>> ice.java:75) >>>> at >>>> java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorS >>>> ervice.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(InlineExecutorServ >>>> ice.java:75) >>>> at >>>> java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorS >>>> ervice.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(NativeMethodA >>>> ccessorImpl.java:62) >>>> at >>>> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Delegating >>>> MethodAccessorImpl.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) >>>> >>>> Can someone verfiy that and propose a fix? >>>> >>> Hi Sebastian, >>> >>> Thank you very much for your explores share! >>> >>> Yes you're right. It seems we should upgrade to ASM7 in 2.5.21 also if it >>> passed all tests as well. And sorry for these troubles above! We missed >>> those because we run our integration tests in struts showcase app only on >>> JDK8 and only with target java 7 (as you discovered). >>> >>> Could you please check if any further issue persists with my following >>> solution (beside your workaround for drop-in ASM7 dependency)? I think >>> "This feature requires ASM7" will vanished with it but I'm not >>> comprehensively sure if any further issue arises after. If so, it would be >>> nice to fix them in 2.5.21 as well (beside asm.version=7.0). >>> >>> The solution (with thanks to Struts awesome design) :) : >>> 1. Copy org.apache.struts2.convention.DefaultClassFinder and paste to >>> your.app.target.package.ASM7DefaultClassFinder. >>> 2. Replace all Opcodes.ASM5 with Opcodes.ASM7 in >>> your.app.target.package.ASM7DefaultClassFinder. >>> 3. Define the new class your.app.target.package.ASM7ClassFinderFactory as >>> below: >>> import com.opensymphony.xwork2.util.finder.ClassFinder; >>> import com.opensymphony.xwork2.util.finder.ClassFinderFactory; >>> import com.opensymphony.xwork2.util.finder.ClassLoaderInterface; >>> import com.opensymphony.xwork2.util.finder.Test; >>> public class ASM7ClassFinderFactory implements ClassFinderFactory { >>> public ClassFinder buildClassFinder(ClassLoaderInterface >>> classLoaderInterface, Collection urls, boolean extractBaseInterfaces, Set >>> protocols, Test classNameFilter) { >>> return new ASM7DefaultClassFinder(classLoaderInterface, urls, >>> extractBaseInterfaces, protocols, classNameFilter); >>> } >>> } >>> 4. Register it in your struts.xml as below: >>> <bean type="com.opensymphony.xwork2.util.finder.ClassFinderFactory" >>> class="your.app.target.package.ASM7ClassFinderFactory" scope="singleton"/> >>> >>> Thanks in advance! >>> >>> Kind Regards. >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org >>> For additional commands, e-mail: user-h...@struts.apache.org > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > For additional commands, e-mail: user-h...@struts.apache.org -- Mit freundlichen Grüßen Sebastian Götz iNFORM Technology GmbH Niederlassung Albstadt Berliner Straße 24 72458 Albstadt-Ebingen Tel: +49 7431 9816090 Fax: +49 7431 9816092 s.go...@inform-technology.de <mailto:s.go...@inform-technology.de> PGP-Fingerabdruck: 8B0F A27C 16E2 1EFA 1323 997F 038A 001A A597 F613 http://www.inform-technology.de/ ***************************************************** Zentrale Stockach: Bodenseeallee 18 D-78333 Stockach Tel: +49 7771 9282 494 ***************************************************** Geschäftsführer: Dipl.-Ing. (FH) Heinz Roth | Handelsregister: HRB 715948, Amtsgericht Freiburg | USt-ID Nr.: DE312290945 Diese E-Mail enthält vertrauliche und/oder rechtlich geschützte Informationen. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie diese Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser Mail ist nicht gestattet. This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorised copying, disclosure or distribution of the material in this e-mail is strictly forbidden.