Skip to content

Commit 79ca030

Browse files
committed
[Fix #3809] Allowing additional properties on user input
1 parent 26f9c10 commit 79ca030

File tree

3 files changed

+23
-9
lines changed
  • kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models
  • quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows

3 files changed

+23
-9
lines changed

kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models/JsonNodeModel.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,15 @@ public JsonNodeModel(Object workflowdata) {
5050
this(null, workflowdata);
5151
}
5252

53+
public JsonNodeModel(Object workflowdata, Map<String, Object> additionalProperties) {
54+
this(null, workflowdata, additionalProperties);
55+
}
56+
5357
public JsonNodeModel(String id, Object workflowdata) {
58+
this(id, workflowdata, Collections.emptyMap());
59+
}
60+
61+
public JsonNodeModel(String id, Object workflowdata, Map<String, Object> additionalProperties) {
5462
this.id = id;
5563
if (workflowdata instanceof JsonNode) {
5664
this.workflowdata = (JsonNode) workflowdata;
@@ -59,6 +67,7 @@ public JsonNodeModel(String id, Object workflowdata) {
5967
this.workflowdata = workflowdata == null ? mapper.createObjectNode() : mapper.convertValue(workflowdata, JsonNode.class);
6068
}
6169
this.input = this.workflowdata.deepCopy();
70+
this.additionalProperties = additionalProperties == null ? Collections.emptyMap() : additionalProperties;
6271
}
6372

6473
public String getId() {

kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/models/JsonNodeModelInput.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,37 +18,42 @@
1818
*/
1919
package org.kie.kogito.serverless.workflow.models;
2020

21+
import java.util.Collections;
22+
import java.util.LinkedHashMap;
23+
import java.util.Map;
24+
2125
import org.kie.kogito.MapInput;
2226
import org.kie.kogito.MapInputId;
2327
import org.kie.kogito.MapOutput;
2428
import org.kie.kogito.MappableToModel;
2529
import org.kie.kogito.Model;
26-
import org.kie.kogito.jackson.utils.ObjectMapperFactory;
2730

2831
import com.fasterxml.jackson.annotation.JsonAnySetter;
2932
import com.fasterxml.jackson.databind.JsonNode;
30-
import com.fasterxml.jackson.databind.node.ObjectNode;
3133

3234
public class JsonNodeModelInput implements Model, MapInput, MapInputId, MapOutput, MappableToModel<JsonNodeModel> {
3335

3436
private Object workflowdata;
37+
private Map<String, Object> additionalProperties;
3538

3639
public Object getWorkflowdata() {
3740
return workflowdata;
3841
}
3942

4043
@JsonAnySetter
4144
public void setData(String key, JsonNode value) {
42-
if (workflowdata == null) {
43-
workflowdata = ObjectMapperFactory.listenerAware().createObjectNode();
44-
}
45-
if (workflowdata instanceof ObjectNode) {
46-
((ObjectNode) workflowdata).set(key, value);
45+
if (additionalProperties == null) {
46+
additionalProperties = new LinkedHashMap<>();
4747
}
48+
additionalProperties.put(key, value);
4849
}
4950

5051
@Override
5152
public JsonNodeModel toModel() {
52-
return new JsonNodeModel(workflowdata);
53+
if (workflowdata == null) {
54+
workflowdata = additionalProperties;
55+
additionalProperties = Collections.emptyMap();
56+
}
57+
return new JsonNodeModel(workflowdata, additionalProperties);
5358
}
5459
}

quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/ExpressionRestIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ void testExpressionRest() {
3838
.contentType(ContentType.JSON)
3939
.accept(ContentType.JSON)
4040
.header("pepe", "pepa")
41-
.body("{\"workflowdata\":{\"numbers\":[{\"x\":2, \"y\": 1},{\"x\":4, \"y\": 3}]}}").when()
41+
.body("{\"workflowdata\":{\"numbers\":[{\"x\":2, \"y\": 1},{\"x\":4, \"y\": 3}]}, \"randomAdditionalProperty\":\"Im ignored in runtimes but will be visible on data index\"}").when()
4242
.post("/expression")
4343
.then()
4444
.statusCode(201)

0 commit comments

Comments
 (0)