Drools规则模板错误[错误:未关闭@if{}块。使用占位符时应为@end{}]

Drools规则模板错误[错误:未关闭@if{}块。使用占位符时应为@end{}],drools,redhat-decision-manager,Drools,Redhat Decision Manager,如果在子类集合列表中使用占位符,则无法编译drools规则模板 我有一个简单的类结构 public class Parent { private List<Child> children; } public class Child { private String gender; } 模板中硬编码为“男性”时无问题 Parent($children: children) Child(gender == "MALE") from $children

如果在子类集合列表中使用占位符,则无法编译drools规则模板

我有一个简单的类结构

public class Parent {
   private List<Child> children;
}
public class Child {
   private String gender;
}
模板中硬编码为“男性”时无问题

Parent($children: children)
Child(gender == "MALE") from $children
有什么想法吗?谢谢你的帮助

完整错误堆栈跟踪:

[Line: 42, Column: 0]
    at org.drools.core.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
    at org.drools.core.common.DefaultAgenda.handleException(DefaultAgenda.java:1291)
    at org.drools.core.phreak.RuleExecutor.innerFireActivation(RuleExecutor.java:442)
    at org.drools.core.phreak.RuleExecutor.fireActivation(RuleExecutor.java:380)
    at org.drools.core.phreak.RuleExecutor.fire(RuleExecutor.java:136)
    at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:89)
    at org.drools.core.concurrent.AbstractRuleEvaluator.internalEvaluateAndFire(AbstractRuleEvaluator.java:33)
    at org.drools.core.concurrent.SequentialRuleEvaluator.evaluateAndFire(SequentialRuleEvaluator.java:43)
    at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1101)
    at org.drools.core.common.DefaultAgenda.internalFireAllRules(DefaultAgenda.java:1048)
    at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1040)
    at org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1341)
    at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1332)
    at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1316)
    at org.drools.template.parser.TemplateDataListener.finishSheet(TemplateDataListener.java:158)
    at org.drools.decisiontable.parser.xls.ExcelParser.finishSheet(ExcelParser.java:277)
    at org.drools.decisiontable.parser.xls.ExcelParser.processSheet(ExcelParser.java:212)
    at org.drools.decisiontable.parser.xls.ExcelParser.parseWorkbook(ExcelParser.java:105)
    at org.drools.decisiontable.parser.xls.ExcelParser.parseFile(ExcelParser.java:84)
    at org.drools.decisiontable.ExternalSpreadsheetCompiler.compile(ExternalSpreadsheetCompiler.java:140)
    at org.drools.decisiontable.ExternalSpreadsheetCompiler.compile(ExternalSpreadsheetCompiler.java:168)
    at org.drools.decisiontable.ExternalSpreadsheetCompiler.compile(ExternalSpreadsheetCompiler.java:99)
    at org.drools.decisiontable.ExternalSpreadsheetCompiler.compile(ExternalSpreadsheetCompiler.java:85)
    at com.dhl.gssdemo.config.SpringDroolsConfig.addTemplateContent(SpringDroolsConfig.java:112)
    at com.dhl.gssdemo.config.SpringDroolsConfig.classpathDrlKieBase(SpringDroolsConfig.java:102)
    at com.dhl.gssdemo.config.SpringDroolsConfig$$EnhancerBySpringCGLIB$$583d8208.CGLIB$classpathDrlKieBase$0(<generated>)
    at com.dhl.gssdemo.config.SpringDroolsConfig$$EnhancerBySpringCGLIB$$583d8208$$FastClassBySpringCGLIB$$25a5fef6.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
    at com.dhl.gssdemo.config.SpringDroolsConfig$$EnhancerBySpringCGLIB$$583d8208.classpathDrlKieBase(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
    ... 52 common frames omitted
Caused by: java.lang.RuntimeException: [Error: unclosed @if{} block. expected @end{}]
[行:42,列:0]
位于org.drools.core.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
位于org.drools.core.common.DefaultAgenda.handleException(DefaultAgenda.java:1291)
位于org.drools.core.phreak.RuleExecutor.innerFireActivation(RuleExecutor.java:442)
位于org.drools.core.phreak.RuleExecutor.fireActivation(RuleExecutor.java:380)
位于org.drools.core.phreak.RuleExecutor.fire(RuleExecutor.java:136)
位于org.drools.core.phreak.RuleExecutor.evaluateneworkandfire(RuleExecutor.java:89)
位于org.drools.core.concurrent.AbstractRuleEvaluator.internalEvaluateAndFire(AbstractRuleEvaluator.java:33)
位于org.drools.core.concurrent.SequentialRuleEvaluator.evaluateAndFire(SequentialRuleEvaluator.java:43)
位于org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1101)
位于org.drools.core.common.DefaultAgenda.internalFireAllRules(DefaultAgenda.java:1048)
位于org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1040)
位于org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1341)
位于org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1332)
位于org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1316)
位于org.drools.template.parser.TemplateDataListener.finishSheet(TemplateDataListener.java:158)
位于org.drools.decisiontable.parser.xls.ExcelParser.finishSheet(ExcelParser.java:277)
位于org.drools.decisiontable.parser.xls.ExcelParser.processSheet(ExcelParser.java:212)
位于org.drools.decisiontable.parser.xls.ExcelParser.parseWorkbook(ExcelParser.java:105)
位于org.drools.decisiontable.parser.xls.ExcelParser.parseFile(ExcelParser.java:84)
位于org.drools.decisiontable.ExternalSpreadsheetCompiler.compile(ExternalSpreadsheetCompiler.java:140)
位于org.drools.decisiontable.ExternalSpreadsheetCompiler.compile(ExternalSpreadsheetCompiler.java:168)
位于org.drools.decisiontable.ExternalSpreadsheetCompiler.compile(ExternalSpreadsheetCompiler.java:99)
位于org.drools.decisiontable.ExternalSpreadsheetCompiler.compile(ExternalSpreadsheetCompiler.java:85)
位于com.dhl.gssdemo.config.SpringDroolsConfig.addTemplateContent(SpringDroolsConfig.java:112)
位于com.dhl.gssdemo.config.SpringDroolsConfig.classpathDrlKieBase(SpringDroolsConfig.java:102)
位于com.dhl.gssdemo.config.SpringDroolsConfig$$EnhancerBySpringCGLIB$$583d8208.CGLIB$classpathdrllkiebase$0()
在com.dhl.gssdemo.config.SpringDroolsConfig$$EnhancerBySpringCGLIB$$583d8208$$FastClassBySpringCGLIB$$25a5fef6.invoke()上
位于org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
位于org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
在com.dhl.gssdemo.config.SpringDroolsConfig$$EnhancerBySpringCGLIB$$583d8208.classpathDrlKieBase()上
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于org.springframework.beans.factory.support.SimpleInstallationStrategy.instantiate(SimpleInstallationStrategy.java:154)
... 省略52个公共帧
原因:java.lang.RuntimeException:[错误:未关闭@if{}块。应为@end{}]

我也遇到了同样的问题,我认为这与解决MVEL表达式有关,但我通过使用以下解决方法解决了它(使用$$而不是$)

就你而言

父母(子女:子女)
Child(gender==“@{gender}”)来自$$children

drools的哪个版本?你好,Roddy,它是7.40.0。Finalor不使用$作为绑定变量是解决它的另一种方法
[Line: 42, Column: 0]
    at org.drools.core.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
    at org.drools.core.common.DefaultAgenda.handleException(DefaultAgenda.java:1291)
    at org.drools.core.phreak.RuleExecutor.innerFireActivation(RuleExecutor.java:442)
    at org.drools.core.phreak.RuleExecutor.fireActivation(RuleExecutor.java:380)
    at org.drools.core.phreak.RuleExecutor.fire(RuleExecutor.java:136)
    at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:89)
    at org.drools.core.concurrent.AbstractRuleEvaluator.internalEvaluateAndFire(AbstractRuleEvaluator.java:33)
    at org.drools.core.concurrent.SequentialRuleEvaluator.evaluateAndFire(SequentialRuleEvaluator.java:43)
    at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1101)
    at org.drools.core.common.DefaultAgenda.internalFireAllRules(DefaultAgenda.java:1048)
    at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1040)
    at org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1341)
    at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1332)
    at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1316)
    at org.drools.template.parser.TemplateDataListener.finishSheet(TemplateDataListener.java:158)
    at org.drools.decisiontable.parser.xls.ExcelParser.finishSheet(ExcelParser.java:277)
    at org.drools.decisiontable.parser.xls.ExcelParser.processSheet(ExcelParser.java:212)
    at org.drools.decisiontable.parser.xls.ExcelParser.parseWorkbook(ExcelParser.java:105)
    at org.drools.decisiontable.parser.xls.ExcelParser.parseFile(ExcelParser.java:84)
    at org.drools.decisiontable.ExternalSpreadsheetCompiler.compile(ExternalSpreadsheetCompiler.java:140)
    at org.drools.decisiontable.ExternalSpreadsheetCompiler.compile(ExternalSpreadsheetCompiler.java:168)
    at org.drools.decisiontable.ExternalSpreadsheetCompiler.compile(ExternalSpreadsheetCompiler.java:99)
    at org.drools.decisiontable.ExternalSpreadsheetCompiler.compile(ExternalSpreadsheetCompiler.java:85)
    at com.dhl.gssdemo.config.SpringDroolsConfig.addTemplateContent(SpringDroolsConfig.java:112)
    at com.dhl.gssdemo.config.SpringDroolsConfig.classpathDrlKieBase(SpringDroolsConfig.java:102)
    at com.dhl.gssdemo.config.SpringDroolsConfig$$EnhancerBySpringCGLIB$$583d8208.CGLIB$classpathDrlKieBase$0(<generated>)
    at com.dhl.gssdemo.config.SpringDroolsConfig$$EnhancerBySpringCGLIB$$583d8208$$FastClassBySpringCGLIB$$25a5fef6.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
    at com.dhl.gssdemo.config.SpringDroolsConfig$$EnhancerBySpringCGLIB$$583d8208.classpathDrlKieBase(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
    ... 52 common frames omitted
Caused by: java.lang.RuntimeException: [Error: unclosed @if{} block. expected @end{}]