I am seeing an exception after copying our app from Solaris to Linux.
Caused by: java.lang.VerifyError: (class: ASMAccessorImpl_17883800501688417666490, method: getKnownEgressType signature: ()Ljava/lang/Class;) Illegal type in constant pool
The application uses Java 8 in both environments but throws the exception when starting up on Linux.
Solaris:
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
Linux:
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
Drools version 6.0.1.Final
mvel2-2.1.8.Final.jar
The rules are read from an xls file and contain over 400 rules so it would be impractical to post them here although the same rule sheet is used on both servers.
The stack trace
Caused by: java.lang.VerifyError: (class: ASMAccessorImpl_17883800501688417666490, method: getKnownEgressType signature: ()Ljava/lang/Class;) Illegal type in constant pool
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
at java.lang.Class.getConstructor0(Class.java:3075)
at java.lang.Class.newInstance(Class.java:412)
at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer._initializeAccessor(ASMAccessorOptimizer.java:725)
at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer.compileAccessor(ASMAccessorOptimizer.java:859)
at org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer.optimizeAccessor(ASMAccessorOptimizer.java:243)
at org.mvel2.optimizers.dynamic.DynamicGetAccessor.optimize(DynamicGetAccessor.java:90)
at org.mvel2.optimizers.dynamic.DynamicGetAccessor.getValue(DynamicGetAccessor.java:64)
at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:108)
at org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:42)
at org.mvel2.MVEL.executeExpression(MVEL.java:930)
at org.mvel2.templates.res.CompiledExpressionNode.eval(CompiledExpressionNode.java:45)
at org.mvel2.templates.res.TextNode.eval(TextNode.java:42)
at org.mvel2.templates.res.CompiledForEachNode.eval(CompiledForEachNode.java:114)
at org.mvel2.templates.res.TextNode.eval(TextNode.java:42)
at org.mvel2.templates.res.TerminalNode.eval(TerminalNode.java:35)
at org.mvel2.templates.res.TextNode.eval(TextNode.java:42)
at org.mvel2.templates.res.CompiledIfNode.eval(CompiledIfNode.java:44)
at org.mvel2.templates.res.TextNode.eval(TextNode.java:42)
at org.mvel2.templates.res.CompiledExpressionNode.eval(CompiledExpressionNode.java:46)
at org.mvel2.templates.res.TextNode.eval(TextNode.java:42)
at org.mvel2.templates.TemplateRuntime.execute(TemplateRuntime.java:285)
at org.mvel2.templates.TemplateRuntime.execute(TemplateRuntime.java:247)
at org.mvel2.templates.TemplateRuntime.execute(TemplateRuntime.java:255)
at org.mvel2.templates.TemplateRuntime.execute(TemplateRuntime.java:207)
at org.drools.compiler.rule.builder.dialect.java.JavaRuleBuilderHelper.generateMethodTemplate(JavaRuleBuilderHelper.java:226)
at org.drools.compiler.rule.builder.dialect.asm.AbstractASMConsequenceBuilder.build(AbstractASMConsequenceBuilder.java:24)
at org.drools.compiler.rule.builder.RuleBuilder.build(RuleBuilder.java:109)
at org.drools.compiler.compiler.PackageBuilder.addRule(PackageBuilder.java:3369)
at org.drools.compiler.compiler.PackageBuilder.compileRules(PackageBuilder.java:1093)
at org.drools.compiler.compiler.PackageBuilder.compileAllRules(PackageBuilder.java:972)
at org.drools.compiler.compiler.PackageBuilder.addPackage(PackageBuilder.java:964)
at org.drools.compiler.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:513)
at org.drools.compiler.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:721)
at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:51)
at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:40)
at org.drools.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:34)
at com.itd.cantororderapp.RulesHelper.buildBaseFromDrl(RulesHelper.java:66)
at com.itd.cantororderapp.RulesHelper.compileBaseFromXls(RulesHelper.java:52)
at com.itd.cantororderapp.CantorFixMessageEnricher.<init>(CantorFixMessageEnricher.java:29)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
I used the JVM -noverify option to disable this behavior, for the short term, in order to get the program running in production.