Rule Compilation error 问题

db66239192 2009-12-22 10:46:56
请问下我这个问题该怎么解决?。实在看不出来时哪问题了。。问题描述:org.drools.rule.InvalidRulePackage: Rule Compilation error : [Rule name=lady, agendaGroup=MAIN, salience=0, no-loop=false]
dataRules/java/Rule_lady_0.java (7:332) : String literal is not properly closed by a double-quote
dataRules.java.RulesEngine.<init>(RulesEngine.java:42)
dataRules.java.RulesEngineBo.getRulesEngineBo(RulesEngineBo.java:36)
com.gomai.action.DbanalyseresultAction.addDbanalyseresult(DbanalyseresultAction.java:80)
对应的代码:1。#created on: 2009-12-18
package dataRules.java

import dataRules.java.RulesResult;

#判断性别的正确性
rule "lady"

when
s : RulesResult( sex > 1 || sex < 0, sex : sex )
then
System.out.println( "这是一个错误的性别表示,超出表示范围!" );
//System.out.println( "Name: "+s.getName() );
System.out.println( "Sex: "+s.getSex() );
s.setExplain("超出了取值范围");
s.setResult(0);
s.setVerifyTpye(1);
s.setSex( 1 );

end
2.private RulesEngine rulesEngine;

@SuppressWarnings("unchecked")
public RulesResult getRulesEngineBo(Map map) {

final RulesResult rulesResult = new RulesResult();

// Student student = new Student();

String rulesFile = (String) map.get("rulesFile");

System.out.println("rulesFile = " + rulesFile);
// map.get(sex);
// int sex = Integer.parseInt(map.get("sex").toString());
int sex = (Integer) map.get("sex");
System.out.println("sex....=="+sex);
rulesResult.setSex(sex);

System.out.println("explain = " + rulesResult.getExplain());
System.out.println("sex = " + rulesResult.getSex());

// RulesEngine rulesEngine = new RulesEngine();
//上边的System.out.println都能打印出来值,下面的就运行部下去了!!!!!!!!!!!!!!!!!!
rulesEngine = new RulesEngine(rulesFile);
System.out.println("rulesEngine2222==="+rulesEngine);
rulesEngine.executeRules(new WorkingEnvironmentCallback() {
public void initEnvironment(WorkingMemory workingMemory) {
workingMemory.insert(rulesResult);
};
});
3.public RulesEngine(String rulesFile) throws RulesEngineException{
//super();
try {
System.out.println("rulesFile111111111111 = " + rulesFile);
// Read in the rules source file
Reader source = new InputStreamReader(RulesEngine.class.
getResourceAsStream("/dataRules/rules/" + rulesFile));

System.out.println("rulesFile333333333333 = " + rulesFile);
System.out.println("rulesFile333333333333 = " + source);

PackageBuilder builder = new PackageBuilder();
System.out.println("rulesFile44444444444444444 = " + rulesFile);

// This will parse and compile in one step
builder.addPackageFromDrl(source);

// Get the compiled package
Package pkg = builder.getPackage();
System.out.println("pkg==="+pkg);
System.out.println("rulesFile = " + rulesFile);
// Add the package to a rulebase (deploy the rule package).
rules = RuleBaseFactory.newRuleBase();
System.out.println("55555555555555555555555555"+pkg);
rules.addPackage(pkg);//上边的代码也都能打印出来,但在本行就程序运行不下去;不知道为什么?
} catch (Exception e) {
throw new RulesEngineException(
"Could not load/compile rules file: " + rulesFile, e);
}
求教高手,谢谢!
...全文
484 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
db66239192 2009-12-23
  • 打赏
  • 举报
回复
Sorry 下面2个}都是我没复制上来不是这个错,如果没写}Eclipse就报错了。。。
是String literal is not properly closed by a double-quote
字符串文字不正确的双引号封闭
JavaAlpha 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 crazylaa 的回复:]
String literal is not properly closed by a double-quote
都告诉你了,某些地方的括号没有匹配成对!
public RulesResult getRulesEngineBo(Map map) {
这一段最后少了个 }
下面那段一样少了个 }
[/Quote]

写代码要仔细一点。出现异常慢慢找一下。就会找到了。
crazylaa 2009-12-23
  • 打赏
  • 举报
回复
看来不是代码问题,根源在这里:
Could not load/compile rules file: StudentSex.drl
是否这个文件里面存在配置不对,仔细检查下。。
db66239192 2009-12-23
  • 打赏
  • 举报
回复
谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!其中org.drools.common.AbstractRuleBase.addPackage(AbstractRuleBase.java:394)
dataRules.java.RulesEngine.<init>(RulesEngine.java:42)
dataRules.java.RulesEngineBo.getRulesEngineBo(RulesEngineBo.java:35)
com.gomai.action.DbanalyseresultAction.addDbanalyseresult(DbanalyseresultAction.java:100)
对应RulesEngine.java rules.addPackage(pkg);
RulesEngineBo.java:35 rulesEngine = new RulesEngine(rulesFile);
DbanalyseresultAction.java:100 rulesResult = rulesEngineBo.getRulesEngineBo(map);

dataRules.java.RulesEngineException: Could not load/compile rules file: StudentSex.drl
dataRules.java.RulesEngine.<init>(RulesEngine.java:44)
dataRules.java.RulesEngineBo.getRulesEngineBo(RulesEngineBo.java:35)
com.gomai.action.DbanalyseresultAction.addDbanalyseresult(DbanalyseresultAction.java:100)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)


root cause

org.drools.rule.InvalidRulePackage: Rule Compilation error : [Rule name=lady, agendaGroup=MAIN, salience=0, no-loop=false]
dataRules/java/Rule_lady_0.java (7:332) : String literal is not properly closed by a double-quote

org.drools.rule.Package.checkValidity(Package.java:424)
org.drools.common.AbstractRuleBase.addPackage(AbstractRuleBase.java:394)
dataRules.java.RulesEngine.<init>(RulesEngine.java:42)
dataRules.java.RulesEngineBo.getRulesEngineBo(RulesEngineBo.java:35)
com.gomai.action.DbanalyseresultAction.addDbanalyseresult(DbanalyseresultAction.java:100)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
crazylaa 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 db66239192 的回复:]
Sorry 下面2个}都是我没复制上来不是这个错,如果没写}Eclipse就报错了。。。
是String literal is not properly closed by a double-quote
字符串文字不正确的双引号封闭
[/Quote]

好吧,那么请把异常发出来。没有异常就把出问题的那段try、catch异常发出来
crazylaa 2009-12-23
  • 打赏
  • 举报
回复
String literal is not properly closed by a double-quote
都告诉你了,某些地方的括号没有匹配成对!
public RulesResult getRulesEngineBo(Map map) {
这一段最后少了个 }
下面那段一样少了个 }

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧