Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 DSL自定义扩展器_Java_Drools - Fatal编程技术网

Java Drools DSL自定义扩展器

Java Drools DSL自定义扩展器,java,drools,Java,Drools,有dsl.DefaultExpander和dsl.DefaultExpanderResolver。Design和javadoc提供了一个想法,我可以将自定义扩展器添加到流中。但我并没有发现真正的可能性。您知道如何使用自定义扩展器实现DSL解析吗?在用于编译DRL/DSL的类中,我看到了以下方法: public DefaultExpander getDslExpander() { DefaultExpander expander = new DefaultExpander(); i

有dsl.DefaultExpander和dsl.DefaultExpanderResolver。Design和javadoc提供了一个想法,我可以将自定义扩展器添加到流中。但我并没有发现真正的可能性。您知道如何使用自定义扩展器实现DSL解析吗?

在用于编译DRL/DSL的类中,我看到了以下方法:

public DefaultExpander getDslExpander() {
    DefaultExpander expander = new DefaultExpander();
    if (this.dslFiles == null || this.dslFiles.isEmpty()) {
        return null;
    }
    for (DSLMappingFile file : this.dslFiles) {
        expander.addDSLMapping(file.getMapping());
    }
    return expander;
} 
如您所见,DefaultExpander是硬编码的,所以我想没有办法指定任何其他实现

同样的事情发生在DefaultExpanderResolver总是被实例化的情况下,不管发生什么

在我看来,唯一的方法是根据自己的语义在Drools外部预先生成DRL,然后将生成的DRL提供给Drools


希望有帮助,

谢谢您的回复,我看到了这个片段。希望这能被克服。DSL到DRL的转换只需要一些扩展。因此,如果您愿意编写自己的扩展器,就不需要其他任何东西。您的扩展器创建DRL,并将其传递给DRL编译器:就是这样。我们应该与Business Central集成,用户应该在DSL中有规则,因此BC的扩展器可以工作。最好有几个现有的调试键来更改扩展器的实现。