Hello and Thank you Sebastian!

Could you please continue with this workaround: downgrade OGNL to 3.1.18.
<dependency>
 <groupId>ognl</groupId>
 <artifactId>ognl</artifactId>
 <version>3.1.18</version>
</dependency>
and report if any further issue emerges? If so it's so great to fix them
as well for 2.5.21. If not, then, it's an another evidence to merge [1],
I think :)

Sincerely Yours,
Yasser.

[1] https://github.com/apache/struts/pull/315

On 1/25/2019 12:20 PM, Sebastian Götz wrote:
> 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
> 

Reply via email to