使Struts 2与Java 8兼容(旧版ASM 3)

ala*_*mar 8 java struts2 java-8

我正在使用带有Convention插件的Struts 2.Struts 2依赖于与Java 8不兼容的ASM 3.3.它无法发现包含lambda或方法引用的动作类.

例外:

2014-06-27 18:47:32,958 ERROR main/com.opensymphony.xwork2.util.finder.ClassFinder: Unable to read class [my.project.Action]
java.lang.ArrayIndexOutOfBoundsException: 30305
    at org.objectweb.asm.ClassReader.readClass(Unknown Source)
    at org.objectweb.asm.ClassReader.accept(Unknown Source)
    at org.objectweb.asm.ClassReader.accept(Unknown Source)
    at com.opensymphony.xwork2.util.finder.ClassFinder.readClassDef(ClassFinder.java:717)
    at com.opensymphony.xwork2.util.finder.ClassFinder.<init>(ClassFinder.java:112)
    at org.apache.struts2.convention.PackageBasedActionConfigBuilder.findActions(PackageBasedActionConfigBuilder.java:390)
    at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:347)
    at org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:53)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:268)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:67)
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:445)
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:489)
    at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:57)
Run Code Online (Sandbox Code Playgroud)

ASM 5似乎支持Java 8,但Struts与二进制兼容.

这个问题有没有解决方法?现在我正在考虑修补Struts/XWork.

ala*_*mar 5

猜猜是什么-我必须修补这个东西。

要点:https : //gist.github.com/anonymous/017b23c1d7c97c37d167

  • 大!非常感谢!相关JIRA票证https://issues.apache.org/jira/browse/WW-4347 (2认同)