This is an automated email from the ASF dual-hosted git repository.
gitgabrio pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git
The following commit(s) were added to refs/heads/main by this push:
new a7d49ae6d3 [incubator-kie-issues#2084] Updating decisionresult status
on strictMode (#6446)
a7d49ae6d3 is described below
commit a7d49ae6d39623868203ba7aca328eb9aa49e480
Author: Gabriele Cardosi <[email protected]>
AuthorDate: Mon Sep 8 16:37:33 2025 +0200
[incubator-kie-issues#2084] Updating decisionresult status on strictMode
(#6446)
* [incubator-kie-issues#2084] Updating decisionresult status on strictMode
* [incubator-kie-issues#2084] Cleanup
---------
Co-authored-by: Gabriele-Cardosi <[email protected]>
---
.../java/org/kie/dmn/core/impl/DMNRuntimeImpl.java | 10 ++++++++
.../src/main/java/org/kie/dmn/core/util/Msg.java | 1 +
.../dmn/core/BaseInterpretedVsCompiledTest.java | 17 ++++++++++++++
.../java/org/kie/dmn/core/DMNInputRuntimeTest.java | 27 +++++++++++++++-------
.../java/org/kie/dmn/core/util/DMNRuntimeUtil.java | 5 +++-
5 files changed, 51 insertions(+), 9 deletions(-)
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeImpl.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeImpl.java
index 967ca8b030..b96cec4b01 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeImpl.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeImpl.java
@@ -629,6 +629,16 @@ public class DMNRuntimeImpl
// if result messages contains errors && runtime mode = strict
-> stop execution and return null
if (strictMode && result.hasErrors()) {
logger.warn("Immediately return due to strict mode");
+ DMNMessage message = MsgUtil.reportMessage(logger,
+
DMNMessage.Severity.ERROR,
+
decision.getSource(),
+ result,
+ null,
+ null,
+
Msg.ERROR_EVAL_DECISION_NODE_STRICT_MODE,
+
getIdentifier(decision),
+
decision.getResultType());
+ reportFailure(dr, message,
DMNDecisionResult.DecisionEvaluationStatus.FAILED);
return false;
} else if (er.getResultType() ==
EvaluatorResult.ResultType.SUCCESS ||
(((DMNModelImpl)
result.getModel()).getFeelDialect().equals(FEELDialect.BFEEL) && er.getResult()
!= null)) {
diff --git a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/util/Msg.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/util/Msg.java
index 91bdc35153..cfbc6b0c5a 100644
--- a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/util/Msg.java
+++ b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/util/Msg.java
@@ -102,6 +102,7 @@ public final class Msg {
public static final Message2 ERROR_EVAL_DS_NODE
= new Message2( DMNMessageType.ERROR_EVAL_NODE, "Error evaluating
Decision Service node '%s': %s" );
public static final Message2 ERROR_EVAL_BKM_NODE
= new Message2( DMNMessageType.ERROR_EVAL_NODE, "Error evaluating
Business Knowledge Model node '%s': %s" );
public static final Message2 ERROR_EVAL_DECISION_NODE
= new Message2( DMNMessageType.ERROR_EVAL_NODE, "Error evaluating
Decision node '%s': %s" );
+ public static final Message2 ERROR_EVAL_DECISION_NODE_STRICT_MODE
= new Message2( DMNMessageType.ERROR_EVAL_NODE, "Error evaluating
Decision node on strict mode '%s': %s" );
public static final Message4 ERROR_EVAL_NODE_DEP_WRONG_TYPE
= new Message4( DMNMessageType.ERROR_EVAL_NODE, "Error while evaluating
node '%s' for dependency '%s': the dependency value '%s' is not allowed by the
declared type (%s)" );
public static final Message3 ERROR_EVAL_NODE_RESULT_WRONG_TYPE
= new Message3( DMNMessageType.ERROR_EVAL_NODE, "Error while evaluating
node '%s': the declared result type is '%s' but the actual value '%s' is not an
instance of that type" );
public static final Message2 EXPR_TYPE_NOT_SUPPORTED_IN_NODE
= new Message2( DMNMessageType.EXPR_TYPE_NOT_SUPPORTED_IN_NODE,
"Expression type '%s' not supported in node '%s'" );
diff --git
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/BaseInterpretedVsCompiledTest.java
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/BaseInterpretedVsCompiledTest.java
index 93493addb7..cba338760d 100644
---
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/BaseInterpretedVsCompiledTest.java
+++
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/BaseInterpretedVsCompiledTest.java
@@ -20,6 +20,10 @@ package org.kie.dmn.core;
import org.junit.jupiter.api.AfterEach;
import org.kie.dmn.core.compiler.ExecModelCompilerOption;
+import org.kie.dmn.core.compiler.RuntimeModeOption;
+
+import static org.kie.dmn.core.compiler.RuntimeModeOption.MODE.LENIENT;
+import static org.kie.dmn.core.compiler.RuntimeModeOption.MODE.STRICT;
public abstract class BaseInterpretedVsCompiledTest {
@@ -27,15 +31,28 @@ public abstract class BaseInterpretedVsCompiledTest {
return new Object[]{false};
}
+ protected static Object[] strictMode() {
+ return new Object[]{false, true};
+ }
+
protected boolean useExecModelCompiler;
+ protected boolean useStrictMode;
protected void init(boolean useExecModelCompiler){
+ init(useExecModelCompiler, false);
+ }
+
+ protected void init(boolean useExecModelCompiler, boolean useStrictMode) {
this.useExecModelCompiler = useExecModelCompiler;
+ this.useStrictMode = useStrictMode;
System.setProperty(ExecModelCompilerOption.PROPERTY_NAME,
Boolean.toString(useExecModelCompiler));
+ String modeToSet = useStrictMode ? STRICT.getMode() :
LENIENT.getMode();
+ System.setProperty(RuntimeModeOption.PROPERTY_NAME, modeToSet);
}
@AfterEach
public void after() {
System.clearProperty(ExecModelCompilerOption.PROPERTY_NAME);
+ System.clearProperty(RuntimeModeOption.PROPERTY_NAME);
}
}
diff --git
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNInputRuntimeTest.java
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNInputRuntimeTest.java
index cc2af49061..bf53c508e9 100644
---
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNInputRuntimeTest.java
+++
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNInputRuntimeTest.java
@@ -759,13 +759,12 @@ public class DMNInputRuntimeTest extends
BaseInterpretedVsCompiledTest {
}
@ParameterizedTest
- @MethodSource("params")
- void errorHandlingWithStrictModeEvaluateAll(boolean useExecModelCompiler) {
- init(useExecModelCompiler);
+ @MethodSource("strictMode")
+ void errorHandlingWithWithoutStrictModeEvaluateAll(boolean strictMode) {
+ init(false, strictMode);
String nameSpace =
"https://kie.org/dmn/_79591DB5-1EE1-4CBD-AA5D-2E3EDF31155E";
final DMNRuntime runtime =
DMNRuntimeUtil.createRuntime("invalid_models/DMNv1_6/DMN-MultipleInvalidElements"
+
".dmn", this.getClass());
- ((DMNRuntimeImpl)runtime).setOption(new
RuntimeModeOption(RuntimeModeOption.MODE.STRICT));
final DMNModel dmnModel = runtime.getModel(
nameSpace,
"DMN_8F7C4323-412A-4E0B-9AEF-0F24C8F55282");
@@ -774,13 +773,25 @@ public class DMNInputRuntimeTest extends
BaseInterpretedVsCompiledTest {
final DMNContext dmnContext = DMNFactory.newContext();
dmnContext.set("id", "_7273EA2E-2CC3-4012-8F87-39E310C8DF3C");
dmnContext.set("Conditional Input", 107);
- dmnContext.set("New Input Data", 8888);
+ dmnContext.set("New Input Data", "8888");
dmnContext.set("Score", 80);
final DMNResult dmnResult = runtime.evaluateAll(dmnModel, dmnContext);
assertThat(dmnResult.hasErrors()).as(DMNRuntimeUtil.formatMessages(dmnResult.getMessages())).isTrue();
-
assertThat(dmnResult.getMessages(DMNMessage.Severity.ERROR).size()).isEqualTo(2);
- assertThat(dmnResult.getDecisionResults()).isNotNull().hasSize(3);
- dmnResult.getDecisionResults().forEach(decisionResult ->
assertThat(decisionResult.getResult()).isNull());
+ if (strictMode) {
+
assertThat(dmnResult.getMessages(DMNMessage.Severity.ERROR).size()).isEqualTo(5);
+ assertThat(dmnResult.getDecisionResults()).isNotNull().hasSize(3);
+ dmnResult.getDecisionResults().forEach(decisionResult -> {
+ assertThat(decisionResult.getResult()).isNull();
+
assertThat(decisionResult.getEvaluationStatus()).isEqualTo(DMNDecisionResult.DecisionEvaluationStatus.FAILED);
+ });
+ } else {
+
assertThat(dmnResult.getDecisionResultByName("Decision1").getEvaluationStatus()).isEqualTo(DMNDecisionResult.DecisionEvaluationStatus.SUCCEEDED);
+
assertThat(dmnResult.getDecisionResultByName("Decision2").getEvaluationStatus()).isEqualTo(DMNDecisionResult.DecisionEvaluationStatus.FAILED);
+
assertThat(dmnResult.getDecisionResultByName("Decision3").getEvaluationStatus()).isEqualTo(DMNDecisionResult.DecisionEvaluationStatus.SUCCEEDED);
+
assertThat(dmnResult.getDecisionResultByName("Decision1").getResult()).isNull();
+
assertThat(dmnResult.getDecisionResultByName("Decision2").getResult()).isNull();
+
assertThat(dmnResult.getDecisionResultByName("Decision3").getResult()).isEqualTo("Good");
+ }
}
@ParameterizedTest
diff --git
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/util/DMNRuntimeUtil.java
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/util/DMNRuntimeUtil.java
index 64ac5e957b..fcdc63bf36 100644
---
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/util/DMNRuntimeUtil.java
+++
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/util/DMNRuntimeUtil.java
@@ -44,6 +44,7 @@ import org.kie.dmn.api.core.event.BeforeEvaluateDecisionEvent;
import org.kie.dmn.api.core.event.BeforeEvaluateDecisionTableEvent;
import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
import org.kie.dmn.core.api.event.DefaultDMNRuntimeEventListener;
+import org.kie.dmn.core.compiler.RuntimeModeOption;
import org.kie.dmn.core.compiler.RuntimeTypeCheckOption;
import org.kie.dmn.core.impl.DMNRuntimeImpl;
import org.kie.internal.builder.InternalKieBuilder;
@@ -96,7 +97,7 @@ public final class DMNRuntimeUtil {
.filter(DMNMessage.class::isInstance)
.map(DMNMessage.class::cast)
.collect(Collectors.toList());
- assertThat(dmnMessages).isNotEmpty();;
+ assertThat(dmnMessages).isNotEmpty();
return dmnMessages;
}
@@ -137,6 +138,8 @@ public final class DMNRuntimeUtil {
public static DMNRuntime typeSafeGetKieRuntime(final KieContainer
kieContainer) {
DMNRuntime dmnRuntime =
kieContainer.newKieSession().getKieRuntime(DMNRuntime.class);
((DMNRuntimeImpl) dmnRuntime).setOption(new
RuntimeTypeCheckOption(true));
+ String runtimeMode =
System.getProperty(RuntimeModeOption.PROPERTY_NAME,
RuntimeModeOption.MODE.LENIENT.getMode());
+ ((DMNRuntimeImpl)dmnRuntime).setOption(new
RuntimeModeOption(runtimeMode));
return dmnRuntime;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]