user11794991
user11794991

Reputation:

I'm having errors in Drools

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

Answers (1)

fedup
fedup

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

Related Questions