- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 Drools 7.21 中评估 DMN 1.2 中新增的 FEEL 函数,例如 sqrt() 或 modulo(),但是该方法
dmnRuntime.evaluateAll(dmnModel,上下文)
始终返回值“null”(仅适用于新函数),状态为“SUCCESS”。我做错了什么或者缺少什么?
DMN 文件如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<semantic:definitions xmlns:semantic="http://www.omg.org/spec/DMN/20180521/MODEL/" xmlns="http://www.trisotech.com/definitions/_56fd6445-ff6a-4c28-8206-71fce7f80436" xmlns:feel="http://www.omg.org/spec/FEEL/20140401" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exporter="DMN Modeler" exporterVersion="6.0.1" id="_56fd6445-ff6a-4c28-8206-71fce7f80436" name="Sqrt-Function" namespace="http://www.trisotech.com/definitions/_56fd6445-ff6a-4c28-8206-71fce7f80436" >
<semantic:decision id="_cf6124bd-9907-4ac0-b4fd-59a962dbc502" name="square_root">
<semantic:variable id="_edaf978e-3634-4e52-8244-5fd4e16fd257" name="square_root" typeRef="feel:number"/>
<semantic:literalExpression id="_c990c3b2-e322-4ef9-931d-79bcdac99686">
<semantic:text>sqrt(81)</semantic:text>
</semantic:literalExpression>
</semantic:decision>
</semantic:definitions>
将文件导入“dmnModel”后:
DMNMarshaller marshaller = new org.kie.dmn.backend.marshalling.v1x.XStreamMarshaller();
FileInputStream fis = new FileInputStream( dmnFile );
Definitions unmarshal = marshaller.unmarshal( new InputStreamReader( fis ) );
DMNCompiler compiler = DMNFactory.newCompiler();
DMNModel dmnModel = compiler.compile(unmarshal);
我这样称呼 Drools 评估:
KieContainer kieContainer = KieHelper.getKieContainer(ks.newReleaseId("org.kie", "dmn-test-"+UUID.randomUUID(), "1.2"));
DMNRuntime dmnRuntime = kieContainer.newKieSession().getKieRuntime(DMNRuntime.class);
((DMNRuntimeImpl) dmnRuntime).setOption(new RuntimeTypeCheckOption(true));
DMNResult result = dmnRuntime.evaluateAll(dmnModel, context);
最佳答案
最好建议不要(取消)编码并且不必手动编译DMN文件;而是使用 KJAR 中 KieContainer 标准构建的标准方法; as detailed by the user guide in the documentation .
换句话说,这可以正确地处理您的 DMN 文件:
KieServices kieServices = KieServices.Factory.get();
KieContainer kieContainer = kieServices.getKieClasspathContainer();
DMNRuntime dmnRuntime = KieRuntimeFactory.of(kieContainer.getKieBase()).get(DMNRuntime.class);
DMNModel dmnModel = dmnRuntime.getModel(namespace, modelName);
DMNContext context = dmnRuntime.newContext();
((DMNRuntimeImpl) dmnRuntime).setOption(new RuntimeTypeCheckOption(true));
DMNResult result = dmnRuntime.evaluateAll(dmnModel, context);
生成9
作为结果。
如果您确实想使用 KieHelper,最好将 DMN 文件作为 KieResource 传递给 KieHelper.getKieContainer(...)
的调用,例如: :
KieContainer kieContainer = KieHelper.getKieContainer(ks.newReleaseId("org.kie", "dmn-test-" + UUID.randomUUID(), "1.2"),
ks.getResources().newFileSystemResource(new File(dmnFile)));
DMNRuntime dmnRuntime = KieRuntimeFactory.of(kieContainer.getKieBase()).get(DMNRuntime.class);
((DMNRuntimeImpl) dmnRuntime).setOption(new RuntimeTypeCheckOption(true));
DMNModel dmnModel = dmnRuntime.getModel(namespace, modelName);
DMNContext context = dmnRuntime.newContext();
DMNResult result = dmnRuntime.evaluateAll(dmnModel, context);
System.out.println(result);
您可以根据您的用例,根据需要将调用 ks.getResources().newFileSystemResource(...)
更改为基于 URL、ClassPath、Byte、... 的资源。这样 KieHelper 将负责解码
另外,第二个代码段也适用于我的 DMN 文件,结果生成 9
。
代码中的问题是 DMNCompiler 的初始化实际上并不意味着由用户手动调用,实际上文档中没有任何地方需要手动管理它;上述两种方法都会将其委托(delegate)给 KieContainer/KieHelper 的内部,这将是标准方式。
我建议遵循文档中详细说明的 KieContainer 构建,如前一个示例中所示,但我希望这个答案可以帮助您解决任何问题 - 在本地都对我有用。
希望这有帮助!
关于java - 流口水:DMN 1.2 FEEL 功能的评估不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56328508/
我们有一个网络应用程序,它接受大量请求参数,然后调用 drools 规则。我有一个事件监听器来捕获触发的规则名称。但是,我希望有一个指向每个被触发的规则的链接,以指向规则的实际实现。这可能吗? 我是否
我正在尝试使用 Drools 规则引擎,我是一个初学者。 我在单个规则文件中设置了以下规则: rule "A stand alone rule" salience 2 no-loop when
我正在尝试用 drools drl 语言编写规则,我想做类似 !(A && B) 的事情,但它似乎不喜欢 !运算符或单词 not。我正在努力寻找关于流口水的好文档 请参阅下面的示例代码: rule
我有这个类层次结构: DomainParent{List, Boolean isCalculatedTypes(defaults false)} Detail{List} SubDetail{Type
有没有办法通过直接在java中完全实现规则条件来使用drools,就像在中一样 https://github.com/j-easy/easy-rules (查看“声明式方式”部分和“编程方式”部分)
我需要以不区分大小写的方式比较两个字段。我有一个这样的规则: foo : ObjectTypeA() bar : ObjectTypeB( name == foo.name ) 这适用于大小写相同的字
我们希望将 DROOLS 与我当前基于 struts 2 的 Web 应用程序集成。是否有示例应用程序可以用作引用?一般来说,我们看到所有应用程序都使用 Spring+ Drools。另外,以后是否可
我有一个场景,我想将 StatelessKieSession 与议程组一起使用。 StatelessKieSession 没有任何方法可以像普通 KieSession 一样将焦点设置在特定的 Agen
我受困于 Drools 5,需要一点帮助。我想做的是使用传入的 DAO 并将其值分配给局部变量,就像这样...... rule "test rule 1" when $carDao : ICa
流口水 documentation提到规则可以使用 date-effective 和 date-expires 等属性来指定绝对规则有效期。 例如 rule "Date-restricted rule
Drools 使用 session 来存储运行时数据。为此,有两种 session :无状态和有状态。与无状态 session 相比,有状态 session 允许迭代调用并且似乎比无状态 sessio
我正在尝试在另一台计算机上运行可执行 JAR 文件,但遇到“严重”错误:“无法从 MySoapUIProject-1.1.jar 加载 pom.properties,因为找不到 jarPath。” 如
我在 drools session 中有两个列表:List 和 List,其中 Address 和 ProviderAddress 是业务对象。 ... kSession.insert(listOfA
所以目前我正在练习使用 Drools (7.13.0.Final) 和 Spring-boot(1.5.12.RELEASE)。我在 Spring-boot 中使用以下类制作了一个示例应用程序 模型:
我在学习JBoss Drools我正在使用来自 hapmap 项目的遗传学数据:( http://hapmap.ncbi.nlm.nih.gov/genotypes/latest/forward/no
这是我之前 question 的后续。我有以下形式的决策树: 我想将其转换为 Drools Expert 中的规则。 insertLogical 的使用已经 proposed 了。 Drools 文档
我有一个 maven gwt 项目,它应该在服务器上集成 drools (5.4.0.CR1)。 这里的问题是,drools 似乎需要 drools-pipline 作为依赖项才能找到该类: org.
当 drools 尝试加载我的 pom.properties 时出现此错误: 2014-02-25 11:14:06,251 ERROR org.springframework.web.co
我正在尝试使用 Drools 运行非常简单的应用程序,但在几个小时内无法设置具有所有依赖项的 pom.xml。 这是现在的样子: org.drools
我懂 Java,我懂 C#。 我是 JBoss Drools“Guvnor”的菜鸟,一般来说只是他们的 DRL 规则语言。我需要一些关于如何在规则的 LHS 中正确使用日期和时间的帮助。 例如,我必须
我是一名优秀的程序员,十分优秀!