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

-- 
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.

Reply via email to