Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java drools规则语法中的异常_Java_Drools - Fatal编程技术网

Java drools规则语法中的异常

Java drools规则语法中的异常,java,drools,Java,Drools,我正在尝试使用两个不同的POJO类编写drool规则,如下所示 for (int i = 0; i < 5; i++) { dbRules = new DbRules(i, "Rule Name - " + i, " $mdmContractHeader : MdmContractHeader(); $contractHeader1 : ContractHeader (supplierName==$mdmContractHeader.supplierName);

我正在尝试使用两个不同的POJO类编写drool规则,如下所示

  for (int i = 0; i < 5; i++) {

        dbRules = new DbRules(i, "Rule Name - " + i, "  $mdmContractHeader : MdmContractHeader();  $contractHeader1 : ContractHeader (supplierName==$mdmContractHeader.supplierName); "
                + " &&  contractHeader:ContractHeader(supplierId >= 100)",
                "System.out.print(\"Test, Drools rule - " + i
                        + ".! \"); System.out.println(contractHeader.getSupplierName());");
        list.add(dbRules);
    }
我已经更新了StringBuffer中的内容,如下所示,但仍然得到相同的异常

 import com.model.ContractHeader; 
 import com.model.MdmContractHeader; 
 import static com.service.SupplierService.isRuleAppliesToSupplier;  
 rule "Rule Name - 0" 
  when 
 cHeader:ContractHeader() 
 eval(isRuleAppliesToSupplier((cHeader.getSupplierName()) , 0 )) && 
 ( 
 $mdmContractHeader:MdmContractHeader($s : supplierName) 
 $myContractHeader:ContractHeader(supplierName == $s) 
  contractHeader:ContractHeader(supplierId >= 100)  
 ) 
  then 
 System.out.print("Test, Drools rule - 0.! "); System.out.println(contractHeader.getSupplierName()); 
 end; 
例外情况是:

Exception in thread "main" java.lang.RuntimeException: Unable to get KieModule, Errors Existed: Error Messages:
Message [id=1, kieBase=defaultKieBase, level=ERROR, path=rules/Sample.drl, line=10, column=0
   text=[ERR 102] Line 10:1 mismatched input '$myContractHeader' in rule "Rule Name - 0"]
Message [id=2, kieBase=defaultKieBase, level=ERROR, path=rules/Sample.drl, line=0, column=0
   text=Parser returned a null Package]
---

有一些事情可以让你的规则看起来更好:

  • 删除
    在第一个模式之后和
    结束
    关键字之后
  • 在规则名称之后,以及在
    when
    then
    关键字之后添加
    \n
  • 在每个模式之后添加一个
    \n
  • 不要在模式之间使用不必要的
    &&
在这些更改之后,您的规则应该如下所示:

rule "Rule Name - 0" 
when 
  cHeader:ContractHeader() 
  eval(isRuleAppliesToSupplier((cHeader.getSupplierName()) , 0 )) && 
  (  
    $mdmContractHeader : MdmContractHeader( $s : supplierName )  
    $contractHeader1 : ContractHeader ( supplierName == $s ) 
    contractHeader: ContractHeader(supplierId >= 100)
  ) 
then 
  System.out.print("Test, Drools rule - 0.! "); System.out.println(contractHeader.getSupplierName()); 
end; 
我猜是由于
MdmContractHeader()
模式后缺少
\n
导致的错误


希望能有所帮助,

您可以做一些事情来让您的规则看起来更好:

  • 删除
    在第一个模式之后和
    结束
    关键字之后
  • 在规则名称之后,以及在
    when
    then
    关键字之后添加
    \n
  • 在每个模式之后添加一个
    \n
  • 不要在模式之间使用不必要的
    &&
在这些更改之后,您的规则应该如下所示:

rule "Rule Name - 0" 
when 
  cHeader:ContractHeader() 
  eval(isRuleAppliesToSupplier((cHeader.getSupplierName()) , 0 )) && 
  (  
    $mdmContractHeader : MdmContractHeader( $s : supplierName )  
    $contractHeader1 : ContractHeader ( supplierName == $s ) 
    contractHeader: ContractHeader(supplierId >= 100)
  ) 
then 
  System.out.print("Test, Drools rule - 0.! "); System.out.println(contractHeader.getSupplierName()); 
end; 
我猜是由于
MdmContractHeader()
模式后缺少
\n
导致的错误


希望有帮助,

你能分享一下最终的DRL是什么样子吗?我正在尝试创建一个带有字符串缓冲区的规则,其中lhs和rhs是从db中提取的。在上面的代码中,DbRules是pojo类,它具有rulename、lhs和rhs。我在生成lhs部件时面临语法问题。在Lhs部分中,我尝试创建两个pojo类的对象,并比较供应商名称数据。StringBuffer ruleBuffer=new StringBuffer();ruleBuffer.append(“导入com.model.ContractHeader;导入com.model.MdmContractHeader;导入静态com.service.SupplierService.isRuleAppliesToSupplier;”;对于(DbRules规则:dbRuleList){ruleBuffer.append(“rule\”“+rule.getRuleName()+””当cHeader:ContractHeader()时;eval(isRuleAppliesToSupplier((cHeader.getSupplierName()),“+rule.getRuleId()+”)和(“+rule.getLhs()+”),然后“+rule.getRhs()+”结束;”)请提供您的StringBuffer@EstebanAliverti我已经更新了问题。请看一看。你能分享一下最终的DRL是什么样子吗?我正在尝试用字符串缓冲区创建规则,其中lhs和rhs从db中提取。在上面的代码中,DbRules是pojo类,它具有rulename、lhs和rhs。我在生成lhs部件时面临语法问题。在Lhs部分中,我尝试创建两个pojo类的对象,并比较供应商名称数据。StringBuffer ruleBuffer=new StringBuffer();ruleBuffer.append(“导入com.model.ContractHeader;导入com.model.MdmContractHeader;导入静态com.service.SupplierService.isRuleAppliesToSupplier;”;对于(DbRules规则:dbRuleList){ruleBuffer.append(“rule\”“+rule.getRuleName()+””当cHeader:ContractHeader()时;eval(isRuleAppliesToSupplier((cHeader.getSupplierName()),“+rule.getRuleId()+”)和(“+rule.getLhs()+”),然后“+rule.getRhs()+”结束;”)请提供您的StringBuffer@EstebanAliverti我已经更新了问题。请看一看。我已经更新了规则(有问题),但仍然得到相同的错误。您可以尝试删除
求值后的
&&
和包装以下模式的括号吗?如果有效,尝试用
关键字替换
&&
。我已经更新了规则(有问题),但仍然得到相同的错误。您可以尝试删除
评估后的
&&
和包装以下模式的括号吗?如果有效,尝试用
关键字替换
&&