This is an automated email from the ASF dual-hosted git repository.
yamer pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-kogito-apps.git
The following commit(s) were added to refs/heads/main by this push:
new e16fda5d7 [incubator-kie-issues#2062] DMN: Verify lenient/strict flag
on jitexecutor (#2253)
e16fda5d7 is described below
commit e16fda5d7f0a07916877229117703174342d6900
Author: AthiraHari77 <[email protected]>
AuthorDate: Wed Aug 20 00:10:20 2025 +0530
[incubator-kie-issues#2062] DMN: Verify lenient/strict flag on jitexecutor
(#2253)
* [incubator-kie-issues#2062] Code changes for strict/lenient error handling
* [incubator-kie-issues#2062] Fix review comment
* [incubator-kie-issues#2062] Fix review comments
* [incubator-kie-issues#2062] Update test cases
* [incubator-kie-issues#2062] Update test cases
---------
Co-authored-by: athira <[email protected]>
---
.../common/requests/MultipleResourcesPayload.java | 20 +++++
.../kie/kogito/jitexecutor/dmn/DMNEvaluator.java | 4 +-
.../kie/kogito/jitexecutor/dmn/JITDMNService.java | 5 +-
.../kogito/jitexecutor/dmn/JITDMNServiceImpl.java | 16 ++--
.../dmn/LocalDMNPredictionProvider.java | 2 +-
.../kogito/jitexecutor/dmn/api/JITDMNResource.java | 9 ++-
.../jitexecutor/dmn/JITDMNServiceImplTest.java | 22 +++---
.../dmn/requests/JITDMNPayloadTest.java | 87 ++++++++++++++++++++++
.../dmn/requests/MultipleResourcePayloadTest.java | 85 +++++++++++++++++++++
9 files changed, 224 insertions(+), 26 deletions(-)
diff --git
a/jitexecutor/jitexecutor-common/src/main/java/org/kie/kogito/jitexecutor/common/requests/MultipleResourcesPayload.java
b/jitexecutor/jitexecutor-common/src/main/java/org/kie/kogito/jitexecutor/common/requests/MultipleResourcesPayload.java
index 0c16e267d..b0e6b7fae 100644
---
a/jitexecutor/jitexecutor-common/src/main/java/org/kie/kogito/jitexecutor/common/requests/MultipleResourcesPayload.java
+++
b/jitexecutor/jitexecutor-common/src/main/java/org/kie/kogito/jitexecutor/common/requests/MultipleResourcesPayload.java
@@ -20,17 +20,28 @@ package org.kie.kogito.jitexecutor.common.requests;
import java.util.List;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
public class MultipleResourcesPayload {
+ @JsonProperty("mainURI")
private String mainURI;
+ @JsonProperty("resources")
private List<ResourceWithURI> resources;
+ @JsonProperty("isStrictMode")
+ private boolean isStrictMode;
public MultipleResourcesPayload() {
}
public MultipleResourcesPayload(String mainURI, List<ResourceWithURI>
resources) {
+ this(mainURI, resources, false);
+ }
+
+ public MultipleResourcesPayload(String mainURI, List<ResourceWithURI>
resources, boolean isStrictMode) {
this.mainURI = mainURI;
this.resources = resources;
+ this.isStrictMode = isStrictMode;
}
public String getMainURI() {
@@ -49,11 +60,20 @@ public class MultipleResourcesPayload {
this.resources = resources;
}
+ public boolean isStrictMode() {
+ return isStrictMode;
+ }
+
+ public void setStrictMode(boolean strictMode) {
+ isStrictMode = strictMode;
+ }
+
@Override
public String toString() {
return "MultipleResourcesPayload{" +
"mainURI='" + mainURI + '\'' +
", resources=" + resources +
+ ", isStrictMode =" + isStrictMode +
'}';
}
}
diff --git
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/DMNEvaluator.java
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/DMNEvaluator.java
index c0f43ce6f..09af0fb7a 100644
---
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/DMNEvaluator.java
+++
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/DMNEvaluator.java
@@ -36,6 +36,7 @@ import org.kie.dmn.api.core.DMNMessage;
import org.kie.dmn.api.core.DMNModel;
import org.kie.dmn.api.core.DMNResult;
import org.kie.dmn.api.core.DMNRuntime;
+import org.kie.dmn.core.compiler.RuntimeModeOption;
import org.kie.dmn.core.compiler.RuntimeTypeCheckOption;
import org.kie.dmn.core.impl.DMNRuntimeImpl;
import org.kie.dmn.core.internal.utils.DMNRuntimeBuilder;
@@ -191,9 +192,10 @@ public class DMNEvaluator {
return dmnRuntime.getModels();
}
- public JITDMNResult evaluate(Map<String, Object> context) {
+ public JITDMNResult evaluate(Map<String, Object> context, boolean
isStrictMode) {
DMNContext dmnContext =
new DynamicDMNContextBuilder(dmnRuntime.newContext(),
dmnModel).populateContextWith(context);
+ ((DMNRuntimeImpl) this.dmnRuntime).setOption(new
RuntimeModeOption(isStrictMode ? RuntimeModeOption.MODE.STRICT :
RuntimeModeOption.MODE.LENIENT));
DMNResult dmnResult = dmnRuntime.evaluateAll(dmnModel, dmnContext);
List<List<String>> invalidElementPaths =
retrieveInvalidElementPaths(dmnResult.getMessages(), dmnModel);
Optional<Map<String, Map<String, Integer>>>
decisionEvaluationHitIdsMap = dmnRuntime.getListeners().stream()
diff --git
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNService.java
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNService.java
index 6db6dbb97..68e258564 100644
---
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNService.java
+++
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNService.java
@@ -26,11 +26,12 @@ import
org.kie.kogito.jitexecutor.dmn.responses.JITDMNResult;
public interface JITDMNService {
- JITDMNResult evaluateModel(String modelXML, Map<String, Object> context);
+ JITDMNResult evaluateModel(String modelXML, Map<String, Object> context,
boolean isStrictMode);
JITDMNResult evaluateModel(MultipleResourcesPayload payload, Map<String,
Object> context);
- DMNResultWithExplanation evaluateModelAndExplain(String modelXML,
Map<String, Object> context);
+ DMNResultWithExplanation evaluateModelAndExplain(String modelXML,
Map<String, Object> context, boolean isStrictMode);
DMNResultWithExplanation evaluateModelAndExplain(MultipleResourcesPayload
payload, Map<String, Object> context);
+
}
diff --git
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNServiceImpl.java
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNServiceImpl.java
index ca1a4b631..f63acb792 100644
---
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNServiceImpl.java
+++
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/JITDMNServiceImpl.java
@@ -74,33 +74,33 @@ public class JITDMNServiceImpl implements JITDMNService {
}
@Override
- public JITDMNResult evaluateModel(String modelXML, Map<String, Object>
context) {
+ public JITDMNResult evaluateModel(String modelXML, Map<String, Object>
context, boolean isStrictMode) {
DMNEvaluator dmnEvaluator = DMNEvaluator.fromXML(modelXML);
- return dmnEvaluator.evaluate(context);
+ return dmnEvaluator.evaluate(context, isStrictMode);
}
@Override
public JITDMNResult evaluateModel(MultipleResourcesPayload payload,
Map<String, Object> context) {
DMNEvaluator dmnEvaluator = DMNEvaluator.fromMultiple(payload);
- return dmnEvaluator.evaluate(context);
+ return dmnEvaluator.evaluate(context, payload.isStrictMode());
}
@Override
- public DMNResultWithExplanation evaluateModelAndExplain(String modelXML,
Map<String, Object> context) {
+ public DMNResultWithExplanation evaluateModelAndExplain(String modelXML,
Map<String, Object> context, boolean isStrictMode) {
DMNEvaluator dmnEvaluator = DMNEvaluator.fromXML(modelXML);
- return evaluateModelAndExplain(dmnEvaluator, context);
+ return evaluateModelAndExplain(dmnEvaluator, context, isStrictMode);
}
@Override
public DMNResultWithExplanation
evaluateModelAndExplain(MultipleResourcesPayload payload, Map<String, Object>
context) {
DMNEvaluator dmnEvaluator = DMNEvaluator.fromMultiple(payload);
- return evaluateModelAndExplain(dmnEvaluator, context);
+ return evaluateModelAndExplain(dmnEvaluator, context,
payload.isStrictMode());
}
- public DMNResultWithExplanation evaluateModelAndExplain(DMNEvaluator
dmnEvaluator, Map<String, Object> context) {
+ public DMNResultWithExplanation evaluateModelAndExplain(DMNEvaluator
dmnEvaluator, Map<String, Object> context, boolean isStrictMode) {
LocalDMNPredictionProvider localDMNPredictionProvider = new
LocalDMNPredictionProvider(dmnEvaluator);
- JITDMNResult dmnResult = dmnEvaluator.evaluate(context);
+ JITDMNResult dmnResult = dmnEvaluator.evaluate(context, isStrictMode);
Prediction prediction = new
SimplePrediction(LocalDMNPredictionProvider.toPredictionInput(context),
LocalDMNPredictionProvider.toPredictionOutput(dmnResult));
diff --git
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/LocalDMNPredictionProvider.java
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/LocalDMNPredictionProvider.java
index 8950c4c6c..bab3ab034 100644
---
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/LocalDMNPredictionProvider.java
+++
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/LocalDMNPredictionProvider.java
@@ -52,7 +52,7 @@ public class LocalDMNPredictionProvider implements
PredictionProvider {
List<PredictionOutput> predictionOutputs = new ArrayList<>();
for (PredictionInput input : inputs) {
Map<String, Object> contextVariables = (Map<String, Object>)
toMap(input.getFeatures()).get(DUMMY_DMN_CONTEXT_KEY);
-
predictionOutputs.add(toPredictionOutput(dmnEvaluator.evaluate(contextVariables)));
+
predictionOutputs.add(toPredictionOutput(dmnEvaluator.evaluate(contextVariables,
false)));
}
return completedFuture(predictionOutputs);
}
diff --git
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/api/JITDMNResource.java
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/api/JITDMNResource.java
index 19afd5c2e..b80877db0 100644
---
a/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/api/JITDMNResource.java
+++
b/jitexecutor/jitexecutor-dmn/src/main/java/org/kie/kogito/jitexecutor/dmn/api/JITDMNResource.java
@@ -58,7 +58,8 @@ public class JITDMNResource {
LOGGER.debug(payload.toString());
LOGGER.debug(LINEBREAK);
Supplier<Response> supplier = () -> {
- JITDMNResult evaluateAll = payload.getModel() != null ?
jitdmnService.evaluateModel(payload.getModel(), payload.getContext()) :
jitdmnService.evaluateModel(payload, payload.getContext());
+ JITDMNResult evaluateAll = payload.getModel() != null ?
jitdmnService.evaluateModel(payload.getModel(), payload.getContext(),
payload.isStrictMode())
+ : jitdmnService.evaluateModel(payload,
payload.getContext());
Map<String, Object> restResulk = new HashMap<>();
for (Entry<String, Object> kv :
evaluateAll.getContext().getAll().entrySet()) {
restResulk.put(kv.getKey(),
MarshallingStubUtils.stubDMNResult(kv.getValue(), String::valueOf));
@@ -78,7 +79,8 @@ public class JITDMNResource {
LOGGER.debug(payload.toString());
LOGGER.debug(LINEBREAK);
Supplier<Response> supplier = () -> {
- JITDMNResult dmnResult = payload.getModel() != null ?
jitdmnService.evaluateModel(payload.getModel(), payload.getContext()) :
jitdmnService.evaluateModel(payload, payload.getContext());
+ JITDMNResult dmnResult = payload.getModel() != null ?
jitdmnService.evaluateModel(payload.getModel(), payload.getContext(),
payload.isStrictMode())
+ : jitdmnService.evaluateModel(payload,
payload.getContext());
return Response.ok(dmnResult).build();
};
return DMNResourceHelper.manageResponse(supplier);
@@ -95,7 +97,8 @@ public class JITDMNResource {
LOGGER.debug(LINEBREAK);
Supplier<Response> supplier = () -> {
DMNResultWithExplanation response =
- payload.getModel() != null ?
jitdmnService.evaluateModelAndExplain(payload.getModel(), payload.getContext())
: jitdmnService.evaluateModelAndExplain(payload, payload.getContext());
+ payload.getModel() != null ?
jitdmnService.evaluateModelAndExplain(payload.getModel(), payload.getContext(),
payload.isStrictMode())
+ : jitdmnService.evaluateModelAndExplain(payload,
payload.getContext());
return Response.ok(response).build();
};
return DMNResourceHelper.manageResponse(supplier);
diff --git
a/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/JITDMNServiceImplTest.java
b/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/JITDMNServiceImplTest.java
index 70a2fa2fe..21e242654 100644
---
a/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/JITDMNServiceImplTest.java
+++
b/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/JITDMNServiceImplTest.java
@@ -77,7 +77,7 @@ public class JITDMNServiceImplTest {
context.put("id", "_0A185BAC-7692-45FA-B722-7C86C626BD51");
- JITDMNResult dmnResult = jitdmnService.evaluateModel(sampleModel,
context);
+ JITDMNResult dmnResult = jitdmnService.evaluateModel(sampleModel,
context, true);
assertThat(dmnResult.getModelName()).isEqualTo("loan_pre_qualification");
assertThat(dmnResult.getNamespace()).isEqualTo("https://kie.apache.org/dmn/_857FE424-BEDA-4772-AB8E-2F4CDDB864AB");
assertThat(dmnResult.getMessages()).isEmpty();
@@ -103,7 +103,7 @@ public class JITDMNServiceImplTest {
context.put("FICO Score", 800);
context.put("DTI Ratio", .1);
context.put("PITI Ratio", .1);
- JITDMNResult dmnResult = jitdmnService.evaluateModel(model, context);
+ JITDMNResult dmnResult = jitdmnService.evaluateModel(model, context,
false);
assertThat(dmnResult.getModelName()).isEqualTo("xls2dmn");
assertThat(dmnResult.getNamespace()).isEqualTo("xls2dmn_741b355c-685c-4827-b13a-833da8321da4");
assertThat(dmnResult.getMessages()).isEmpty();
@@ -127,7 +127,7 @@ public class JITDMNServiceImplTest {
context.put("Loan", loan);
context.put("SupremeDirector", "No");
context.put("Bribe", 10);
- JITDMNResult dmnResult =
jitdmnService.evaluateModel(decisionTableModel, context);
+ JITDMNResult dmnResult =
jitdmnService.evaluateModel(decisionTableModel, context, false);
assertThat(dmnResult.getModelName()).isEqualTo("LoanEligibility");
assertThat(dmnResult.getNamespace()).isEqualTo("https://github.com/kiegroup/kogito-examples/dmn-quarkus-listener-example");
@@ -147,7 +147,7 @@ public class JITDMNServiceImplTest {
Map<String, Object> context = new HashMap<>();
context.put("Credit Score", "Poor");
context.put("DTI", 33);
- JITDMNResult retrieved =
jitdmnService.evaluateModel(decisionTableModel, context);
+ JITDMNResult retrieved =
jitdmnService.evaluateModel(decisionTableModel, context, false);
assertThat(retrieved.getModelName()).isEqualTo("DMN_A77074C1-21FE-4F7E-9753-F84661569AFC");
assertThat(retrieved.getMessages()).isEmpty();
@@ -168,7 +168,7 @@ public class JITDMNServiceImplTest {
context = new HashMap<>();
context.put("Credit Score", "Excellent");
context.put("DTI", 10);
- retrieved = jitdmnService.evaluateModel(decisionTableModel, context);
+ retrieved = jitdmnService.evaluateModel(decisionTableModel, context,
false);
assertThat(retrieved.getMessages()).isEmpty();
// Approved decision
retrievedDecisionResult = (JITDMNDecisionResult)
retrieved.getDecisionResultByName("Risk Score");
@@ -198,7 +198,7 @@ public class JITDMNServiceImplTest {
context.put("Credit Score", "Poor");
context.put("DTI", 33);
context.put("World Region", "Asia");
- JITDMNResult retrieved =
jitdmnService.evaluateModel(decisionTableModel, context);
+ JITDMNResult retrieved =
jitdmnService.evaluateModel(decisionTableModel, context, false);
assertThat(retrieved.getMessages()).isEmpty();
// Approved decision
JITDMNDecisionResult retrievedDecisionResult = (JITDMNDecisionResult)
retrieved.getDecisionResultByName("Risk Score");
@@ -211,7 +211,7 @@ public class JITDMNServiceImplTest {
context.put("Credit Score", "Excellent");
context.put("DTI", 10);
context.put("World Region", "Europe");
- retrieved = jitdmnService.evaluateModel(decisionTableModel, context);
+ retrieved = jitdmnService.evaluateModel(decisionTableModel, context,
false);
assertThat(retrieved.getMessages()).isEmpty();
// Approved decision
retrievedDecisionResult = (JITDMNDecisionResult)
retrieved.getDecisionResultByName("Risk Score");
@@ -234,7 +234,7 @@ public class JITDMNServiceImplTest {
numbers.add(BigDecimal.valueOf(1));
final Map<String, Object> context = new HashMap<>();
context.put("Numbers", numbers);
- final JITDMNResult retrieved =
jitdmnService.evaluateModel(decisionTableModel, context);
+ final JITDMNResult retrieved =
jitdmnService.evaluateModel(decisionTableModel, context, false);
final List<BigDecimal> expectedStatistcs = new ArrayList<>();
expectedStatistcs.add(BigDecimal.valueOf(6));
@@ -257,7 +257,7 @@ public class JITDMNServiceImplTest {
final Map<String, Object> context = new HashMap<>();
context.put("A", 1);
- JITDMNResult retrieved =
jitdmnService.evaluateModel(nestedConditionalModel, context);
+ JITDMNResult retrieved =
jitdmnService.evaluateModel(nestedConditionalModel, context, false);
assertThat(retrieved.getMessages()).isEmpty();
JITDMNDecisionResult retrievedDecisionResult = (JITDMNDecisionResult)
retrieved.getDecisionResultByName("New Decision");
assertThat(retrievedDecisionResult.getResult()).isEqualTo(BigDecimal.valueOf(10));
@@ -268,7 +268,7 @@ public class JITDMNServiceImplTest {
//
context.clear();
context.put("A", 0);
- retrieved = jitdmnService.evaluateModel(nestedConditionalModel,
context);
+ retrieved = jitdmnService.evaluateModel(nestedConditionalModel,
context, false);
assertThat(retrieved.getMessages()).isEmpty();
retrievedDecisionResult = (JITDMNDecisionResult)
retrieved.getDecisionResultByName("New Decision");
assertThat(retrievedDecisionResult.getResult()).isEqualTo(BigDecimal.valueOf(-10));
@@ -303,7 +303,7 @@ public class JITDMNServiceImplTest {
context.put("complexInput", complexInput);
context.put("listOfComplexInput",
Collections.singletonList(complexInput));
- DMNResultWithExplanation response =
jitdmnService.evaluateModelAndExplain(allTypesModel, context);
+ DMNResultWithExplanation response =
jitdmnService.evaluateModelAndExplain(allTypesModel, context, false);
assertThat(response.dmnResult).isNotNull();
assertThat(response.dmnResult.getDecisionResults()).hasSize(1);
diff --git
a/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/requests/JITDMNPayloadTest.java
b/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/requests/JITDMNPayloadTest.java
new file mode 100644
index 000000000..adb2c304f
--- /dev/null
+++
b/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/requests/JITDMNPayloadTest.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.kie.kogito.jitexecutor.dmn.requests;
+
+import java.util.Map;
+
+import org.junit.jupiter.api.Test;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class JITDMNPayloadTest {
+
+ private static final ObjectMapper MAPPER = new ObjectMapper();
+
+ static {
+ MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,
false);
+ }
+
+ @Test
+ void deserialize() throws JsonProcessingException {
+ String json = "{\n" +
+ " \"model\": \"<dmn>...</dmn>\",\n" +
+ " \"context\": {\n" +
+ " \"ApplicantAge\": 35,\n" +
+ " \"Income\": 75000\n" +
+ " }\n" +
+ "}";
+
+ JITDMNPayload payload = MAPPER.readValue(json, JITDMNPayload.class);
+ assertThat(payload).isNotNull();
+ assertThat(payload.getModel()).isEqualTo("<dmn>...</dmn>");
+ assertThat(payload.getContext()).containsEntry("ApplicantAge",
35).containsEntry("Income", 75000);
+ assertThat(payload.isStrictMode()).isFalse();
+ }
+
+ @Test
+ void deserializeWithStrictMode() throws JsonProcessingException {
+ String json = "{\n" +
+ " \"model\": \"<dmn>...</dmn>\",\n" +
+ " \"context\": {\n" +
+ " \"ApplicantAge\": 35,\n" +
+ " \"Income\": 75000\n" +
+ " },\n" +
+ " \"isStrictMode\": true\n" +
+ "}";
+
+ JITDMNPayload payload = MAPPER.readValue(json, JITDMNPayload.class);
+ assertThat(payload).isNotNull();
+ assertThat(payload.getModel()).isEqualTo("<dmn>...</dmn>");
+ assertThat(payload.getContext()).containsEntry("ApplicantAge",
35).containsEntry("Income", 75000);
+ assertThat(payload.isStrictMode()).isTrue();
+ }
+
+ @Test
+ void roundTripSerialization() throws JsonProcessingException {
+ JITDMNPayload original = new JITDMNPayload(
+ "<dmn>...</dmn>",
+ Map.of("ApplicantAge", 35, "Income", 75000));
+
+ String json = MAPPER.writeValueAsString(original);
+ JITDMNPayload deserialized = MAPPER.readValue(json,
JITDMNPayload.class);
+
+ assertThat(deserialized).isNotNull();
+ assertThat(deserialized.getModel()).isEqualTo(original.getModel());
+ assertThat(deserialized.getContext()).isEqualTo(original.getContext());
+ }
+}
diff --git
a/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/requests/MultipleResourcePayloadTest.java
b/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/requests/MultipleResourcePayloadTest.java
new file mode 100644
index 000000000..0e29fba69
--- /dev/null
+++
b/jitexecutor/jitexecutor-dmn/src/test/java/org/kie/kogito/jitexecutor/dmn/requests/MultipleResourcePayloadTest.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.kie.kogito.jitexecutor.dmn.requests;
+
+import java.util.List;
+
+import org.junit.jupiter.api.Test;
+import org.kie.kogito.jitexecutor.common.requests.MultipleResourcesPayload;
+import org.kie.kogito.jitexecutor.common.requests.ResourceWithURI;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class MultipleResourcePayloadTest {
+
+ private static final ObjectMapper MAPPER = new ObjectMapper();
+
+ static {
+ MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,
false);
+ }
+
+ @Test
+ void deserialize() throws JsonProcessingException {
+ String json = "{\n" +
+ " \"mainURI\": \"main.dmn\",\n" +
+ " \"resources\": [\n" +
+ " {\n" +
+ " \"uri\": \"resource1.dmn\",\n" +
+ " \"content\": \"<dmn>...</dmn>\"\n" +
+ " },\n" +
+ " {\n" +
+ " \"uri\": \"resource2.dmn\",\n" +
+ " \"content\": \"<dmn>...</dmn>\"\n" +
+ " }\n" +
+ " ],\n" +
+ " \"strictMode\": true\n" +
+ "}";
+
+ MultipleResourcesPayload payload = MAPPER.readValue(json,
MultipleResourcesPayload.class);
+ assertThat(payload).isNotNull();
+ assertThat(payload.getMainURI()).isEqualTo("main.dmn");
+ assertThat(payload.getResources()).hasSize(2);
+ assertThat(payload.isStrictMode()).isTrue();
+ }
+
+ @Test
+ void roundTripSerialization() throws JsonProcessingException {
+ ResourceWithURI resource1 = new ResourceWithURI("resource1.dmn",
"<dmn>resource1</dmn>");
+ ResourceWithURI resource2 = new ResourceWithURI("resource2.dmn",
"<dmn>resource2</dmn>");
+
+ MultipleResourcesPayload original = new MultipleResourcesPayload(
+ "main.dmn",
+ List.of(resource1, resource2),
+ true);
+
+ String json = MAPPER.writeValueAsString(original);
+
+ MultipleResourcesPayload deserialized = MAPPER.readValue(json,
MultipleResourcesPayload.class);
+
+ assertThat(deserialized).isNotNull();
+ assertThat(deserialized.getMainURI()).isEqualTo(original.getMainURI());
+ assertThat(deserialized.getResources()).hasSize(2);
+
assertThat(deserialized.getResources().get(0).getURI()).isEqualTo("resource1.dmn");
+ assertThat(deserialized.isStrictMode()).isTrue();
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]