This is an automated email from the ASF dual-hosted git repository.

martinweiler pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie.git


The following commit(s) were added to refs/heads/main by this push:
     new 57d549ab49b [incubator-kie-issues#7194] Support untyped collection 
process variables in persistence proto generation (#7196)
57d549ab49b is described below

commit 57d549ab49bb27f9f8ef1edcf443b35d4bda76c0
Author: Abhiram Gundala <[email protected]>
AuthorDate: Wed Oct 21 19:20:27 2026 -0400

    [incubator-kie-issues#7194] Support untyped collection process variables in 
persistence proto generation (#7196)
    
    * [incubator-kie#7194] Support untyped collection process variables in 
persistence proto generation
    
    * Exclude untyped collection fields from the generated JSON schema
---
 .../kogito/codegen/json/JsonSchemaGenerator.java   |  13 ++
 .../proto/ReflectionProtoGenerator.java            |  10 +-
 .../kie/kogito/codegen/data/ListProcessModel.java  |  55 ++++++++
 .../codegen/json/JsonSchemaGeneratorTest.java      |  29 ++++
 .../kogito/codegen/process/ProcessCodegenTest.java |  14 ++
 .../proto/AbstractProtoGeneratorTest.java          |  45 +++++-
 .../UntypedCollectionVariableProcess.bpmn2         | 154 +++++++++++++++++++++
 .../workflow/deployment/JandexProtoGenerator.java  |  11 +-
 .../workflow/deployment/JandexTestUtils.java       |   2 +
 9 files changed, 319 insertions(+), 14 deletions(-)

diff --git 
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/json/JsonSchemaGenerator.java
 
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/json/JsonSchemaGenerator.java
index 9b075485226..a222656a731 100644
--- 
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/json/JsonSchemaGenerator.java
+++ 
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/json/JsonSchemaGenerator.java
@@ -38,6 +38,7 @@ import org.kie.kogito.codegen.VariableInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.fasterxml.classmate.ResolvedType;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectWriter;
 import com.fasterxml.jackson.databind.node.ArrayNode;
@@ -181,6 +182,18 @@ public class JsonSchemaGenerator {
             return true;
         }
 
+        if (fieldScope.getType().isInstanceOf(Collection.class)) {
+            ResolvedType elementType = 
fieldScope.getTypeParameterFor(Collection.class, 0);
+            if (elementType == null || 
Object.class.equals(elementType.getErasedType())) {
+                logger.warn("Field '{}' in '{}' is declared as a collection 
without type information and will be excluded from the " +
+                        "generated JSON schema. The UI cannot render a form 
widget for an untyped collection. " +
+                        "Use a typed collection to enable form rendering.",
+                        fieldScope.getDeclaredName(),
+                        declaringType.getSimpleName());
+                return true;
+            }
+        }
+
         return false;
     }
 
diff --git 
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/persistence/proto/ReflectionProtoGenerator.java
 
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/persistence/proto/ReflectionProtoGenerator.java
index 8473365a2ae..fef2d397fcb 100644
--- 
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/persistence/proto/ReflectionProtoGenerator.java
+++ 
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/persistence/proto/ReflectionProtoGenerator.java
@@ -96,12 +96,14 @@ public class ReflectionProtoGenerator extends 
AbstractProtoGenerator<Class<?>> {
             } else if 
(Collection.class.isAssignableFrom(pd.getPropertyType())) {
                 fieldTypeString = COLLECTION;
                 Type type = propertyField.getGenericType();
-                if (type instanceof ParameterizedType) {
-                    ParameterizedType ptype = (ParameterizedType) type;
-                    fieldType = (Class<?>) ptype.getActualTypeArguments()[0];
+                if (type instanceof ParameterizedType && ((ParameterizedType) 
type).getActualTypeArguments()[0] instanceof Class) {
+                    fieldType = (Class<?>) ((ParameterizedType) 
type).getActualTypeArguments()[0];
                     protoType = protoType(fieldType.getCanonicalName());
                 } else {
-                    throw new IllegalArgumentException("Field " + 
propertyField.getName() + " of class " + clazz.getName() + " uses collection 
without type information");
+                    LOGGER.warn("Field '{}' of class '{}' uses a collection 
without type information. " +
+                            "Its elements will be persisted using Java 
serialization. " +
+                            "Make sure the stored values implement 
java.io.Serializable.", propertyField.getName(), clazz.getName());
+                    protoType = KOGITO_SERIALIZABLE;
                 }
             } else {
                 protoType = protoType(fieldTypeString);
diff --git 
a/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/data/ListProcessModel.java
 
b/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/data/ListProcessModel.java
new file mode 100644
index 00000000000..c8f0a1707e8
--- /dev/null
+++ 
b/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/data/ListProcessModel.java
@@ -0,0 +1,55 @@
+/*
+ * 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.codegen.data;
+
+import java.util.List;
+
+import org.kie.kogito.MapInput;
+import org.kie.kogito.MapInputId;
+import org.kie.kogito.MapOutput;
+import org.kie.kogito.Model;
+
+import jakarta.validation.Valid;
+
[email protected](value = "kogito-codegen", reference = 
"listProcess", name = "ListProcess", hidden = false)
+public class ListProcessModel implements Model, MapInput, MapInputId, 
MapOutput {
+
+    private String id;
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getId() {
+        return this.id;
+    }
+
+    @org.kie.kogito.codegen.VariableInfo(tags = "")
+    @com.fasterxml.jackson.annotation.JsonProperty(value = "myList")
+    @jakarta.validation.Valid()
+    private List myList;
+
+    public @Valid() List getMyList() {
+        return myList;
+    }
+
+    public void setMyList(List myList) {
+        this.myList = myList;
+    }
+}
diff --git 
a/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/json/JsonSchemaGeneratorTest.java
 
b/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/json/JsonSchemaGeneratorTest.java
index 82629c37037..a98d916f20b 100644
--- 
a/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/json/JsonSchemaGeneratorTest.java
+++ 
b/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/json/JsonSchemaGeneratorTest.java
@@ -173,6 +173,19 @@ public class JsonSchemaGeneratorTest {
         private Object payload;
     }
 
+    @ProcessInput(processName = "untypedCollectionVarProcess")
+    private static class ProcessInputModelWithUntypedCollectionVar {
+
+        @VariableInfo
+        private String name;
+
+        @VariableInfo
+        private List items;
+
+        @VariableInfo
+        private List<String> tags;
+    }
+
     private static class HolderWithObjectField {
 
         private String label;
@@ -482,6 +495,22 @@ public class JsonSchemaGeneratorTest {
         assertThat(properties.has("payload")).isFalse();
     }
 
+    @Test
+    public void testUntypedCollectionFieldIsExcludedFromSchema() throws 
IOException {
+        Collection<GeneratedFile> files = new JsonSchemaGenerator.ClassBuilder(
+                
Stream.of(ProcessInputModelWithUntypedCollectionVar.class)).build().generate();
+        assertThat(files).hasSize(1);
+
+        ObjectReader reader = new ObjectMapper().reader();
+        JsonNode properties = 
reader.readTree(files.iterator().next().contents()).get("properties");
+        assertThat(properties).isNotNull();
+        assertThat(properties.has("name")).isTrue();
+        assertThat(properties.has("items")).isFalse();
+        assertThat(properties.has("tags")).isTrue();
+        
assertThat(properties.get("tags").get("type").asText()).isEqualTo("array");
+        
assertThat(properties.get("tags").get("items").get("type").asText()).isEqualTo("string");
+    }
+
     @Test
     public void testNestedObjectTypedFieldIsExcludedFromSchema() throws 
IOException {
         Collection<GeneratedFile> files = new JsonSchemaGenerator.ClassBuilder(
diff --git 
a/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/process/ProcessCodegenTest.java
 
b/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/process/ProcessCodegenTest.java
index c9970338878..b936e8de53d 100644
--- 
a/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/process/ProcessCodegenTest.java
+++ 
b/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/process/ProcessCodegenTest.java
@@ -53,6 +53,8 @@ class ProcessCodegenTest {
     private static final Path REST_HYPHEN_PARAMS_FULL_PATH = 
BASE_PATH.resolve(REST_HYPHEN_PARAMS_SOURCE);
     private static final String OBJECT_VARIABLE_SOURCE = 
"objectvariable/ObjectVariableProcess.bpmn2";
     private static final Path OBJECT_VARIABLE_SOURCE_FULL_PATH = 
BASE_PATH.resolve(OBJECT_VARIABLE_SOURCE);
+    private static final String UNTYPED_COLLECTION_VARIABLE_SOURCE = 
"collectionvariable/UntypedCollectionVariableProcess.bpmn2";
+    private static final Path UNTYPED_COLLECTION_VARIABLE_SOURCE_FULL_PATH = 
BASE_PATH.resolve(UNTYPED_COLLECTION_VARIABLE_SOURCE);
 
     @ParameterizedTest
     
@MethodSource("org.kie.kogito.codegen.api.utils.KogitoContextTestUtils#contextBuilders")
@@ -209,4 +211,16 @@ class ProcessCodegenTest {
         Collection<GeneratedFile> generatedFiles = codeGenerator.generate();
         assertThat(generatedFiles).isNotEmpty();
     }
+
+    @ParameterizedTest
+    
@MethodSource("org.kie.kogito.codegen.api.utils.KogitoContextTestUtils#contextBuilders")
+    public void 
untypedCollectionVariableProcessGeneratesWithoutError(KogitoBuildContext.Builder
 contextBuilder) {
+        KogitoBuildContext context = contextBuilder.build();
+        ProcessCodegen codeGenerator = ProcessCodegen.ofCollectedResources(
+                context,
+                CollectedResourceProducer.fromFiles(BASE_PATH, 
UNTYPED_COLLECTION_VARIABLE_SOURCE_FULL_PATH.toFile()));
+
+        Collection<GeneratedFile> generatedFiles = codeGenerator.generate();
+        assertThat(generatedFiles).isNotEmpty();
+    }
 }
diff --git 
a/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/process/persistence/proto/AbstractProtoGeneratorTest.java
 
b/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/process/persistence/proto/AbstractProtoGeneratorTest.java
index baf97025f95..3a303559258 100644
--- 
a/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/process/persistence/proto/AbstractProtoGeneratorTest.java
+++ 
b/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/process/persistence/proto/AbstractProtoGeneratorTest.java
@@ -768,12 +768,18 @@ public abstract class AbstractProtoGeneratorTest<T> {
                 
.withDataClasses(Collections.singleton(convertToType(ListWithoutType.class)))
                 .build(null);
 
-        assertThatThrownBy(() -> generator.protoOfDataClasses("defaultPkg"))
-                .hasCauseInstanceOf(IllegalArgumentException.class)
-                .hasMessage(
-                        "Error while generating proto for model class " + 
ListWithoutType.class.getName()
-                                + " Field attribute of class " + 
ListWithoutType.class.getName()
-                                + " uses collection without type information");
+        Proto proto = generator.protoOfDataClasses("defaultPkg");
+        assertThat(proto).isNotNull();
+        assertThat(proto.getMessages()).hasSize(1);
+
+        ProtoMessage message = proto.getMessages().get(0);
+        assertThat(message.getName()).isEqualTo("ListWithoutType");
+        assertThat(message.getFields()).hasSize(1)
+                .element(0)
+                .hasFieldOrPropertyWithValue("name", "attribute")
+                .hasFieldOrPropertyWithValue("applicability", "repeated")
+                .hasFieldOrPropertyWithValue("type", 
ProtoGenerator.KOGITO_SERIALIZABLE)
+                .hasFieldOrPropertyWithValue("option", "[kogito_java_class = 
\"java.util.List\"]");
     }
 
     @Test
@@ -853,6 +859,33 @@ public abstract class AbstractProtoGeneratorTest<T> {
         assertThat(valueField.getOption()).isEqualTo("[kogito_java_class = 
\"java.lang.Object\"]");
     }
 
+    @Test
+    void modelWithCollectionWithoutTypeField() {
+        AbstractProtoGenerator<T> generator = protoGeneratorBuilder()
+                
.build(Collections.singleton(convertToType(ListProcessModel.class)));
+
+        Proto proto = generator.generate("comment", 
ProtoGenerator.INDEX_COMMENT, "org.kie.kogito.test",
+                convertToType(ListProcessModel.class));
+
+        assertThat(proto.getPackageName()).isEqualTo("org.kie.kogito.test");
+        assertThat(proto.getSyntax()).isEqualTo("proto2");
+        assertThat(proto.getMessages()).hasSize(1);
+
+        ProtoMessage message = proto.getMessages().get(0);
+        assertThat(message.getName()).isEqualTo("ListProcess");
+        
assertThat(message.getJavaPackageOption()).isEqualTo("org.kie.kogito.codegen.data");
+
+        assertThat(message.getFields()).hasSize(2);
+
+        ProtoField myListField = message.getFields().stream()
+                .filter(f -> f.getName().equals("myList"))
+                .findFirst()
+                .orElseThrow();
+        assertThat(myListField.getApplicability()).isEqualTo("repeated");
+        
assertThat(myListField.getType()).isEqualTo(ProtoGenerator.KOGITO_SERIALIZABLE);
+        assertThat(myListField.getOption()).isEqualTo("[kogito_java_class = 
\"java.util.List\"]");
+    }
+
     private void assertClassIsIncludedInSubclass(ProtoMessage superClass, 
ProtoMessage subClass) {
         for (ProtoField field : superClass.getFields()) {
             assertThat(field).isNotNull();
diff --git 
a/kogito-codegen-modules/kogito-codegen-processes/src/test/resources/collectionvariable/UntypedCollectionVariableProcess.bpmn2
 
b/kogito-codegen-modules/kogito-codegen-processes/src/test/resources/collectionvariable/UntypedCollectionVariableProcess.bpmn2
new file mode 100644
index 00000000000..3eed04006a4
--- /dev/null
+++ 
b/kogito-codegen-modules/kogito-codegen-processes/src/test/resources/collectionvariable/UntypedCollectionVariableProcess.bpmn2
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+<bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL"; 
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"; 
xmlns:bpsim="http://www.bpsim.org/schemas/1.0"; 
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"; 
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"; 
xmlns:drools="http://www.jboss.org/drools"; xmlns:xsi="xsi" 
id="_iD9hUKNEED-tQ7U1cgEz6Q" 
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd 
http://www.jboss.org/drools drools.xsd http://www [...]
+  <bpmn2:itemDefinition id="_myListItem" structureRef="java.util.List"/>
+  <bpmn2:collaboration id="_9A95366F-9801-4BA2-9322-0FA39B3A82E2" 
name="Default Collaboration">
+    <bpmn2:participant id="_BB63D03B-426E-4E87-8238-AA1695C57263" name="Pool 
Participant" processRef="listtest"/>
+  </bpmn2:collaboration>
+  <bpmn2:process id="listtest" drools:packageName="com.example" 
drools:version="1.0" drools:adHoc="false" name="listtest" isExecutable="true" 
processType="Public">
+    <bpmn2:extensionElements>
+      <drools:import name="java.util.List"/>
+    </bpmn2:extensionElements>
+    <bpmn2:property id="myList" itemSubjectRef="_myListItem" name="myList"/>
+    <bpmn2:sequenceFlow id="_0A18E249-814A-423F-A615-3ACFBE7F4CAC" 
sourceRef="_03F8A11D-472D-4EF8-9C96-CEAB7272722B" 
targetRef="_560FE9DE-9A4C-4516-99D2-84C1C229CC4F"/>
+    <bpmn2:sequenceFlow id="_02918934-1369-483F-AAE6-ED3B13100865" 
sourceRef="_A9C0CA21-6B3B-4EE7-91F3-CB903CB8528A" 
targetRef="_03F8A11D-472D-4EF8-9C96-CEAB7272722B"/>
+    <bpmn2:sequenceFlow id="_B39EC559-5369-4C0D-980E-05D16E080BD1" 
sourceRef="_41D18BFB-3CF8-4452-9722-EC82838CBB26" 
targetRef="_A9C0CA21-6B3B-4EE7-91F3-CB903CB8528A"/>
+    <bpmn2:endEvent id="_560FE9DE-9A4C-4516-99D2-84C1C229CC4F">
+      <bpmn2:incoming>_0A18E249-814A-423F-A615-3ACFBE7F4CAC</bpmn2:incoming>
+    </bpmn2:endEvent>
+    <bpmn2:scriptTask id="_03F8A11D-472D-4EF8-9C96-CEAB7272722B" name="Task" 
scriptFormat="http://www.java.com/java";>
+      <bpmn2:extensionElements>
+        <drools:metaData name="elementname">
+          <drools:metaValue><![CDATA[Task]]></drools:metaValue>
+        </drools:metaData>
+        <drools:metaData name="customAsync">
+          <drools:metaValue><![CDATA[true]]></drools:metaValue>
+        </drools:metaData>
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>_02918934-1369-483F-AAE6-ED3B13100865</bpmn2:incoming>
+      <bpmn2:outgoing>_0A18E249-814A-423F-A615-3ACFBE7F4CAC</bpmn2:outgoing>
+      <bpmn2:script>System.out.println("Retrieving list:");
+System.out.println(kcontext.getVariable("myList"));</bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:scriptTask id="_A9C0CA21-6B3B-4EE7-91F3-CB903CB8528A" name="Task" 
scriptFormat="http://www.java.com/java";>
+      <bpmn2:extensionElements>
+        <drools:metaData name="elementname">
+          <drools:metaValue><![CDATA[Task]]></drools:metaValue>
+        </drools:metaData>
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>_B39EC559-5369-4C0D-980E-05D16E080BD1</bpmn2:incoming>
+      <bpmn2:outgoing>_02918934-1369-483F-AAE6-ED3B13100865</bpmn2:outgoing>
+      <bpmn2:script>System.out.println("Populating list");
+java.util.List l = new java.util.ArrayList();
+l.add("item1");
+l.add("item2");
+kcontext.setVariable("myList", l);</bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:startEvent id="_41D18BFB-3CF8-4452-9722-EC82838CBB26">
+      <bpmn2:outgoing>_B39EC559-5369-4C0D-980E-05D16E080BD1</bpmn2:outgoing>
+    </bpmn2:startEvent>
+  </bpmn2:process>
+  <bpmndi:BPMNDiagram>
+    <bpmndi:BPMNPlane bpmnElement="listtest">
+      <bpmndi:BPMNShape id="shape__41D18BFB-3CF8-4452-9722-EC82838CBB26" 
bpmnElement="_41D18BFB-3CF8-4452-9722-EC82838CBB26">
+        <dc:Bounds height="56" width="56" x="210" y="234"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="shape__A9C0CA21-6B3B-4EE7-91F3-CB903CB8528A" 
bpmnElement="_A9C0CA21-6B3B-4EE7-91F3-CB903CB8528A">
+        <dc:Bounds height="102" width="154" x="346" y="211"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="shape__03F8A11D-472D-4EF8-9C96-CEAB7272722B" 
bpmnElement="_03F8A11D-472D-4EF8-9C96-CEAB7272722B">
+        <dc:Bounds height="102" width="154" x="580" y="211"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="shape__560FE9DE-9A4C-4516-99D2-84C1C229CC4F" 
bpmnElement="_560FE9DE-9A4C-4516-99D2-84C1C229CC4F">
+        <dc:Bounds height="56" width="56" x="814" y="234"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge 
id="edge_shape__41D18BFB-3CF8-4452-9722-EC82838CBB26_to_shape__A9C0CA21-6B3B-4EE7-91F3-CB903CB8528A"
 bpmnElement="_B39EC559-5369-4C0D-980E-05D16E080BD1">
+        <di:waypoint x="238" y="262"/>
+        <di:waypoint x="423" y="262"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge 
id="edge_shape__A9C0CA21-6B3B-4EE7-91F3-CB903CB8528A_to_shape__03F8A11D-472D-4EF8-9C96-CEAB7272722B"
 bpmnElement="_02918934-1369-483F-AAE6-ED3B13100865">
+        <di:waypoint x="423" y="262"/>
+        <di:waypoint x="657" y="262"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge 
id="edge_shape__03F8A11D-472D-4EF8-9C96-CEAB7272722B_to_shape__560FE9DE-9A4C-4516-99D2-84C1C229CC4F"
 bpmnElement="_0A18E249-814A-423F-A615-3ACFBE7F4CAC">
+        <di:waypoint x="657" y="262"/>
+        <di:waypoint x="842" y="262"/>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+  <bpmn2:relationship type="BPSimData">
+    <bpmn2:extensionElements>
+      <bpsim:BPSimData>
+        <bpsim:Scenario id="default" name="Simulationscenario">
+          <bpsim:ScenarioParameters/>
+          <bpsim:ElementParameters 
elementRef="_41D18BFB-3CF8-4452-9722-EC82838CBB26">
+            <bpsim:TimeParameters>
+              <bpsim:ProcessingTime>
+                <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+              </bpsim:ProcessingTime>
+            </bpsim:TimeParameters>
+          </bpsim:ElementParameters>
+          <bpsim:ElementParameters 
elementRef="_A9C0CA21-6B3B-4EE7-91F3-CB903CB8528A">
+            <bpsim:TimeParameters>
+              <bpsim:ProcessingTime>
+                <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+              </bpsim:ProcessingTime>
+            </bpsim:TimeParameters>
+            <bpsim:ResourceParameters>
+              <bpsim:Availability>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Availability>
+              <bpsim:Quantity>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Quantity>
+            </bpsim:ResourceParameters>
+            <bpsim:CostParameters>
+              <bpsim:UnitCost>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:UnitCost>
+            </bpsim:CostParameters>
+          </bpsim:ElementParameters>
+          <bpsim:ElementParameters 
elementRef="_03F8A11D-472D-4EF8-9C96-CEAB7272722B">
+            <bpsim:TimeParameters>
+              <bpsim:ProcessingTime>
+                <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+              </bpsim:ProcessingTime>
+            </bpsim:TimeParameters>
+            <bpsim:ResourceParameters>
+              <bpsim:Availability>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Availability>
+              <bpsim:Quantity>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Quantity>
+            </bpsim:ResourceParameters>
+            <bpsim:CostParameters>
+              <bpsim:UnitCost>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:UnitCost>
+            </bpsim:CostParameters>
+          </bpsim:ElementParameters>
+        </bpsim:Scenario>
+      </bpsim:BPSimData>
+    </bpmn2:extensionElements>
+    <bpmn2:source>_iD9hUKNEED-tQ7U1cgEz6Q</bpmn2:source>
+    <bpmn2:target>_iD9hUKNEED-tQ7U1cgEz6Q</bpmn2:target>
+  </bpmn2:relationship>
+</bpmn2:definitions>
\ No newline at end of file
diff --git 
a/kogito-quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/main/java/org/kie/kogito/quarkus/workflow/deployment/JandexProtoGenerator.java
 
b/kogito-quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/main/java/org/kie/kogito/quarkus/workflow/deployment/JandexProtoGenerator.java
index 46ce5f2b616..085d0a0a6ae 100644
--- 
a/kogito-quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/main/java/org/kie/kogito/quarkus/workflow/deployment/JandexProtoGenerator.java
+++ 
b/kogito-quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/main/java/org/kie/kogito/quarkus/workflow/deployment/JandexProtoGenerator.java
@@ -148,11 +148,14 @@ public class JandexProtoGenerator extends 
AbstractProtoGenerator<ClassInfo> {
 
                 List<Type> typeParameters = pd.type().kind() == Kind.CLASS ? 
emptyList() : pd.type().asParameterizedType().arguments();
                 if (typeParameters.isEmpty()) {
-                    throw new IllegalArgumentException("Field " + pd.name() + 
" of class " + clazz.name().toString()
-                            + " uses collection without type information");
+                    LOGGER.warn("Field '{}' of class '{}' uses a collection 
without type information. " +
+                            "Its elements will be persisted using Java 
serialization. " +
+                            "Make sure the stored values implement 
java.io.Serializable.", pd.name(), clazz.name());
+                    protoType = KOGITO_SERIALIZABLE;
+                } else {
+                    fieldType = typeParameters.get(0).name();
+                    protoType = protoType(fieldType.toString());
                 }
-                fieldType = typeParameters.get(0).name();
-                protoType = protoType(fieldType.toString());
             } else {
                 protoType = protoType(fieldTypeString);
             }
diff --git 
a/kogito-quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/test/java/org/kie/kogito/quarkus/workflow/deployment/JandexTestUtils.java
 
b/kogito-quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/test/java/org/kie/kogito/quarkus/workflow/deployment/JandexTestUtils.java
index 82611c52138..a7e6872760f 100644
--- 
a/kogito-quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/test/java/org/kie/kogito/quarkus/workflow/deployment/JandexTestUtils.java
+++ 
b/kogito-quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/test/java/org/kie/kogito/quarkus/workflow/deployment/JandexTestUtils.java
@@ -39,6 +39,7 @@ import org.kie.kogito.codegen.data.GeneratedPOJO;
 import org.kie.kogito.codegen.data.Hello;
 import org.kie.kogito.codegen.data.HelloModel;
 import org.kie.kogito.codegen.data.JacksonData;
+import org.kie.kogito.codegen.data.ListProcessModel;
 import org.kie.kogito.codegen.data.ListWithoutType;
 import org.kie.kogito.codegen.data.NotEmptyConstructor;
 import org.kie.kogito.codegen.data.ObjectHolder;
@@ -84,6 +85,7 @@ public final class JandexTestUtils {
             PersonSubClass.class,
             JacksonData.class,
             ListWithoutType.class,
+            ListProcessModel.class,
             ObjectHolder.class,
             ObjectProcessModel.class,
             PersonWithBooleanObject.class,


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to