请问下我这个问题该怎么解决?。实在看不出来时哪问题了。。问题描述: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.javaimport 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);
}
求教高手,谢谢!

解决方案 »

  1.   

    String literal is not properly closed by a double-quote 
    都告诉你了,某些地方的括号没有匹配成对!
    public RulesResult getRulesEngineBo(Map map) {
    这一段最后少了个 }
    下面那段一样少了个 }
      

  2.   

    Sorry 下面2个}都是我没复制上来不是这个错,如果没写}Eclipse就报错了
    是String literal is not properly closed by a double-quote 
    字符串文字不正确的双引号封闭
      

  3.   


    好吧,那么请把异常发出来。没有异常就把出问题的那段try、catch异常发出来
      

  4.   

    谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!其中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)
      

  5.   

    看来不是代码问题,根源在这里:
    Could not load/compile rules file: StudentSex.drl 
    是否这个文件里面存在配置不对,仔细检查下。。