weblogic - 在 Java 11 中使用枚举时出现 UnsupportedOperationException,在 Java 8 中工作正常

标签 weblogic drools java-11

我正在将现有应用程序 Java 7 移植到 Java 11 (Drools 7.42.0)。如果我编译为 Java 1.8 并部署在 Java 11 容器 (Weblogic 14) 上,应用程序将按预期工作。但是,如果我在 Java 11 中编译相同的代码,则会出现以下错误。 1.8 和 11 之间的唯一变化是 Maven pom 中的 java 编译器级别。 我将 ASM7 作为 Maven 的依赖项。

Caused by: java.lang.UnsupportedOperationException: This feature requires ASM7
        at org.mvel2.asm.ClassVisitor.visitNestMember(ClassVisitor.java:236)
        at org.mvel2.asm.ClassReader.accept(ClassReader.java:651)
        at org.mvel2.asm.ClassReader.accept(ClassReader.java:391)
        at org.drools.core.util.asm.ClassFieldInspector.processClassWithByteCode(ClassFieldInspector.java:107)
        at org.drools.core.util.asm.ClassFieldInspector.processClassWithByteCode(ClassFieldInspector.java:114)
        at org.drools.core.util.asm.ClassFieldInspector.<init>(ClassFieldInspector.java:86)
        at org.drools.core.util.asm.ClassFieldInspector.<init>(ClassFieldInspector.java:74)
        at org.drools.core.base.ClassFieldAccessorFactory.getClassFieldInspector(ClassFieldAccessorFactory.java:157)
        at org.drools.core.base.ClassFieldAccessorFactory.getFieldType(ClassFieldAccessorFactory.java:141)
        at org.drools.core.base.ClassFieldAccessorStore.getFieldType(ClassFieldAccessorStore.java:295)
        at org.drools.compiler.rule.builder.PatternBuilder.getValueType(PatternBuilder.java:1079)
        at org.drools.compiler.rule.builder.PatternBuilder.normalizeExpression(PatternBuilder.java:1047)
        at org.drools.compiler.rule.builder.PatternBuilder.buildExpression(PatternBuilder.java:965)
        at org.drools.compiler.rule.builder.PatternBuilder.buildCcdDescr(PatternBuilder.java:942)
        at org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:767)
        at org.drools.compiler.rule.builder.PatternBuilder.processConstraintsAndBinds(PatternBuilder.java:620)
        at org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:187)
        at org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:154)
        at org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:136)
        at org.drools.compiler.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:66)
        at org.drools.compiler.rule.builder.RuleBuilder.build(RuleBuilder.java:107)
        at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.internalAddRule(KnowledgeBuilderImpl.java:1183)
        at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.addRule(KnowledgeBuilderImpl.java:1178)
        at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.lambda$null$3(KnowledgeBuilderImpl.java:1134)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
        at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
        at java.base/java.util.stream.ForEachOps$ForEachTask.compute(ForEachOps.java:290)
        at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:746)

我在调试时注意到这是由我们代码中的“枚举”引起的。如果我们删除枚举并使用常量,Drools 可以正常工作。该错误似乎表明这可能发生在任何嵌套类中。除了更改我们的代码以删除嵌套类和枚举之外,还有更好的方法来处理这个问题吗?

我看到在 org.drools.core.util.asm.ClassFieldInspector 类中,API 设置为 ASM5,但 MVEL 需要 ASM7。但不确定为什么它可以在 Java 8 而不是 Java 11 中工作。有什么建议吗?

ClassFieldVisitor(final Class< ? > cls,
                  final boolean includeFinalMethods,
                  final ClassFieldInspector inspector) {
    super(Opcodes.ASM5);
    this.clazz = cls;
    this.includeFinalMethods = includeFinalMethods;
    this.inspector = inspector;
}

最佳答案

免责声明:我是 Drools 开发人员之一

这很有趣,因为我们可能不会发出有效的 ASM 代码。 请在 https://issues.redhat.com 上提交错误以便我们修复它

非常感谢

关于weblogic - 在 Java 11 中使用枚举时出现 UnsupportedOperationException,在 Java 8 中工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63909071/

相关文章:

java - 带有 Java 11 : Unable to resolve persistence unit root URL 的 Spring Boot 2.1

java - 在重新启动 WebLogic 之前不会生成日志文件

java - weblogic 上的 JAXWS Client ServiceConfigurationError

tomcat - 我在使用 Drools 和 Tomcat 6 重新部署应用程序时遇到问题

regex - 流口水的正则表达式

java - 是否可以导入两个具有相同包的 jar ?

java - 更改日志记录级别后,什么会捕获我的日志文件?

java - 使用Weblogic 12c,给出警告警告日志管理BEA-170011该服务器上的LogBroadcaster未能

linux - 如何停止发送已发送的日志错误邮件,只发送新的错误

java - 将对象传递给 DROOLS