[
https://issues.redhat.com/browse/DROOLS-5650?page=com.atlassian.jira.plug...
]
Mario Fusco commented on DROOLS-5650:
-------------------------------------
[~abhi_tx] I ran our complete test suite (again) against Java 11 and all tests succeeded.
I'm pretty sure we have lot's of test cases using enums and/or inner classes, so I
still don't see how to reproduce this issue. Can you please give me some hints?
UnsupportedOperationException when using enum in Java 11, works fine
in Java 8
------------------------------------------------------------------------------
Key: DROOLS-5650
URL:
https://issues.redhat.com/browse/DROOLS-5650
Project: Drools
Issue Type: Bug
Components: core engine
Affects Versions: 7.43.1.Final
Reporter: Abhi Vuyyuru
Assignee: Mario Fusco
Priority: Major
I am porting an existing application Java 7 to Java 11 (Drools 7.42.0). The application
works as expected if I compile as Java 1.8 and deploy on Java 11 container (Weblogic 14).
But if I compile the same code in Java 11, I get the following error. The only change
between 1.8 and 11 is the java compiler level in Maven pom. I have ASM7 as a dependency in
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)}}}}
I noticed while debugging that this was caused by an "enum" in our code. Drools
works fine if we remove the enum and use constants. The error seems to suggest that this
could happen to any nested classes. Is there a better way to handle this other than
changing our code to remove nested classes and enums?
I see that in the class {{org.drools.core.util.asm.ClassFieldInspector}}, the API is set
to ASM5, but MVEL is expecting ASM7. But not sure why it would work in Java 8 and not in
Java 11. Any suggestions?
{{ClassFieldVisitor(final Class< ? > cls,
final boolean includeFinalMethods,
final ClassFieldInspector inspector) \{
super(Opcodes.ASM5);
this.clazz = cls;
this.includeFinalMethods = includeFinalMethods;
this.inspector = inspector;
}}}
--
This message was sent by Atlassian Jira
(v7.13.8#713008)