无法加载drools规则,获取错误:无法解析对象类型
我对drools是个新手,我正在尝试运行hello world,但它总是给我这个错误 packageBuilder中存在一些错误 无法解析对象类型“Messagee”:[Rule name='Hello World']无法加载drools规则,获取错误:无法解析对象类型,drools,Drools,我对drools是个新手,我正在尝试运行hello world,但它总是给我这个错误 packageBuilder中存在一些错误 无法解析对象类型“Messagee”:[Rule name='Hello World'] Exception in thread "main" java.lang.IllegalArgumentException: Could not parse knowledge. at hellodrools.HelloWorldRuleTest.initialiseDrools
Exception in thread "main" java.lang.IllegalArgumentException: Could
not parse knowledge.
at hellodrools.HelloWorldRuleTest.initialiseDrools(HelloWorldRuleTest.java:55)
at hellodrools.HelloWorldRuleTest.main(HelloWorldRuleTest.java:26)
规则编译错误:[规则名称='Hello World']
hellodrools/Message/Rule_Hello_World720710180.java(1:8):
包hellodrools.Message与类型冲突
我的drl文件:
package hellodrools.Message
rule 'Hello World'
when
message:Message (type == 'Hello')
then
message.printMessage();
end
Message.java
package hellodrools;
public class Message{
private String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public void printMessage() {
System.out.println("Type: " + type);
}
}
HelloWorldTestRule.java
package hellodrools;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.drools.core.RuleBase;
import org.drools.core.RuleBaseFactory;
import org.drools.core.StatefulSession;
import org.drools.compiler.compiler.DroolsParserException;
import org.drools.compiler.compiler.PackageBuilder;
import org.drools.compiler.compiler.PackageBuilderErrors;
import hellodrools.Message;
public class HelloWorldRuleTest {
private static RuleBase rbase = RuleBaseFactory.newRuleBase();;
private static PackageBuilder pbuilder = new PackageBuilder();
private static StatefulSession sessionObject;
private static String DRL_FILE = "/helloWorld.drl";
public static void main(String[] args) {
initialiseDrools();
initiliseMessageObject();
runRules();
}
// Method to initialise the package builder and add package to the rule
// base.
private static void initialiseDrools() {
// 1. Read the DRL File and add to package builder
try {
Reader reader = new InputStreamReader(
HelloWorldRuleTest.class.getResourceAsStream(DRL_FILE));
pbuilder.addPackageFromDrl(reader);
} catch (DroolsParserException ex) {
Logger.getLogger(HelloWorldRuleTest.class.getName()).log(
Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(HelloWorldRuleTest.class.getName()).log(
Level.SEVERE, null, ex);
}
// 2. Check for any errors
PackageBuilderErrors errors = pbuilder.getErrors();
if (errors.getErrors().length > 0) {
System.out.println("Some errors exists in packageBuilder");
for (int i = 0; i < errors.getErrors().length; i++) {
System.out.println(errors.getErrors()[i]);
}
throw new IllegalArgumentException("Could not parse knowledge.");
}
// 3. Add package to rule base
try {
rbase.addPackage(pbuilder.getPackage());
} catch (Exception e) {
System.out.println("Error: " + e);
}
}
// Method to insert message object in session
private static void initiliseMessageObject() {
Message msg = new Message();
msg.setType("Hello");
sessionObject = rbase.newStatefulSession();
sessionObject.insert(msg);
}
// Method to fire all rules
private static void runRules() {
sessionObject.fireAllRules();
}
}
包hellodrools;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.io.Reader;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入org.drools.core.RuleBase;
导入org.drools.core.RuleBaseFactory;
导入org.drools.core.StatefulSession;
导入org.drools.compiler.compiler.DroolsParserException;
导入org.drools.compiler.compiler.PackageBuilder;
导入org.drools.compiler.compiler.PackageBuilderErrors;
导入hellodrools.Message;
公共类HelloWorldRuleTest{
私有静态RuleBase rbase=RuleBaseFactory.newRuleBase();;
私有静态PackageBuilder pbuilder=新PackageBuilder();
私有静态状态会话对象;
私有静态字符串DRL_FILE=“/helloWorld.DRL”;
公共静态void main(字符串[]args){
initialiseDrools();
initiliseMessageObject();
运行规则();
}
//方法初始化包生成器并将包添加到规则中
//基地。
私有静态void initialiseDrools(){
//1.读取DRL文件并添加到package builder
试一试{
Reader Reader=新的InputStreamReader(
HelloWorldRuleTest.class.getResourceAsStream(DRL_文件));
pbuilder.addPackageFromDrl(读卡器);
}捕获(DroolsParserException ex){
Logger.getLogger(HelloWorldRuleTest.class.getName()).log(
级别(严重、空、ex);
}捕获(IOEX异常){
Logger.getLogger(HelloWorldRuleTest.class.getName()).log(
级别(严重、空、ex);
}
//2.检查是否有任何错误
PackageBuilderErrors errors=pbuilder.getErrors();
if(errors.getErrors().length>0){
System.out.println(“packageBuilder中存在一些错误”);
for(int i=0;i
尝试更改
包hellodrools.Message
到
包hellodrools
或
修改
消息:消息(类型=='Hello')
到
消息:hellodrools.message(类型='Hello')