This is an automated email from the ASF dual-hosted git repository.
fjtiradosarti pushed a commit to branch main
in repository
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git
The following commit(s) were added to refs/heads/main by this push:
new af492cfae8 [Fix #3809] Allowing additional properties on user input
(#3810)
af492cfae8 is described below
commit af492cfae867916e89c970c7e11b1f4bde439595
Author: Francisco Javier Tirado Sarti
<[email protected]>
AuthorDate: Tue Dec 10 11:00:47 2024 +0100
[Fix #3809] Allowing additional properties on user input (#3810)
---
.../serverless/workflow/models/JsonNodeModel.java | 9 +++++++++
.../workflow/models/JsonNodeModelInput.java | 21 +++++++++++++--------
.../kogito/quarkus/workflows/ExpressionRestIT.java | 2 +-
3 files changed, 23 insertions(+), 9 deletions(-)
diff --git
a/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models/JsonNodeModel.java
b/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models/JsonNodeModel.java
index cd8bdb78eb..0897cc7729 100644
---
a/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models/JsonNodeModel.java
+++
b/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models/JsonNodeModel.java
@@ -50,7 +50,15 @@ public class JsonNodeModel implements Model, MapInput,
MapInputId, MapOutput, Ma
this(null, workflowdata);
}
+ public JsonNodeModel(Object workflowdata, Map<String, Object>
additionalProperties) {
+ this(null, workflowdata, additionalProperties);
+ }
+
public JsonNodeModel(String id, Object workflowdata) {
+ this(id, workflowdata, Collections.emptyMap());
+ }
+
+ public JsonNodeModel(String id, Object workflowdata, Map<String, Object>
additionalProperties) {
this.id = id;
if (workflowdata instanceof JsonNode) {
this.workflowdata = (JsonNode) workflowdata;
@@ -59,6 +67,7 @@ public class JsonNodeModel implements Model, MapInput,
MapInputId, MapOutput, Ma
this.workflowdata = workflowdata == null ?
mapper.createObjectNode() : mapper.convertValue(workflowdata, JsonNode.class);
}
this.input = this.workflowdata.deepCopy();
+ this.additionalProperties = additionalProperties == null ?
Collections.emptyMap() : additionalProperties;
}
public String getId() {
diff --git
a/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models/JsonNodeModelInput.java
b/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models/JsonNodeModelInput.java
index 98adedb04f..d53aa9ea77 100644
---
a/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models/JsonNodeModelInput.java
+++
b/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models/JsonNodeModelInput.java
@@ -18,20 +18,23 @@
*/
package org.kie.kogito.serverless.workflow.models;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
import org.kie.kogito.MapInput;
import org.kie.kogito.MapInputId;
import org.kie.kogito.MapOutput;
import org.kie.kogito.MappableToModel;
import org.kie.kogito.Model;
-import org.kie.kogito.jackson.utils.ObjectMapperFactory;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
public class JsonNodeModelInput implements Model, MapInput, MapInputId,
MapOutput, MappableToModel<JsonNodeModel> {
private Object workflowdata;
+ private Map<String, Object> additionalProperties;
public Object getWorkflowdata() {
return workflowdata;
@@ -39,16 +42,18 @@ public class JsonNodeModelInput implements Model, MapInput,
MapInputId, MapOutpu
@JsonAnySetter
public void setData(String key, JsonNode value) {
- if (workflowdata == null) {
- workflowdata =
ObjectMapperFactory.listenerAware().createObjectNode();
- }
- if (workflowdata instanceof ObjectNode) {
- ((ObjectNode) workflowdata).set(key, value);
+ if (additionalProperties == null) {
+ additionalProperties = new LinkedHashMap<>();
}
+ additionalProperties.put(key, value);
}
@Override
public JsonNodeModel toModel() {
- return new JsonNodeModel(workflowdata);
+ if (workflowdata == null) {
+ workflowdata = additionalProperties;
+ additionalProperties = Collections.emptyMap();
+ }
+ return new JsonNodeModel(workflowdata, additionalProperties);
}
}
diff --git
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/ExpressionRestIT.java
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/ExpressionRestIT.java
index d6d4122929..5f0b44234a 100644
---
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/ExpressionRestIT.java
+++
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/ExpressionRestIT.java
@@ -38,7 +38,7 @@ class ExpressionRestIT {
.contentType(ContentType.JSON)
.accept(ContentType.JSON)
.header("pepe", "pepa")
- .body("{\"workflowdata\":{\"numbers\":[{\"x\":2, \"y\":
1},{\"x\":4, \"y\": 3}]}}").when()
+ .body("{\"workflowdata\":{\"numbers\":[{\"x\":2, \"y\":
1},{\"x\":4, \"y\": 3}]}, \"randomAdditionalProperty\":\"Im ignored in runtimes
but will be visible on data index\"}").when()
.post("/expression")
.then()
.statusCode(201)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]