Reputation:
I'm working on Drools on eclipse, the code was working properly and suddenly I get these errors. I tried reinstalling the drools plugins, and uninstall Eclipse, I updated JRE, and the JDK, and nothing works
DRL file
import com.binod.DroolsDemo.AssessmentLevel
rule "Level A1"
when
studentObject: AssessmentLevel(assessment=="Null")
then
studentObject.setLevel("A1");
System.out.println("Student Level is A1");
end
rule "Level A2"
when
studentObject: AssessmentLevel(assessment=="[1-10]")
then
studentObject.setLevel("A2");
System.out.println("Student Level is A2");
end
rule "Level B1"
when
studentObject: AssessmentLevel(assessment=="[1-10] AND [11-15]")
then
studentObject.setLevel("B1");
System.out.println("Student Level is B1");
end
AssemsentLevel.java
package com.binod.DroolsDemo;
public class AssessmentLevel {
private String assessment;
private String level;
private String personalizedexercises;
public String getAssessment() {
return assessment;
}
public void setAssessment(String assessment) {
this.assessment = assessment;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
public String getPersonalizedexercises() {
return personalizedexercises;
}
public void setPersonalizedexercises(String personalizedexercises) {
this.personalizedexercises = personalizedexercises;
}
}
Test.java
package com.binod.DroolsDemo;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import org.drools.compiler.compiler.DroolsParserException;
import org.drools.compiler.compiler.PackageBuilder;
import org.drools.core.RuleBase;
import org.drools.core.RuleBaseFactory;
import org.drools.core.WorkingMemory;
public class DemoTest {
public static void main(String[] args) throws DroolsParserException, IOException {
DemoTest client = new DemoTest();
client.execteRule();
}
public void execteRule() throws DroolsParserException, IOException{
PackageBuilder builder = new PackageBuilder();
String ruleFile = "/rules.drl";
InputStream resourceAsStream = getClass().getResourceAsStream(ruleFile);
Reader ruleReader = new InputStreamReader(resourceAsStream);
builder.addPackageFromDrl(ruleReader);
org.drools.core.rule.Package rulePackage = builder.getPackage();
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage(rulePackage);
WorkingMemory workingMemory = ruleBase.newStatefulSession();
AssessmentLevel assessemntLevel = new AssessmentLevel();
assessemntLevel.setAssessment("[1-10] AND [11-15] AND [16-20] AND [21-25] AND [26-30] AND [31-35]");
workingMemory.insert(assessemntLevel);
workingMemory.fireAllRules();
System.out.println("\n Assessment Score is "+assessemntLevel.getAssessment());
/*+" \n Student is in Level "
+assessemntLevel.getLevel()+" \n And the excercises include "
+assessemntLevel.getPersonalizedexercises()*/
}
}
Error report
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.drools.core.rule.builder.dialect.asm.ClassGenerator (file:/C:/Users/bojaj/.m2/repository/org/drools/drools-core/6.0.1.Final/drools-core-6.0.1.Final.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int)
WARNING: Please consider reporting this to the maintainers of org.drools.core.rule.builder.dialect.asm.ClassGenerator
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Exception in thread "main" java.lang.RuntimeException: wrong class format
at org.drools.compiler.commons.jci.compilers.EclipseJavaCompiler$2.findType(EclipseJavaCompiler.java:279)
at org.drools.compiler.commons.jci.compilers.EclipseJavaCompiler$2.findType(EclipseJavaCompiler.java:219)
at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:113)
at org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(UnresolvedReferenceBinding.java:49)
at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType(BinaryTypeBinding.java:122)
at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.getType(LookupEnvironment.java:1160)
at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.getResolvedType(LookupEnvironment.java:1091)
at org.eclipse.jdt.internal.compiler.lookup.Scope.getJavaLangString(Scope.java:2288)
at org.eclipse.jdt.internal.compiler.ast.StringLiteral.literalType(StringLiteral.java:72)
at org.eclipse.jdt.internal.compiler.ast.Literal.resolveType(Literal.java:45)
at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:374)
at org.eclipse.jdt.internal.compiler.ast.Expression.resolve(Expression.java:947)
at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:456)
at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:252)
at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:415)
at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1148)
at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1258)
at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:539)
at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:763)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:468)
at org.drools.compiler.commons.jci.compilers.EclipseJavaCompiler.compile(EclipseJavaCompiler.java:405)
at org.drools.compiler.commons.jci.compilers.AbstractJavaCompiler.compile(AbstractJavaCompiler.java:49)
at org.drools.compiler.rule.builder.dialect.java.JavaDialect.compileAll(JavaDialect.java:405)
at org.drools.compiler.compiler.DialectCompiletimeRegistry.compileAll(DialectCompiletimeRegistry.java:46)
at org.drools.compiler.compiler.PackageRegistry.compileAll(PackageRegistry.java:110)
at org.drools.compiler.compiler.PackageBuilder.compileAll(PackageBuilder.java:1334)
at org.drools.compiler.compiler.PackageBuilder.compileAllRules(PackageBuilder.java:975)
at org.drools.compiler.compiler.PackageBuilder.addPackage(PackageBuilder.java:964)
at org.drools.compiler.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:455)
at org.drools.compiler.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:431)
at com.binod.DroolsDemo.DemoTest.execteRule(DemoTest.java:29)
at com.binod.DroolsDemo.DemoTest.main(DemoTest.java:20)
Caused by: org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
at org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader.<init>(ClassFileReader.java:372)
at org.drools.compiler.commons.jci.compilers.EclipseJavaCompiler$2.createNameEnvironmentAnswer(EclipseJavaCompiler.java:303)
at org.drools.compiler.commons.jci.compilers.EclipseJavaCompiler$2.findType(EclipseJavaCompiler.java:274)
... 31 more
Please help
Upvotes: 1
Views: 2088
Reputation: 1259
You are using an older release of Drools. Maybe you are compiling your Java model classes with a more recent JVM version than release 6 of Drools can handle. I use Java 11 and Drools 7.39.0.Final and it works as expected.
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>7.39.0.Final</version>
</dependency>
Upvotes: 1