You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kie.apache.org by eg...@apache.org on 2024/05/28 08:40:56 UTC

(incubator-kie-kogito-runtimes) branch main updated: [incubator-kie-issues-1204] Add built in support for org.w3c.dom.Document (#3518)

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

egonzalez 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 ae22647664 [incubator-kie-issues-1204] Add built in support for org.w3c.dom.Document (#3518)
ae22647664 is described below

commit ae2264766402f0aa9e8eab24fef3a526a5dc9d14
Author: Enrique <en...@ibm.com>
AuthorDate: Tue May 28 10:40:53 2024 +0200

    [incubator-kie-issues-1204] Add built in support for org.w3c.dom.Document (#3518)
    
    * [incubator-kie-issues-1204] Add built in support for org.w3c.dom.Document
---
 .../datatype/impl/coverter/DocumentConverter.java  |   39 +
 .../impl/coverter/DocumentUnconverter.java         |   46 +
 .../impl/coverter/TypeConverterRegistry.java       |    3 +
 jbpm/process-serialization-protobuf/pom.xml        |   25 +-
 .../ObjectMarshallerStrategyHelper.java            |   41 +
 .../ProcessInstanceMarshallerService.java          |    5 +-
 .../ProtobufDocumentNodeMessageMarshaller.java     |   83 ++
 .../KogitoNodeInstanceContentsProtobuf.java        |  782 +++++++++++--
 .../protobuf/KogitoProcessInstanceProtobuf.java    |   91 +-
 .../protobuf/KogitoTypesProtobuf.java              | 1202 +++++++++++++++++---
 .../protobuf/KogitoWorkItemsProtobuf.java          |  601 +++++++---
 ...bpm.flow.serialization.ObjectMarshallerStrategy |    1 +
 .../flow/serialization/protobuf/kogito_types.proto |    4 +
 .../serialization/ProcessInstanceMarshallTest.java |   71 +-
 .../persistence/proto/AbstractProtoGenerator.java  |  107 +-
 .../process/persistence/proto/ProtoGenerator.java  |   79 +-
 .../proto/ReflectionProtoGenerator.java            |  116 +-
 .../workflow/deployment/JandexProtoGenerator.java  |   30 +-
 18 files changed, 2783 insertions(+), 543 deletions(-)

diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/coverter/DocumentConverter.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/coverter/DocumentConverter.java
new file mode 100644
index 0000000000..eebe8bd9c2
--- /dev/null
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/coverter/DocumentConverter.java
@@ -0,0 +1,39 @@
+/*
+ * 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.jbpm.process.core.datatype.impl.coverter;
+
+import java.util.function.Function;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+public class DocumentConverter implements Function<String, Object> {
+
+    @Override
+    public Object apply(String xml) {
+        try {
+            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+            factory.setExpandEntityReferences(false);
+            factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
+            return factory.newDocumentBuilder().parse(xml);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+}
diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/coverter/DocumentUnconverter.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/coverter/DocumentUnconverter.java
new file mode 100644
index 0000000000..5160d61632
--- /dev/null
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/coverter/DocumentUnconverter.java
@@ -0,0 +1,46 @@
+/*
+ * 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.jbpm.process.core.datatype.impl.coverter;
+
+import java.io.StringWriter;
+import java.util.function.Function;
+
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.w3c.dom.Document;
+
+public class DocumentUnconverter implements Function<Document, String> {
+
+    @Override
+    public String apply(Document document) {
+        try {
+            TransformerFactory tf = TransformerFactory.newInstance();
+            Transformer trans = tf.newTransformer();
+            StringWriter sw = new StringWriter();
+            trans.transform(new DOMSource(document), new StreamResult(sw));
+            return sw.toString();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+}
diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/coverter/TypeConverterRegistry.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/coverter/TypeConverterRegistry.java
index c4dd61705e..3d022cfa68 100644
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/coverter/TypeConverterRegistry.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/coverter/TypeConverterRegistry.java
@@ -28,6 +28,7 @@ import org.jbpm.process.core.datatype.DataType;
 import org.kie.kogito.jackson.utils.JsonNodeConverter;
 import org.kie.kogito.jackson.utils.ObjectMapperFactory;
 import org.kie.kogito.jackson.utils.StringConverter;
+import org.w3c.dom.Document;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.module.SimpleModule;
@@ -43,7 +44,9 @@ public class TypeConverterRegistry {
     private TypeConverterRegistry() {
         converters.put(Date.class.getName(), new DateTypeConverter());
         converters.put(JsonNode.class.getName(), new JsonNodeConverter(ObjectMapperFactory::listenerAware));
+        converters.put(Document.class.getName(), new DocumentConverter());
         unconverters.put(JsonNode.class.getName(), new StringConverter());
+        unconverters.put(Document.class.getName(), new DocumentUnconverter());
         addJacksonPair(Variable.class, Map.class);
     }
 
diff --git a/jbpm/process-serialization-protobuf/pom.xml b/jbpm/process-serialization-protobuf/pom.xml
index 647da48aeb..1348ef5064 100644
--- a/jbpm/process-serialization-protobuf/pom.xml
+++ b/jbpm/process-serialization-protobuf/pom.xml
@@ -105,7 +105,21 @@
       <artifactId>assertj-core</artifactId>
       <scope>test</scope>
     </dependency>
-
+    <dependency>
+      <groupId>com.sun.xml.bind</groupId>
+      <artifactId>jaxb-core</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.glassfish.jaxb</groupId>
+      <artifactId>jaxb-runtime</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.xmlunit</groupId>
+      <artifactId>xmlunit-core</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
   <build>
     <plugins>
@@ -144,6 +158,15 @@
           <plugin>
             <groupId>org.xolstice.maven.plugins</groupId>
             <artifactId>protobuf-maven-plugin</artifactId>
+            <executions>
+                <execution>
+                    <id>default</id>
+                    <goals>
+                        <goal>compile</goal>
+                    </goals>
+                    <phase>generate-sources</phase>
+                </execution>
+            </executions>
           </plugin>
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
diff --git a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/ObjectMarshallerStrategyHelper.java b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/ObjectMarshallerStrategyHelper.java
new file mode 100644
index 0000000000..b475f11f29
--- /dev/null
+++ b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/ObjectMarshallerStrategyHelper.java
@@ -0,0 +1,41 @@
+/*
+ * 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.jbpm.flow.serialization;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.ServiceLoader;
+
+import org.jbpm.util.JbpmClassLoaderUtil;
+
+public class ObjectMarshallerStrategyHelper {
+
+    public static ObjectMarshallerStrategy[] defaultStrategies() {
+        List<ObjectMarshallerStrategy> strats = new ArrayList<>();
+        ServiceLoader<ObjectMarshallerStrategy> loader = ServiceLoader.load(ObjectMarshallerStrategy.class, JbpmClassLoaderUtil.findClassLoader());
+
+        for (ObjectMarshallerStrategy strategy : loader) {
+            strats.add(strategy);
+        }
+        Collections.sort(strats);
+        return strats.stream().toArray(ObjectMarshallerStrategy[]::new);
+    }
+
+}
diff --git a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/ProcessInstanceMarshallerService.java b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/ProcessInstanceMarshallerService.java
index 6b0fbd300d..3611b26e7a 100644
--- a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/ProcessInstanceMarshallerService.java
+++ b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/ProcessInstanceMarshallerService.java
@@ -82,11 +82,8 @@ public class ProcessInstanceMarshallerService {
         }
 
         public Builder withDefaultObjectMarshallerStrategies() {
-            ServiceLoader<ObjectMarshallerStrategy> loader = ServiceLoader.load(ObjectMarshallerStrategy.class, JbpmClassLoaderUtil.findClassLoader());
 
-            for (ObjectMarshallerStrategy strategy : loader) {
-                ProcessInstanceMarshallerService.this.strats.add(strategy);
-            }
+            ProcessInstanceMarshallerService.this.strats.addAll(List.of(ObjectMarshallerStrategyHelper.defaultStrategies()));
 
             ServiceLoader<NodeInstanceReader> readerLoader = ServiceLoader.load(NodeInstanceReader.class, JbpmClassLoaderUtil.findClassLoader());
 
diff --git a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/impl/marshallers/ProtobufDocumentNodeMessageMarshaller.java b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/impl/marshallers/ProtobufDocumentNodeMessageMarshaller.java
new file mode 100644
index 0000000000..20e0fef306
--- /dev/null
+++ b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/impl/marshallers/ProtobufDocumentNodeMessageMarshaller.java
@@ -0,0 +1,83 @@
+/*
+ * 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.jbpm.flow.serialization.impl.marshallers;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.StringWriter;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.jbpm.flow.serialization.ObjectMarshallerStrategy;
+import org.jbpm.flow.serialization.ProcessInstanceMarshallerException;
+import org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf;
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
+
+import com.google.protobuf.Any;
+
+public class ProtobufDocumentNodeMessageMarshaller implements ObjectMarshallerStrategy {
+
+    @Override
+    public boolean acceptForMarshalling(Object value) {
+        return value instanceof Document;
+    }
+
+    @Override
+    public boolean acceptForUnmarshalling(Any value) {
+        return value.is(KogitoTypesProtobuf.Document.class);
+    }
+
+    @Override
+    public Any marshall(Object unmarshalled) {
+        try {
+            KogitoTypesProtobuf.Document.Builder builder = KogitoTypesProtobuf.Document.newBuilder();
+            Document document = (Document) unmarshalled;
+            TransformerFactory tf = TransformerFactory.newInstance();
+            Transformer trans = tf.newTransformer();
+            StringWriter sw = new StringWriter();
+            trans.transform(new DOMSource(document), new StreamResult(sw));
+            builder.setContent(sw.toString());
+            return Any.pack(builder.build());
+        } catch (TransformerException e) {
+            throw new ProcessInstanceMarshallerException("Error trying to marshalling a Document Node value", e);
+        }
+    }
+
+    @Override
+    public Object unmarshall(Any data) {
+        try {
+            KogitoTypesProtobuf.Document storedValue = data.unpack(KogitoTypesProtobuf.Document.class);
+            StringBuilder xmlStringBuilder = new StringBuilder(storedValue.getContent());
+            ByteArrayInputStream input = new ByteArrayInputStream(xmlStringBuilder.toString().getBytes("UTF-8"));
+            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+            factory.setExpandEntityReferences(false);
+            factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
+            return factory.newDocumentBuilder().parse(input);
+        } catch (IOException | SAXException | ParserConfigurationException e1) {
+            throw new ProcessInstanceMarshallerException("Error trying to unmarshalling a Document Node value", e1);
+        }
+    }
+}
\ No newline at end of file
diff --git a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoNodeInstanceContentsProtobuf.java b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoNodeInstanceContentsProtobuf.java
index 142057afb4..df604aff01 100644
--- a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoNodeInstanceContentsProtobuf.java
+++ b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoNodeInstanceContentsProtobuf.java
@@ -1,25 +1,25 @@
-/**
-* 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.
-*/
-
+/*
+ * 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.
+ */
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: org/jbpm/flow/serialization/protobuf/kogito_node_instance_contents.proto
 
+// Protobuf Java Version: 3.25.0
 package org.jbpm.flow.serialization.protobuf;
 
 public final class KogitoNodeInstanceContentsProtobuf {
@@ -168,7 +168,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
 
         @SuppressWarnings({ "rawtypes" })
         @java.lang.Override
-        protected com.google.protobuf.MapField internalGetMapField(
+        protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                 int number) {
             switch (number) {
                 case 3:
@@ -615,7 +615,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 3:
@@ -627,7 +627,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMutableMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 3:
@@ -718,6 +718,44 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 result.bitField0_ |= to_bitField0_;
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.RuleSetNodeInstanceContent) {
@@ -1590,7 +1628,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
 
         @SuppressWarnings({ "rawtypes" })
         @java.lang.Override
-        protected com.google.protobuf.MapField internalGetMapField(
+        protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                 int number) {
             switch (number) {
                 case 13:
@@ -2580,7 +2618,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 13:
@@ -2592,7 +2630,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMutableMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 13:
@@ -2771,6 +2809,44 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 result.bitField0_ |= to_bitField0_;
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.WorkItemNodeInstanceContent) {
@@ -4352,8 +4428,10 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 } else {
                     workItemDataBuilder_.mergeFrom(value);
                 }
-                bitField0_ |= 0x00000800;
-                onChanged();
+                if (workItemData_ != null) {
+                    bitField0_ |= 0x00000800;
+                    onChanged();
+                }
                 return this;
             }
 
@@ -4751,7 +4829,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
 
         @SuppressWarnings({ "rawtypes" })
         @java.lang.Override
-        protected com.google.protobuf.MapField internalGetMapField(
+        protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                 int number) {
             switch (number) {
                 case 3:
@@ -5198,7 +5276,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 3:
@@ -5210,7 +5288,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMutableMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 3:
@@ -5301,6 +5379,44 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 result.bitField0_ |= to_bitField0_;
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.LambdaSubProcessNodeInstanceContent) {
@@ -5972,7 +6088,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
 
         @SuppressWarnings({ "rawtypes" })
         @java.lang.Override
-        protected com.google.protobuf.MapField internalGetMapField(
+        protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                 int number) {
             switch (number) {
                 case 3:
@@ -6419,7 +6535,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 3:
@@ -6431,7 +6547,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMutableMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 3:
@@ -6522,6 +6638,44 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 result.bitField0_ |= to_bitField0_;
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.SubProcessNodeInstanceContent) {
@@ -7170,7 +7324,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
 
         @SuppressWarnings({ "rawtypes" })
         @java.lang.Override
-        protected com.google.protobuf.MapField internalGetMapField(
+        protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                 int number) {
             switch (number) {
                 case 2:
@@ -7546,7 +7700,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 2:
@@ -7558,7 +7712,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMutableMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 2:
@@ -7642,6 +7796,44 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 }
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.MilestoneNodeInstanceContent) {
@@ -8353,6 +8545,44 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 return result;
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.EventNodeInstanceContent) {
@@ -8856,6 +9086,44 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 result.bitField0_ |= to_bitField0_;
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.TimerNodeInstanceContent) {
@@ -9597,6 +9865,44 @@ public final class KogitoNodeInstanceContentsProtobuf {
                     result.bitField0_ |= to_bitField0_;
                 }
 
+                @java.lang.Override
+                public Builder clone() {
+                    return super.clone();
+                }
+
+                @java.lang.Override
+                public Builder setField(
+                        com.google.protobuf.Descriptors.FieldDescriptor field,
+                        java.lang.Object value) {
+                    return super.setField(field, value);
+                }
+
+                @java.lang.Override
+                public Builder clearField(
+                        com.google.protobuf.Descriptors.FieldDescriptor field) {
+                    return super.clearField(field);
+                }
+
+                @java.lang.Override
+                public Builder clearOneof(
+                        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                    return super.clearOneof(oneof);
+                }
+
+                @java.lang.Override
+                public Builder setRepeatedField(
+                        com.google.protobuf.Descriptors.FieldDescriptor field,
+                        int index, java.lang.Object value) {
+                    return super.setRepeatedField(field, index, value);
+                }
+
+                @java.lang.Override
+                public Builder addRepeatedField(
+                        com.google.protobuf.Descriptors.FieldDescriptor field,
+                        java.lang.Object value) {
+                    return super.addRepeatedField(field, value);
+                }
+
                 @java.lang.Override
                 public Builder mergeFrom(com.google.protobuf.Message other) {
                     if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.JoinNodeInstanceContent.JoinTrigger) {
@@ -10199,6 +10505,44 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 int from_bitField0_ = bitField0_;
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.JoinNodeInstanceContent) {
@@ -10723,7 +11067,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
 
         @SuppressWarnings({ "rawtypes" })
         @java.lang.Override
-        protected com.google.protobuf.MapField internalGetMapField(
+        protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                 int number) {
             switch (number) {
                 case 2:
@@ -11099,7 +11443,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 2:
@@ -11111,7 +11455,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMutableMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 2:
@@ -11195,6 +11539,44 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 }
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.StateNodeInstanceContent) {
@@ -11757,7 +12139,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
 
         @SuppressWarnings({ "rawtypes" })
         @java.lang.Override
-        protected com.google.protobuf.MapField internalGetMapField(
+        protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                 int number) {
             switch (number) {
                 case 3:
@@ -11777,6 +12159,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
                             org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.CompositeContextNodeInstanceContent.Builder.class);
         }
 
+        private int bitField0_;
         public static final int TIMER_INSTANCE_ID_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
         private com.google.protobuf.LazyStringArrayList timerInstanceId_ =
@@ -11832,7 +12215,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
          */
         @java.lang.Override
         public boolean hasContext() {
-            return context_ != null;
+            return ((bitField0_ & 0x00000001) != 0);
         }
 
         /**
@@ -11964,7 +12347,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             for (int i = 0; i < timerInstanceId_.size(); i++) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 1, timerInstanceId_.getRaw(i));
             }
-            if (context_ != null) {
+            if (((bitField0_ & 0x00000001) != 0)) {
                 output.writeMessage(2, getContext());
             }
             com.google.protobuf.GeneratedMessageV3
@@ -11991,7 +12374,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 size += dataSize;
                 size += 1 * getTimerInstanceIdList().size();
             }
-            if (context_ != null) {
+            if (((bitField0_ & 0x00000001) != 0)) {
                 size += com.google.protobuf.CodedOutputStream
                         .computeMessageSize(2, getContext());
             }
@@ -12182,7 +12565,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 3:
@@ -12194,7 +12577,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMutableMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 3:
@@ -12216,13 +12599,19 @@ public final class KogitoNodeInstanceContentsProtobuf {
 
             // Construct using org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.CompositeContextNodeInstanceContent.newBuilder()
             private Builder() {
-
+                maybeForceBuilderInitialization();
             }
 
             private Builder(
                     com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
+                maybeForceBuilderInitialization();
+            }
 
+            private void maybeForceBuilderInitialization() {
+                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
+                    getContextFieldBuilder();
+                }
             }
 
             @java.lang.Override
@@ -12277,15 +12666,56 @@ public final class KogitoNodeInstanceContentsProtobuf {
                     timerInstanceId_.makeImmutable();
                     result.timerInstanceId_ = timerInstanceId_;
                 }
+                int to_bitField0_ = 0;
                 if (((from_bitField0_ & 0x00000002) != 0)) {
                     result.context_ = contextBuilder_ == null
                             ? context_
                             : contextBuilder_.build();
+                    to_bitField0_ |= 0x00000001;
                 }
                 if (((from_bitField0_ & 0x00000004) != 0)) {
                     result.timerInstanceReference_ = internalGetTimerInstanceReference();
                     result.timerInstanceReference_.makeImmutable();
                 }
+                result.bitField0_ |= to_bitField0_;
+            }
+
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
             }
 
             @java.lang.Override
@@ -12591,8 +13021,10 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 } else {
                     contextBuilder_.mergeFrom(value);
                 }
-                bitField0_ |= 0x00000002;
-                onChanged();
+                if (context_ != null) {
+                    bitField0_ |= 0x00000002;
+                    onChanged();
+                }
                 return this;
             }
 
@@ -12987,7 +13419,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
 
         @SuppressWarnings({ "rawtypes" })
         @java.lang.Override
-        protected com.google.protobuf.MapField internalGetMapField(
+        protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                 int number) {
             switch (number) {
                 case 3:
@@ -13007,6 +13439,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
                             org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.DynamicNodeInstanceContent.Builder.class);
         }
 
+        private int bitField0_;
         public static final int TIMER_INSTANCE_ID_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
         private com.google.protobuf.LazyStringArrayList timerInstanceId_ =
@@ -13062,7 +13495,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
          */
         @java.lang.Override
         public boolean hasContext() {
-            return context_ != null;
+            return ((bitField0_ & 0x00000001) != 0);
         }
 
         /**
@@ -13194,7 +13627,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             for (int i = 0; i < timerInstanceId_.size(); i++) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 1, timerInstanceId_.getRaw(i));
             }
-            if (context_ != null) {
+            if (((bitField0_ & 0x00000001) != 0)) {
                 output.writeMessage(2, getContext());
             }
             com.google.protobuf.GeneratedMessageV3
@@ -13221,7 +13654,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 size += dataSize;
                 size += 1 * getTimerInstanceIdList().size();
             }
-            if (context_ != null) {
+            if (((bitField0_ & 0x00000001) != 0)) {
                 size += com.google.protobuf.CodedOutputStream
                         .computeMessageSize(2, getContext());
             }
@@ -13412,7 +13845,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 3:
@@ -13424,7 +13857,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMutableMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 3:
@@ -13446,13 +13879,19 @@ public final class KogitoNodeInstanceContentsProtobuf {
 
             // Construct using org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.DynamicNodeInstanceContent.newBuilder()
             private Builder() {
-
+                maybeForceBuilderInitialization();
             }
 
             private Builder(
                     com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
+                maybeForceBuilderInitialization();
+            }
 
+            private void maybeForceBuilderInitialization() {
+                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
+                    getContextFieldBuilder();
+                }
             }
 
             @java.lang.Override
@@ -13507,15 +13946,56 @@ public final class KogitoNodeInstanceContentsProtobuf {
                     timerInstanceId_.makeImmutable();
                     result.timerInstanceId_ = timerInstanceId_;
                 }
+                int to_bitField0_ = 0;
                 if (((from_bitField0_ & 0x00000002) != 0)) {
                     result.context_ = contextBuilder_ == null
                             ? context_
                             : contextBuilder_.build();
+                    to_bitField0_ |= 0x00000001;
                 }
                 if (((from_bitField0_ & 0x00000004) != 0)) {
                     result.timerInstanceReference_ = internalGetTimerInstanceReference();
                     result.timerInstanceReference_.makeImmutable();
                 }
+                result.bitField0_ |= to_bitField0_;
+            }
+
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
             }
 
             @java.lang.Override
@@ -13821,8 +14301,10 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 } else {
                     contextBuilder_.mergeFrom(value);
                 }
-                bitField0_ |= 0x00000002;
-                onChanged();
+                if (context_ != null) {
+                    bitField0_ |= 0x00000002;
+                    onChanged();
+                }
                 return this;
             }
 
@@ -14217,7 +14699,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
 
         @SuppressWarnings({ "rawtypes" })
         @java.lang.Override
-        protected com.google.protobuf.MapField internalGetMapField(
+        protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                 int number) {
             switch (number) {
                 case 3:
@@ -14237,6 +14719,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
                             org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.EventSubProcessNodeInstanceContent.Builder.class);
         }
 
+        private int bitField0_;
         public static final int TIMER_INSTANCE_ID_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
         private com.google.protobuf.LazyStringArrayList timerInstanceId_ =
@@ -14292,7 +14775,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
          */
         @java.lang.Override
         public boolean hasContext() {
-            return context_ != null;
+            return ((bitField0_ & 0x00000001) != 0);
         }
 
         /**
@@ -14424,7 +14907,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             for (int i = 0; i < timerInstanceId_.size(); i++) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 1, timerInstanceId_.getRaw(i));
             }
-            if (context_ != null) {
+            if (((bitField0_ & 0x00000001) != 0)) {
                 output.writeMessage(2, getContext());
             }
             com.google.protobuf.GeneratedMessageV3
@@ -14451,7 +14934,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 size += dataSize;
                 size += 1 * getTimerInstanceIdList().size();
             }
-            if (context_ != null) {
+            if (((bitField0_ & 0x00000001) != 0)) {
                 size += com.google.protobuf.CodedOutputStream
                         .computeMessageSize(2, getContext());
             }
@@ -14642,7 +15125,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 3:
@@ -14654,7 +15137,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMutableMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 3:
@@ -14676,13 +15159,19 @@ public final class KogitoNodeInstanceContentsProtobuf {
 
             // Construct using org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.EventSubProcessNodeInstanceContent.newBuilder()
             private Builder() {
-
+                maybeForceBuilderInitialization();
             }
 
             private Builder(
                     com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
+                maybeForceBuilderInitialization();
+            }
 
+            private void maybeForceBuilderInitialization() {
+                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
+                    getContextFieldBuilder();
+                }
             }
 
             @java.lang.Override
@@ -14737,15 +15226,56 @@ public final class KogitoNodeInstanceContentsProtobuf {
                     timerInstanceId_.makeImmutable();
                     result.timerInstanceId_ = timerInstanceId_;
                 }
+                int to_bitField0_ = 0;
                 if (((from_bitField0_ & 0x00000002) != 0)) {
                     result.context_ = contextBuilder_ == null
                             ? context_
                             : contextBuilder_.build();
+                    to_bitField0_ |= 0x00000001;
                 }
                 if (((from_bitField0_ & 0x00000004) != 0)) {
                     result.timerInstanceReference_ = internalGetTimerInstanceReference();
                     result.timerInstanceReference_.makeImmutable();
                 }
+                result.bitField0_ |= to_bitField0_;
+            }
+
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
             }
 
             @java.lang.Override
@@ -15051,8 +15581,10 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 } else {
                     contextBuilder_.mergeFrom(value);
                 }
-                bitField0_ |= 0x00000002;
-                onChanged();
+                if (context_ != null) {
+                    bitField0_ |= 0x00000002;
+                    onChanged();
+                }
                 return this;
             }
 
@@ -15468,7 +16000,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
 
         @SuppressWarnings({ "rawtypes" })
         @java.lang.Override
-        protected com.google.protobuf.MapField internalGetMapField(
+        protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                 int number) {
             switch (number) {
                 case 6:
@@ -15488,6 +16020,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
                             org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.ForEachNodeInstanceContent.Builder.class);
         }
 
+        private int bitField0_;
         public static final int TIMER_INSTANCE_ID_FIELD_NUMBER = 1;
         @SuppressWarnings("serial")
         private com.google.protobuf.LazyStringArrayList timerInstanceId_ =
@@ -15543,7 +16076,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
          */
         @java.lang.Override
         public boolean hasContext() {
-            return context_ != null;
+            return ((bitField0_ & 0x00000001) != 0);
         }
 
         /**
@@ -15714,7 +16247,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             for (int i = 0; i < timerInstanceId_.size(); i++) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 1, timerInstanceId_.getRaw(i));
             }
-            if (context_ != null) {
+            if (((bitField0_ & 0x00000001) != 0)) {
                 output.writeMessage(2, getContext());
             }
             if (totalInstances_ != 0) {
@@ -15750,7 +16283,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 size += dataSize;
                 size += 1 * getTimerInstanceIdList().size();
             }
-            if (context_ != null) {
+            if (((bitField0_ & 0x00000001) != 0)) {
                 size += com.google.protobuf.CodedOutputStream
                         .computeMessageSize(2, getContext());
             }
@@ -15966,7 +16499,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 6:
@@ -15978,7 +16511,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMutableMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 6:
@@ -16000,13 +16533,19 @@ public final class KogitoNodeInstanceContentsProtobuf {
 
             // Construct using org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.ForEachNodeInstanceContent.newBuilder()
             private Builder() {
-
+                maybeForceBuilderInitialization();
             }
 
             private Builder(
                     com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
                 super(parent);
+                maybeForceBuilderInitialization();
+            }
 
+            private void maybeForceBuilderInitialization() {
+                if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
+                    getContextFieldBuilder();
+                }
             }
 
             @java.lang.Override
@@ -16064,10 +16603,12 @@ public final class KogitoNodeInstanceContentsProtobuf {
                     timerInstanceId_.makeImmutable();
                     result.timerInstanceId_ = timerInstanceId_;
                 }
+                int to_bitField0_ = 0;
                 if (((from_bitField0_ & 0x00000002) != 0)) {
                     result.context_ = contextBuilder_ == null
                             ? context_
                             : contextBuilder_.build();
+                    to_bitField0_ |= 0x00000001;
                 }
                 if (((from_bitField0_ & 0x00000004) != 0)) {
                     result.totalInstances_ = totalInstances_;
@@ -16082,6 +16623,45 @@ public final class KogitoNodeInstanceContentsProtobuf {
                     result.timerInstanceReference_ = internalGetTimerInstanceReference();
                     result.timerInstanceReference_.makeImmutable();
                 }
+                result.bitField0_ |= to_bitField0_;
+            }
+
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
             }
 
             @java.lang.Override
@@ -16411,8 +16991,10 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 } else {
                     contextBuilder_.mergeFrom(value);
                 }
-                bitField0_ |= 0x00000002;
-                onChanged();
+                if (context_ != null) {
+                    bitField0_ |= 0x00000002;
+                    onChanged();
+                }
                 return this;
             }
 
@@ -17152,6 +17734,44 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 }
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoNodeInstanceContentsProtobuf.AsyncEventNodeInstanceContent) {
@@ -17542,7 +18162,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 getDescriptor().getMessageTypes().get(0);
         internal_static_org_jbpm_flow_serialization_protobuf_RuleSetNodeInstanceContent_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 internal_static_org_jbpm_flow_serialization_protobuf_RuleSetNodeInstanceContent_descriptor,
-                new java.lang.String[] { "TimerInstanceId", "RuleFlowGroup", "TimerInstanceReference", "RuleFlowGroup", });
+                new java.lang.String[] { "TimerInstanceId", "RuleFlowGroup", "TimerInstanceReference", });
         internal_static_org_jbpm_flow_serialization_protobuf_RuleSetNodeInstanceContent_TimerInstanceReferenceEntry_descriptor =
                 internal_static_org_jbpm_flow_serialization_protobuf_RuleSetNodeInstanceContent_descriptor.getNestedTypes().get(0);
         internal_static_org_jbpm_flow_serialization_protobuf_RuleSetNodeInstanceContent_TimerInstanceReferenceEntry_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
@@ -17553,7 +18173,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
         internal_static_org_jbpm_flow_serialization_protobuf_WorkItemNodeInstanceContent_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 internal_static_org_jbpm_flow_serialization_protobuf_WorkItemNodeInstanceContent_descriptor,
                 new java.lang.String[] { "WorkItemId", "TimerInstanceId", "ErrorHandlingProcessInstanceId", "State", "Variable", "Result", "PhaseId", "PhaseStatus", "Name", "StartDate",
-                        "CompleteDate", "WorkItemData", "TimerInstanceReference", "ErrorHandlingProcessInstanceId", "PhaseId", "PhaseStatus", "Name", "StartDate", "CompleteDate", "WorkItemData", });
+                        "CompleteDate", "WorkItemData", "TimerInstanceReference", });
         internal_static_org_jbpm_flow_serialization_protobuf_WorkItemNodeInstanceContent_TimerInstanceReferenceEntry_descriptor =
                 internal_static_org_jbpm_flow_serialization_protobuf_WorkItemNodeInstanceContent_descriptor.getNestedTypes().get(0);
         internal_static_org_jbpm_flow_serialization_protobuf_WorkItemNodeInstanceContent_TimerInstanceReferenceEntry_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
@@ -17563,7 +18183,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 getDescriptor().getMessageTypes().get(2);
         internal_static_org_jbpm_flow_serialization_protobuf_LambdaSubProcessNodeInstanceContent_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 internal_static_org_jbpm_flow_serialization_protobuf_LambdaSubProcessNodeInstanceContent_descriptor,
-                new java.lang.String[] { "ProcessInstanceId", "TimerInstanceId", "TimerInstanceReference", "ProcessInstanceId", });
+                new java.lang.String[] { "ProcessInstanceId", "TimerInstanceId", "TimerInstanceReference", });
         internal_static_org_jbpm_flow_serialization_protobuf_LambdaSubProcessNodeInstanceContent_TimerInstanceReferenceEntry_descriptor =
                 internal_static_org_jbpm_flow_serialization_protobuf_LambdaSubProcessNodeInstanceContent_descriptor.getNestedTypes().get(0);
         internal_static_org_jbpm_flow_serialization_protobuf_LambdaSubProcessNodeInstanceContent_TimerInstanceReferenceEntry_fieldAccessorTable =
@@ -17574,7 +18194,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 getDescriptor().getMessageTypes().get(3);
         internal_static_org_jbpm_flow_serialization_protobuf_SubProcessNodeInstanceContent_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 internal_static_org_jbpm_flow_serialization_protobuf_SubProcessNodeInstanceContent_descriptor,
-                new java.lang.String[] { "ProcessInstanceId", "TimerInstanceId", "TimerInstanceReference", "ProcessInstanceId", });
+                new java.lang.String[] { "ProcessInstanceId", "TimerInstanceId", "TimerInstanceReference", });
         internal_static_org_jbpm_flow_serialization_protobuf_SubProcessNodeInstanceContent_TimerInstanceReferenceEntry_descriptor =
                 internal_static_org_jbpm_flow_serialization_protobuf_SubProcessNodeInstanceContent_descriptor.getNestedTypes().get(0);
         internal_static_org_jbpm_flow_serialization_protobuf_SubProcessNodeInstanceContent_TimerInstanceReferenceEntry_fieldAccessorTable =
@@ -17601,7 +18221,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 getDescriptor().getMessageTypes().get(6);
         internal_static_org_jbpm_flow_serialization_protobuf_TimerNodeInstanceContent_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 internal_static_org_jbpm_flow_serialization_protobuf_TimerNodeInstanceContent_descriptor,
-                new java.lang.String[] { "TimerId", "TimerId", });
+                new java.lang.String[] { "TimerId", });
         internal_static_org_jbpm_flow_serialization_protobuf_JoinNodeInstanceContent_descriptor =
                 getDescriptor().getMessageTypes().get(7);
         internal_static_org_jbpm_flow_serialization_protobuf_JoinNodeInstanceContent_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
@@ -17611,7 +18231,7 @@ public final class KogitoNodeInstanceContentsProtobuf {
                 internal_static_org_jbpm_flow_serialization_protobuf_JoinNodeInstanceContent_descriptor.getNestedTypes().get(0);
         internal_static_org_jbpm_flow_serialization_protobuf_JoinNodeInstanceContent_JoinTrigger_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 internal_static_org_jbpm_flow_serialization_protobuf_JoinNodeInstanceContent_JoinTrigger_descriptor,
-                new java.lang.String[] { "NodeId", "Counter", "NodeId", "Counter", });
+                new java.lang.String[] { "NodeId", "Counter", });
         internal_static_org_jbpm_flow_serialization_protobuf_StateNodeInstanceContent_descriptor =
                 getDescriptor().getMessageTypes().get(8);
         internal_static_org_jbpm_flow_serialization_protobuf_StateNodeInstanceContent_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
diff --git a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoProcessInstanceProtobuf.java b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoProcessInstanceProtobuf.java
index b7f4410f76..1e09647188 100644
--- a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoProcessInstanceProtobuf.java
+++ b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoProcessInstanceProtobuf.java
@@ -1,25 +1,25 @@
-/**
-* 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.
-*/
-
+/*
+ * 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.
+ */
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: org/jbpm/flow/serialization/protobuf/kogito_process_instance.proto
 
+// Protobuf Java Version: 3.25.0
 package org.jbpm.flow.serialization.protobuf;
 
 public final class KogitoProcessInstanceProtobuf {
@@ -2168,6 +2168,44 @@ public final class KogitoProcessInstanceProtobuf {
                 result.bitField0_ |= to_bitField0_;
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoProcessInstanceProtobuf.ProcessInstance) {
@@ -3914,8 +3952,10 @@ public final class KogitoProcessInstanceProtobuf {
                 } else {
                     slaBuilder_.mergeFrom(value);
                 }
-                bitField0_ |= 0x00020000;
-                onChanged();
+                if (sla_ != null) {
+                    bitField0_ |= 0x00020000;
+                    onChanged();
+                }
                 return this;
             }
 
@@ -4041,8 +4081,10 @@ public final class KogitoProcessInstanceProtobuf {
                 } else {
                     contextBuilder_.mergeFrom(value);
                 }
-                bitField0_ |= 0x00040000;
-                onChanged();
+                if (context_ != null) {
+                    bitField0_ |= 0x00040000;
+                    onChanged();
+                }
                 return this;
             }
 
@@ -4702,8 +4744,7 @@ public final class KogitoProcessInstanceProtobuf {
                 internal_static_org_jbpm_flow_serialization_protobuf_ProcessInstance_descriptor,
                 new java.lang.String[] { "ProcessType", "ProcessId", "ProcessVersion", "Id", "ParentProcessInstanceId", "BusinessKey", "DeploymentId", "Description", "State", "StartDate",
                         "NodeInstanceCounter", "SignalCompletion", "RootProcessInstanceId", "RootProcessId", "ErrorNodeId", "ErrorMessage", "ReferenceId", "Sla", "Context", "SwimlaneContext",
-                        "CompletedNodeIds", "CancelTimerId", "ParentProcessInstanceId", "BusinessKey", "DeploymentId", "Description", "StartDate", "NodeInstanceCounter", "RootProcessInstanceId",
-                        "RootProcessId", "ErrorNodeId", "ErrorMessage", "ReferenceId", "Sla", "Context", "CancelTimerId", });
+                        "CompletedNodeIds", "CancelTimerId", });
         org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.getDescriptor();
     }
 
diff --git a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoTypesProtobuf.java b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoTypesProtobuf.java
index 6e27e48caa..51922a02ed 100644
--- a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoTypesProtobuf.java
+++ b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoTypesProtobuf.java
@@ -1,25 +1,25 @@
-/**
-* 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.
-*/
-
+/*
+ * 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.
+ */
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: org/jbpm/flow/serialization/protobuf/kogito_types.proto
 
+// Protobuf Java Version: 3.25.0
 package org.jbpm.flow.serialization.protobuf;
 
 public final class KogitoTypesProtobuf {
@@ -36,8 +36,616 @@ public final class KogitoTypesProtobuf {
                 (com.google.protobuf.ExtensionRegistryLite) registry);
     }
 
-    public interface JsonNodeOrBuilder extends
-            // @@protoc_insertion_point(interface_extends:org.jbpm.flow.serialization.protobuf.JsonNode)
+    public interface JsonNodeOrBuilder extends
+            // @@protoc_insertion_point(interface_extends:org.jbpm.flow.serialization.protobuf.JsonNode)
+            com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * <code>string content = 1;</code>
+         * 
+         * @return The content.
+         */
+        java.lang.String getContent();
+
+        /**
+         * <code>string content = 1;</code>
+         * 
+         * @return The bytes for content.
+         */
+        com.google.protobuf.ByteString
+                getContentBytes();
+    }
+
+    /**
+     * Protobuf type {@code org.jbpm.flow.serialization.protobuf.JsonNode}
+     */
+    public static final class JsonNode extends
+            com.google.protobuf.GeneratedMessageV3 implements
+            // @@protoc_insertion_point(message_implements:org.jbpm.flow.serialization.protobuf.JsonNode)
+            JsonNodeOrBuilder {
+        private static final long serialVersionUID = 0L;
+
+        // Use JsonNode.newBuilder() to construct.
+        private JsonNode(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+            super(builder);
+        }
+
+        private JsonNode() {
+            content_ = "";
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(
+                UnusedPrivateParameter unused) {
+            return new JsonNode();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor
+                getDescriptor() {
+            return org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.internal_static_org_jbpm_flow_serialization_protobuf_JsonNode_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+                internalGetFieldAccessorTable() {
+            return org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.internal_static_org_jbpm_flow_serialization_protobuf_JsonNode_fieldAccessorTable
+                    .ensureFieldAccessorsInitialized(
+                            org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode.class, org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode.Builder.class);
+        }
+
+        public static final int CONTENT_FIELD_NUMBER = 1;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object content_ = "";
+
+        /**
+         * <code>string content = 1;</code>
+         * 
+         * @return The content.
+         */
+        @java.lang.Override
+        public java.lang.String getContent() {
+            java.lang.Object ref = content_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs =
+                        (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                content_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * <code>string content = 1;</code>
+         * 
+         * @return The bytes for content.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString
+                getContentBytes() {
+            java.lang.Object ref = content_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b =
+                        com.google.protobuf.ByteString.copyFromUtf8(
+                                (java.lang.String) ref);
+                content_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        private byte memoizedIsInitialized = -1;
+
+        @java.lang.Override
+        public final boolean isInitialized() {
+            byte isInitialized = memoizedIsInitialized;
+            if (isInitialized == 1)
+                return true;
+            if (isInitialized == 0)
+                return false;
+
+            memoizedIsInitialized = 1;
+            return true;
+        }
+
+        @java.lang.Override
+        public void writeTo(com.google.protobuf.CodedOutputStream output)
+                throws java.io.IOException {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(content_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 1, content_);
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+
+            size = 0;
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(content_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, content_);
+            }
+            size += getUnknownFields().getSerializedSize();
+            memoizedSize = size;
+            return size;
+        }
+
+        @java.lang.Override
+        public boolean equals(final java.lang.Object obj) {
+            if (obj == this) {
+                return true;
+            }
+            if (!(obj instanceof org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode)) {
+                return super.equals(obj);
+            }
+            org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode other = (org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode) obj;
+
+            if (!getContent()
+                    .equals(other.getContent()))
+                return false;
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            hash = (37 * hash) + CONTENT_FIELD_NUMBER;
+            hash = (53 * hash) + getContent().hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(
+                java.nio.ByteBuffer data)
+                throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(
+                java.nio.ByteBuffer data,
+                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(
+                com.google.protobuf.ByteString data)
+                throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(
+                com.google.protobuf.ByteString data,
+                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(byte[] data)
+                throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(
+                byte[] data,
+                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(java.io.InputStream input)
+                throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3
+                    .parseWithIOException(PARSER, input);
+        }
+
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(
+                java.io.InputStream input,
+                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3
+                    .parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseDelimitedFrom(java.io.InputStream input)
+                throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3
+                    .parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseDelimitedFrom(
+                java.io.InputStream input,
+                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3
+                    .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(
+                com.google.protobuf.CodedInputStream input)
+                throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3
+                    .parseWithIOException(PARSER, input);
+        }
+
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(
+                com.google.protobuf.CodedInputStream input,
+                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3
+                    .parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        @java.lang.Override
+        public Builder newBuilderForType() {
+            return newBuilder();
+        }
+
+        public static Builder newBuilder() {
+            return DEFAULT_INSTANCE.toBuilder();
+        }
+
+        public static Builder newBuilder(org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode prototype) {
+            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+        }
+
+        @java.lang.Override
+        public Builder toBuilder() {
+            return this == DEFAULT_INSTANCE
+                    ? new Builder()
+                    : new Builder().mergeFrom(this);
+        }
+
+        @java.lang.Override
+        protected Builder newBuilderForType(
+                com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+            Builder builder = new Builder(parent);
+            return builder;
+        }
+
+        /**
+         * Protobuf type {@code org.jbpm.flow.serialization.protobuf.JsonNode}
+         */
+        public static final class Builder extends
+                com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+                // @@protoc_insertion_point(builder_implements:org.jbpm.flow.serialization.protobuf.JsonNode)
+                org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNodeOrBuilder {
+            public static final com.google.protobuf.Descriptors.Descriptor
+                    getDescriptor() {
+                return org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.internal_static_org_jbpm_flow_serialization_protobuf_JsonNode_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+                    internalGetFieldAccessorTable() {
+                return org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.internal_static_org_jbpm_flow_serialization_protobuf_JsonNode_fieldAccessorTable
+                        .ensureFieldAccessorsInitialized(
+                                org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode.class, org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode.Builder.class);
+            }
+
+            // Construct using org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode.newBuilder()
+            private Builder() {
+
+            }
+
+            private Builder(
+                    com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                content_ = "";
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor
+                    getDescriptorForType() {
+                return org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.internal_static_org_jbpm_flow_serialization_protobuf_JsonNode_descriptor;
+            }
+
+            @java.lang.Override
+            public org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode getDefaultInstanceForType() {
+                return org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode build() {
+                org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode buildPartial() {
+                org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode result = new org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartial0(org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.content_ = content_;
+                }
+            }
+
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode) {
+                    return mergeFrom((org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode other) {
+                if (other == org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode.getDefaultInstance())
+                    return this;
+                if (!other.getContent().isEmpty()) {
+                    content_ = other.content_;
+                    bitField0_ |= 0x00000001;
+                    onChanged();
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                onChanged();
+                return this;
+            }
+
+            @java.lang.Override
+            public final boolean isInitialized() {
+                return true;
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(
+                    com.google.protobuf.CodedInputStream input,
+                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                    throws java.io.IOException {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch (tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10: {
+                                content_ = input.readStringRequireUtf8();
+                                bitField0_ |= 0x00000001;
+                                break;
+                            } // case 10
+                            default: {
+                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                    done = true; // was an endgroup tag
+                                }
+                                break;
+                            } // default:
+                        } // switch (tag)
+                    } // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                } // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private java.lang.Object content_ = "";
+
+            /**
+             * <code>string content = 1;</code>
+             * 
+             * @return The content.
+             */
+            public java.lang.String getContent() {
+                java.lang.Object ref = content_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs =
+                            (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    content_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>string content = 1;</code>
+             * 
+             * @return The bytes for content.
+             */
+            public com.google.protobuf.ByteString
+                    getContentBytes() {
+                java.lang.Object ref = content_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b =
+                            com.google.protobuf.ByteString.copyFromUtf8(
+                                    (java.lang.String) ref);
+                    content_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>string content = 1;</code>
+             * 
+             * @param value The content to set.
+             * @return This builder for chaining.
+             */
+            public Builder setContent(
+                    java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                content_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string content = 1;</code>
+             * 
+             * @return This builder for chaining.
+             */
+            public Builder clearContent() {
+                content_ = getDefaultInstance().getContent();
+                bitField0_ = (bitField0_ & ~0x00000001);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>string content = 1;</code>
+             * 
+             * @param value The bytes for content to set.
+             * @return This builder for chaining.
+             */
+            public Builder setContentBytes(
+                    com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                content_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            @java.lang.Override
+            public final Builder setUnknownFields(
+                    final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.setUnknownFields(unknownFields);
+            }
+
+            @java.lang.Override
+            public final Builder mergeUnknownFields(
+                    final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.mergeUnknownFields(unknownFields);
+            }
+
+            // @@protoc_insertion_point(builder_scope:org.jbpm.flow.serialization.protobuf.JsonNode)
+        }
+
+        // @@protoc_insertion_point(class_scope:org.jbpm.flow.serialization.protobuf.JsonNode)
+        private static final org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode DEFAULT_INSTANCE;
+        static {
+            DEFAULT_INSTANCE = new org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode();
+        }
+
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser<JsonNode> PARSER = new com.google.protobuf.AbstractParser<JsonNode>() {
+            @java.lang.Override
+            public JsonNode parsePartialFrom(
+                    com.google.protobuf.CodedInputStream input,
+                    com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                    throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e)
+                            .setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser<JsonNode> parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser<JsonNode> getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+
+    }
+
+    public interface DocumentOrBuilder extends
+            // @@protoc_insertion_point(interface_extends:org.jbpm.flow.serialization.protobuf.Document)
             com.google.protobuf.MessageOrBuilder {
 
         /**
@@ -57,20 +665,20 @@ public final class KogitoTypesProtobuf {
     }
 
     /**
-     * Protobuf type {@code org.jbpm.flow.serialization.protobuf.JsonNode}
+     * Protobuf type {@code org.jbpm.flow.serialization.protobuf.Document}
      */
-    public static final class JsonNode extends
+    public static final class Document extends
             com.google.protobuf.GeneratedMessageV3 implements
-            // @@protoc_insertion_point(message_implements:org.jbpm.flow.serialization.protobuf.JsonNode)
-            JsonNodeOrBuilder {
+            // @@protoc_insertion_point(message_implements:org.jbpm.flow.serialization.protobuf.Document)
+            DocumentOrBuilder {
         private static final long serialVersionUID = 0L;
 
-        // Use JsonNode.newBuilder() to construct.
-        private JsonNode(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+        // Use Document.newBuilder() to construct.
+        private Document(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
             super(builder);
         }
 
-        private JsonNode() {
+        private Document() {
             content_ = "";
         }
 
@@ -78,20 +686,20 @@ public final class KogitoTypesProtobuf {
         @SuppressWarnings({ "unused" })
         protected java.lang.Object newInstance(
                 UnusedPrivateParameter unused) {
-            return new JsonNode();
+            return new Document();
         }
 
         public static final com.google.protobuf.Descriptors.Descriptor
                 getDescriptor() {
-            return org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.internal_static_org_jbpm_flow_serialization_protobuf_JsonNode_descriptor;
+            return org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.internal_static_org_jbpm_flow_serialization_protobuf_Document_descriptor;
         }
 
         @java.lang.Override
         protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
                 internalGetFieldAccessorTable() {
-            return org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.internal_static_org_jbpm_flow_serialization_protobuf_JsonNode_fieldAccessorTable
+            return org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.internal_static_org_jbpm_flow_serialization_protobuf_Document_fieldAccessorTable
                     .ensureFieldAccessorsInitialized(
-                            org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode.class, org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode.Builder.class);
+                            org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document.class, org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document.Builder.class);
         }
 
         public static final int CONTENT_FIELD_NUMBER = 1;
@@ -180,10 +788,10 @@ public final class KogitoTypesProtobuf {
             if (obj == this) {
                 return true;
             }
-            if (!(obj instanceof org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode)) {
+            if (!(obj instanceof org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document)) {
                 return super.equals(obj);
             }
-            org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode other = (org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode) obj;
+            org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document other = (org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document) obj;
 
             if (!getContent()
                     .equals(other.getContent()))
@@ -207,51 +815,51 @@ public final class KogitoTypesProtobuf {
             return hash;
         }
 
-        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document parseFrom(
                 java.nio.ByteBuffer data)
                 throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document parseFrom(
                 java.nio.ByteBuffer data,
                 com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                 throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document parseFrom(
                 com.google.protobuf.ByteString data)
                 throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document parseFrom(
                 com.google.protobuf.ByteString data,
                 com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                 throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(byte[] data)
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document parseFrom(byte[] data)
                 throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data);
         }
 
-        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document parseFrom(
                 byte[] data,
                 com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                 throws com.google.protobuf.InvalidProtocolBufferException {
             return PARSER.parseFrom(data, extensionRegistry);
         }
 
-        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(java.io.InputStream input)
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document parseFrom(java.io.InputStream input)
                 throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3
                     .parseWithIOException(PARSER, input);
         }
 
-        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document parseFrom(
                 java.io.InputStream input,
                 com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                 throws java.io.IOException {
@@ -259,13 +867,13 @@ public final class KogitoTypesProtobuf {
                     .parseWithIOException(PARSER, input, extensionRegistry);
         }
 
-        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseDelimitedFrom(java.io.InputStream input)
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document parseDelimitedFrom(java.io.InputStream input)
                 throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3
                     .parseDelimitedWithIOException(PARSER, input);
         }
 
-        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseDelimitedFrom(
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document parseDelimitedFrom(
                 java.io.InputStream input,
                 com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                 throws java.io.IOException {
@@ -273,14 +881,14 @@ public final class KogitoTypesProtobuf {
                     .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
         }
 
-        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document parseFrom(
                 com.google.protobuf.CodedInputStream input)
                 throws java.io.IOException {
             return com.google.protobuf.GeneratedMessageV3
                     .parseWithIOException(PARSER, input);
         }
 
-        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode parseFrom(
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document parseFrom(
                 com.google.protobuf.CodedInputStream input,
                 com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                 throws java.io.IOException {
@@ -297,7 +905,7 @@ public final class KogitoTypesProtobuf {
             return DEFAULT_INSTANCE.toBuilder();
         }
 
-        public static Builder newBuilder(org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode prototype) {
+        public static Builder newBuilder(org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document prototype) {
             return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
         }
 
@@ -316,26 +924,26 @@ public final class KogitoTypesProtobuf {
         }
 
         /**
-         * Protobuf type {@code org.jbpm.flow.serialization.protobuf.JsonNode}
+         * Protobuf type {@code org.jbpm.flow.serialization.protobuf.Document}
          */
         public static final class Builder extends
                 com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-                // @@protoc_insertion_point(builder_implements:org.jbpm.flow.serialization.protobuf.JsonNode)
-                org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNodeOrBuilder {
+                // @@protoc_insertion_point(builder_implements:org.jbpm.flow.serialization.protobuf.Document)
+                org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.DocumentOrBuilder {
             public static final com.google.protobuf.Descriptors.Descriptor
                     getDescriptor() {
-                return org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.internal_static_org_jbpm_flow_serialization_protobuf_JsonNode_descriptor;
+                return org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.internal_static_org_jbpm_flow_serialization_protobuf_Document_descriptor;
             }
 
             @java.lang.Override
             protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
                     internalGetFieldAccessorTable() {
-                return org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.internal_static_org_jbpm_flow_serialization_protobuf_JsonNode_fieldAccessorTable
+                return org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.internal_static_org_jbpm_flow_serialization_protobuf_Document_fieldAccessorTable
                         .ensureFieldAccessorsInitialized(
-                                org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode.class, org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode.Builder.class);
+                                org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document.class, org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document.Builder.class);
             }
 
-            // Construct using org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode.newBuilder()
+            // Construct using org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document.newBuilder()
             private Builder() {
 
             }
@@ -357,17 +965,17 @@ public final class KogitoTypesProtobuf {
             @java.lang.Override
             public com.google.protobuf.Descriptors.Descriptor
                     getDescriptorForType() {
-                return org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.internal_static_org_jbpm_flow_serialization_protobuf_JsonNode_descriptor;
+                return org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.internal_static_org_jbpm_flow_serialization_protobuf_Document_descriptor;
             }
 
             @java.lang.Override
-            public org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode getDefaultInstanceForType() {
-                return org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode.getDefaultInstance();
+            public org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document getDefaultInstanceForType() {
+                return org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document.getDefaultInstance();
             }
 
             @java.lang.Override
-            public org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode build() {
-                org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode result = buildPartial();
+            public org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document build() {
+                org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document result = buildPartial();
                 if (!result.isInitialized()) {
                     throw newUninitializedMessageException(result);
                 }
@@ -375,8 +983,8 @@ public final class KogitoTypesProtobuf {
             }
 
             @java.lang.Override
-            public org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode buildPartial() {
-                org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode result = new org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode(this);
+            public org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document buildPartial() {
+                org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document result = new org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document(this);
                 if (bitField0_ != 0) {
                     buildPartial0(result);
                 }
@@ -384,25 +992,63 @@ public final class KogitoTypesProtobuf {
                 return result;
             }
 
-            private void buildPartial0(org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode result) {
+            private void buildPartial0(org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document result) {
                 int from_bitField0_ = bitField0_;
                 if (((from_bitField0_ & 0x00000001) != 0)) {
                     result.content_ = content_;
                 }
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
-                if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode) {
-                    return mergeFrom((org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode) other);
+                if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document) {
+                    return mergeFrom((org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document) other);
                 } else {
                     super.mergeFrom(other);
                     return this;
                 }
             }
 
-            public Builder mergeFrom(org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode other) {
-                if (other == org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode.getDefaultInstance())
+            public Builder mergeFrom(org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document other) {
+                if (other == org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document.getDefaultInstance())
                     return this;
                 if (!other.getContent().isEmpty()) {
                     content_ = other.content_;
@@ -556,22 +1202,22 @@ public final class KogitoTypesProtobuf {
                 return super.mergeUnknownFields(unknownFields);
             }
 
-            // @@protoc_insertion_point(builder_scope:org.jbpm.flow.serialization.protobuf.JsonNode)
+            // @@protoc_insertion_point(builder_scope:org.jbpm.flow.serialization.protobuf.Document)
         }
 
-        // @@protoc_insertion_point(class_scope:org.jbpm.flow.serialization.protobuf.JsonNode)
-        private static final org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode DEFAULT_INSTANCE;
+        // @@protoc_insertion_point(class_scope:org.jbpm.flow.serialization.protobuf.Document)
+        private static final org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document DEFAULT_INSTANCE;
         static {
-            DEFAULT_INSTANCE = new org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode();
+            DEFAULT_INSTANCE = new org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document();
         }
 
-        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode getDefaultInstance() {
+        public static org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document getDefaultInstance() {
             return DEFAULT_INSTANCE;
         }
 
-        private static final com.google.protobuf.Parser<JsonNode> PARSER = new com.google.protobuf.AbstractParser<JsonNode>() {
+        private static final com.google.protobuf.Parser<Document> PARSER = new com.google.protobuf.AbstractParser<Document>() {
             @java.lang.Override
-            public JsonNode parsePartialFrom(
+            public Document parsePartialFrom(
                     com.google.protobuf.CodedInputStream input,
                     com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                     throws com.google.protobuf.InvalidProtocolBufferException {
@@ -590,17 +1236,17 @@ public final class KogitoTypesProtobuf {
             }
         };
 
-        public static com.google.protobuf.Parser<JsonNode> parser() {
+        public static com.google.protobuf.Parser<Document> parser() {
             return PARSER;
         }
 
         @java.lang.Override
-        public com.google.protobuf.Parser<JsonNode> getParserForType() {
+        public com.google.protobuf.Parser<Document> getParserForType() {
             return PARSER;
         }
 
         @java.lang.Override
-        public org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.JsonNode getDefaultInstanceForType() {
+        public org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Document getDefaultInstanceForType() {
             return DEFAULT_INSTANCE;
         }
 
@@ -1123,6 +1769,44 @@ public final class KogitoTypesProtobuf {
                 result.bitField0_ |= to_bitField0_;
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.Variable) {
@@ -1454,8 +2138,10 @@ public final class KogitoTypesProtobuf {
                 } else {
                     valueBuilder_.mergeFrom(value);
                 }
-                bitField0_ |= 0x00000004;
-                onChanged();
+                if (value_ != null) {
+                    bitField0_ |= 0x00000004;
+                    onChanged();
+                }
                 return this;
             }
 
@@ -1807,7 +2493,7 @@ public final class KogitoTypesProtobuf {
          */
         @java.lang.Override
         public boolean hasContent() {
-            return content_ != null;
+            return ((bitField0_ & 0x00000001) != 0);
         }
 
         /**
@@ -1838,7 +2524,7 @@ public final class KogitoTypesProtobuf {
          */
         @java.lang.Override
         public boolean hasLevel() {
-            return ((bitField0_ & 0x00000001) != 0);
+            return ((bitField0_ & 0x00000002) != 0);
         }
 
         /**
@@ -1861,7 +2547,7 @@ public final class KogitoTypesProtobuf {
          */
         @java.lang.Override
         public boolean hasTriggerDate() {
-            return ((bitField0_ & 0x00000002) != 0);
+            return ((bitField0_ & 0x00000004) != 0);
         }
 
         /**
@@ -1884,7 +2570,7 @@ public final class KogitoTypesProtobuf {
          */
         @java.lang.Override
         public boolean hasSla() {
-            return ((bitField0_ & 0x00000004) != 0);
+            return ((bitField0_ & 0x00000008) != 0);
         }
 
         /**
@@ -1928,16 +2614,16 @@ public final class KogitoTypesProtobuf {
             if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nodeId_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 2, nodeId_);
             }
-            if (content_ != null) {
+            if (((bitField0_ & 0x00000001) != 0)) {
                 output.writeMessage(3, getContent());
             }
-            if (((bitField0_ & 0x00000001) != 0)) {
+            if (((bitField0_ & 0x00000002) != 0)) {
                 output.writeInt32(4, level_);
             }
-            if (((bitField0_ & 0x00000002) != 0)) {
+            if (((bitField0_ & 0x00000004) != 0)) {
                 output.writeInt64(5, triggerDate_);
             }
-            if (((bitField0_ & 0x00000004) != 0)) {
+            if (((bitField0_ & 0x00000008) != 0)) {
                 output.writeMessage(6, getSla());
             }
             getUnknownFields().writeTo(output);
@@ -1956,19 +2642,19 @@ public final class KogitoTypesProtobuf {
             if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nodeId_)) {
                 size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, nodeId_);
             }
-            if (content_ != null) {
+            if (((bitField0_ & 0x00000001) != 0)) {
                 size += com.google.protobuf.CodedOutputStream
                         .computeMessageSize(3, getContent());
             }
-            if (((bitField0_ & 0x00000001) != 0)) {
+            if (((bitField0_ & 0x00000002) != 0)) {
                 size += com.google.protobuf.CodedOutputStream
                         .computeInt32Size(4, level_);
             }
-            if (((bitField0_ & 0x00000002) != 0)) {
+            if (((bitField0_ & 0x00000004) != 0)) {
                 size += com.google.protobuf.CodedOutputStream
                         .computeInt64Size(5, triggerDate_);
             }
-            if (((bitField0_ & 0x00000004) != 0)) {
+            if (((bitField0_ & 0x00000008) != 0)) {
                 size += com.google.protobuf.CodedOutputStream
                         .computeMessageSize(6, getSla());
             }
@@ -2262,29 +2948,68 @@ public final class KogitoTypesProtobuf {
                 if (((from_bitField0_ & 0x00000002) != 0)) {
                     result.nodeId_ = nodeId_;
                 }
+                int to_bitField0_ = 0;
                 if (((from_bitField0_ & 0x00000004) != 0)) {
                     result.content_ = contentBuilder_ == null
                             ? content_
                             : contentBuilder_.build();
+                    to_bitField0_ |= 0x00000001;
                 }
-                int to_bitField0_ = 0;
                 if (((from_bitField0_ & 0x00000008) != 0)) {
                     result.level_ = level_;
-                    to_bitField0_ |= 0x00000001;
+                    to_bitField0_ |= 0x00000002;
                 }
                 if (((from_bitField0_ & 0x00000010) != 0)) {
                     result.triggerDate_ = triggerDate_;
-                    to_bitField0_ |= 0x00000002;
+                    to_bitField0_ |= 0x00000004;
                 }
                 if (((from_bitField0_ & 0x00000020) != 0)) {
                     result.sla_ = slaBuilder_ == null
                             ? sla_
                             : slaBuilder_.build();
-                    to_bitField0_ |= 0x00000004;
+                    to_bitField0_ |= 0x00000008;
                 }
                 result.bitField0_ |= to_bitField0_;
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.NodeInstance) {
@@ -2642,8 +3367,10 @@ public final class KogitoTypesProtobuf {
                 } else {
                     contentBuilder_.mergeFrom(value);
                 }
-                bitField0_ |= 0x00000004;
-                onChanged();
+                if (content_ != null) {
+                    bitField0_ |= 0x00000004;
+                    onChanged();
+                }
                 return this;
             }
 
@@ -2864,8 +3591,10 @@ public final class KogitoTypesProtobuf {
                 } else {
                     slaBuilder_.mergeFrom(value);
                 }
-                bitField0_ |= 0x00000020;
-                onChanged();
+                if (sla_ != null) {
+                    bitField0_ |= 0x00000020;
+                    onChanged();
+                }
                 return this;
             }
 
@@ -3686,6 +4415,44 @@ public final class KogitoTypesProtobuf {
                 int from_bitField0_ = bitField0_;
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.WorkflowContext) {
@@ -5469,6 +6236,44 @@ public final class KogitoTypesProtobuf {
                 result.bitField0_ |= to_bitField0_;
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.SwimlaneContext) {
@@ -6299,6 +7104,44 @@ public final class KogitoTypesProtobuf {
                 result.bitField0_ |= to_bitField0_;
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.SLAContext) {
@@ -7076,6 +7919,44 @@ public final class KogitoTypesProtobuf {
                 result.bitField0_ |= to_bitField0_;
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.IterationLevel) {
@@ -7741,6 +8622,44 @@ public final class KogitoTypesProtobuf {
                 }
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.NodeInstanceGroup) {
@@ -8015,6 +8934,8 @@ public final class KogitoTypesProtobuf {
 
     private static final com.google.protobuf.Descriptors.Descriptor internal_static_org_jbpm_flow_serialization_protobuf_JsonNode_descriptor;
     private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_org_jbpm_flow_serialization_protobuf_JsonNode_fieldAccessorTable;
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_org_jbpm_flow_serialization_protobuf_Document_descriptor;
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_org_jbpm_flow_serialization_protobuf_Document_fieldAccessorTable;
     private static final com.google.protobuf.Descriptors.Descriptor internal_static_org_jbpm_flow_serialization_protobuf_Variable_descriptor;
     private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_org_jbpm_flow_serialization_protobuf_Variable_fieldAccessorTable;
     private static final com.google.protobuf.Descriptors.Descriptor internal_static_org_jbpm_flow_serialization_protobuf_NodeInstance_descriptor;
@@ -8041,34 +8962,34 @@ public final class KogitoTypesProtobuf {
                 "\n7org/jbpm/flow/serialization/protobuf/k" +
                         "ogito_types.proto\022$org.jbpm.flow.seriali" +
                         "zation.protobuf\032\031google/protobuf/any.pro" +
-                        "to\"\033\n\010JsonNode\022\017\n\007content\030\001 \001(\t\"_\n\010Varia" +
-                        "ble\022\014\n\004name\030\001 \001(\t\022\021\n\tdata_type\030\002 \001(\t\022(\n\005" +
-                        "value\030\003 \001(\0132\024.google.protobuf.AnyH\000\210\001\001B\010" +
-                        "\n\006_value\"\350\001\n\014NodeInstance\022\n\n\002id\030\001 \001(\t\022\017\n" +
-                        "\007node_id\030\002 \001(\t\022%\n\007content\030\003 \001(\0132\024.google" +
-                        ".protobuf.Any\022\022\n\005level\030\004 \001(\005H\000\210\001\001\022\031\n\014tri" +
-                        "gger_date\030\005 \001(\003H\001\210\001\001\022B\n\003sla\030\006 \001(\01320.org." +
-                        "jbpm.flow.serialization.protobuf.SLACont" +
-                        "extH\002\210\001\001B\010\n\006_levelB\017\n\r_trigger_dateB\006\n\004_" +
-                        "sla\"\277\002\n\017WorkflowContext\022@\n\010variable\030\001 \003(" +
-                        "\0132..org.jbpm.flow.serialization.protobuf" +
-                        ".Variable\022I\n\rnode_instance\030\002 \003(\01322.org.j" +
-                        "bpm.flow.serialization.protobuf.NodeInst" +
-                        "ance\022P\n\017exclusive_group\030\003 \003(\01327.org.jbpm" +
-                        ".flow.serialization.protobuf.NodeInstanc" +
-                        "eGroup\022M\n\017iterationLevels\030\004 \003(\01324.org.jb" +
-                        "pm.flow.serialization.protobuf.Iteration" +
-                        "Level\"Y\n\017SwimlaneContext\022\025\n\010swimlane\030\001 \001" +
-                        "(\tH\000\210\001\001\022\025\n\010actor_id\030\002 \001(\tH\001\210\001\001B\013\n\t_swiml" +
-                        "aneB\013\n\t_actor_id\"\224\001\n\nSLAContext\022\031\n\014sla_t" +
-                        "imer_id\030\001 \001(\tH\000\210\001\001\022\031\n\014sla_due_date\030\002 \001(\003" +
-                        "H\001\210\001\001\022\033\n\016sla_compliance\030\003 \001(\005H\002\210\001\001B\017\n\r_s" +
-                        "la_timer_idB\017\n\r_sla_due_dateB\021\n\017_sla_com" +
-                        "pliance\"F\n\016IterationLevel\022\017\n\002id\030\001 \001(\tH\000\210" +
-                        "\001\001\022\022\n\005level\030\002 \001(\005H\001\210\001\001B\005\n\003_idB\010\n\006_level\"" +
-                        "3\n\021NodeInstanceGroup\022\036\n\026group_node_insta" +
-                        "nce_id\030\001 \003(\tB\025B\023KogitoTypesProtobufb\006pro" +
-                        "to3"
+                        "to\"\033\n\010JsonNode\022\017\n\007content\030\001 \001(\t\"\033\n\010Docum" +
+                        "ent\022\017\n\007content\030\001 \001(\t\"_\n\010Variable\022\014\n\004name" +
+                        "\030\001 \001(\t\022\021\n\tdata_type\030\002 \001(\t\022(\n\005value\030\003 \001(\013" +
+                        "2\024.google.protobuf.AnyH\000\210\001\001B\010\n\006_value\"\350\001" +
+                        "\n\014NodeInstance\022\n\n\002id\030\001 \001(\t\022\017\n\007node_id\030\002 " +
+                        "\001(\t\022%\n\007content\030\003 \001(\0132\024.google.protobuf.A" +
+                        "ny\022\022\n\005level\030\004 \001(\005H\000\210\001\001\022\031\n\014trigger_date\030\005" +
+                        " \001(\003H\001\210\001\001\022B\n\003sla\030\006 \001(\01320.org.jbpm.flow.s" +
+                        "erialization.protobuf.SLAContextH\002\210\001\001B\010\n" +
+                        "\006_levelB\017\n\r_trigger_dateB\006\n\004_sla\"\277\002\n\017Wor" +
+                        "kflowContext\022@\n\010variable\030\001 \003(\0132..org.jbp" +
+                        "m.flow.serialization.protobuf.Variable\022I" +
+                        "\n\rnode_instance\030\002 \003(\01322.org.jbpm.flow.se" +
+                        "rialization.protobuf.NodeInstance\022P\n\017exc" +
+                        "lusive_group\030\003 \003(\01327.org.jbpm.flow.seria" +
+                        "lization.protobuf.NodeInstanceGroup\022M\n\017i" +
+                        "terationLevels\030\004 \003(\01324.org.jbpm.flow.ser" +
+                        "ialization.protobuf.IterationLevel\"Y\n\017Sw" +
+                        "imlaneContext\022\025\n\010swimlane\030\001 \001(\tH\000\210\001\001\022\025\n\010" +
+                        "actor_id\030\002 \001(\tH\001\210\001\001B\013\n\t_swimlaneB\013\n\t_act" +
+                        "or_id\"\224\001\n\nSLAContext\022\031\n\014sla_timer_id\030\001 \001" +
+                        "(\tH\000\210\001\001\022\031\n\014sla_due_date\030\002 \001(\003H\001\210\001\001\022\033\n\016sl" +
+                        "a_compliance\030\003 \001(\005H\002\210\001\001B\017\n\r_sla_timer_id" +
+                        "B\017\n\r_sla_due_dateB\021\n\017_sla_compliance\"F\n\016" +
+                        "IterationLevel\022\017\n\002id\030\001 \001(\tH\000\210\001\001\022\022\n\005level" +
+                        "\030\002 \001(\005H\001\210\001\001B\005\n\003_idB\010\n\006_level\"3\n\021NodeInst" +
+                        "anceGroup\022\036\n\026group_node_instance_id\030\001 \003(" +
+                        "\tB\025B\023KogitoTypesProtobufb\006proto3"
         };
         descriptor = com.google.protobuf.Descriptors.FileDescriptor
                 .internalBuildGeneratedFileFrom(descriptorData,
@@ -8080,38 +9001,43 @@ public final class KogitoTypesProtobuf {
         internal_static_org_jbpm_flow_serialization_protobuf_JsonNode_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 internal_static_org_jbpm_flow_serialization_protobuf_JsonNode_descriptor,
                 new java.lang.String[] { "Content", });
-        internal_static_org_jbpm_flow_serialization_protobuf_Variable_descriptor =
+        internal_static_org_jbpm_flow_serialization_protobuf_Document_descriptor =
                 getDescriptor().getMessageTypes().get(1);
+        internal_static_org_jbpm_flow_serialization_protobuf_Document_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+                internal_static_org_jbpm_flow_serialization_protobuf_Document_descriptor,
+                new java.lang.String[] { "Content", });
+        internal_static_org_jbpm_flow_serialization_protobuf_Variable_descriptor =
+                getDescriptor().getMessageTypes().get(2);
         internal_static_org_jbpm_flow_serialization_protobuf_Variable_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 internal_static_org_jbpm_flow_serialization_protobuf_Variable_descriptor,
-                new java.lang.String[] { "Name", "DataType", "Value", "Value", });
+                new java.lang.String[] { "Name", "DataType", "Value", });
         internal_static_org_jbpm_flow_serialization_protobuf_NodeInstance_descriptor =
-                getDescriptor().getMessageTypes().get(2);
+                getDescriptor().getMessageTypes().get(3);
         internal_static_org_jbpm_flow_serialization_protobuf_NodeInstance_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 internal_static_org_jbpm_flow_serialization_protobuf_NodeInstance_descriptor,
-                new java.lang.String[] { "Id", "NodeId", "Content", "Level", "TriggerDate", "Sla", "Level", "TriggerDate", "Sla", });
+                new java.lang.String[] { "Id", "NodeId", "Content", "Level", "TriggerDate", "Sla", });
         internal_static_org_jbpm_flow_serialization_protobuf_WorkflowContext_descriptor =
-                getDescriptor().getMessageTypes().get(3);
+                getDescriptor().getMessageTypes().get(4);
         internal_static_org_jbpm_flow_serialization_protobuf_WorkflowContext_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 internal_static_org_jbpm_flow_serialization_protobuf_WorkflowContext_descriptor,
                 new java.lang.String[] { "Variable", "NodeInstance", "ExclusiveGroup", "IterationLevels", });
         internal_static_org_jbpm_flow_serialization_protobuf_SwimlaneContext_descriptor =
-                getDescriptor().getMessageTypes().get(4);
+                getDescriptor().getMessageTypes().get(5);
         internal_static_org_jbpm_flow_serialization_protobuf_SwimlaneContext_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 internal_static_org_jbpm_flow_serialization_protobuf_SwimlaneContext_descriptor,
-                new java.lang.String[] { "Swimlane", "ActorId", "Swimlane", "ActorId", });
+                new java.lang.String[] { "Swimlane", "ActorId", });
         internal_static_org_jbpm_flow_serialization_protobuf_SLAContext_descriptor =
-                getDescriptor().getMessageTypes().get(5);
+                getDescriptor().getMessageTypes().get(6);
         internal_static_org_jbpm_flow_serialization_protobuf_SLAContext_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 internal_static_org_jbpm_flow_serialization_protobuf_SLAContext_descriptor,
-                new java.lang.String[] { "SlaTimerId", "SlaDueDate", "SlaCompliance", "SlaTimerId", "SlaDueDate", "SlaCompliance", });
+                new java.lang.String[] { "SlaTimerId", "SlaDueDate", "SlaCompliance", });
         internal_static_org_jbpm_flow_serialization_protobuf_IterationLevel_descriptor =
-                getDescriptor().getMessageTypes().get(6);
+                getDescriptor().getMessageTypes().get(7);
         internal_static_org_jbpm_flow_serialization_protobuf_IterationLevel_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 internal_static_org_jbpm_flow_serialization_protobuf_IterationLevel_descriptor,
-                new java.lang.String[] { "Id", "Level", "Id", "Level", });
+                new java.lang.String[] { "Id", "Level", });
         internal_static_org_jbpm_flow_serialization_protobuf_NodeInstanceGroup_descriptor =
-                getDescriptor().getMessageTypes().get(7);
+                getDescriptor().getMessageTypes().get(8);
         internal_static_org_jbpm_flow_serialization_protobuf_NodeInstanceGroup_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 internal_static_org_jbpm_flow_serialization_protobuf_NodeInstanceGroup_descriptor,
                 new java.lang.String[] { "GroupNodeInstanceId", });
diff --git a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoWorkItemsProtobuf.java b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoWorkItemsProtobuf.java
index 277465a715..fac37c8b67 100644
--- a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoWorkItemsProtobuf.java
+++ b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoWorkItemsProtobuf.java
@@ -1,25 +1,25 @@
-/**
-* 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.
-*/
-
+/*
+ * 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.
+ */
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: org/jbpm/flow/serialization/protobuf/kogito_work_items.proto
 
+// Protobuf Java Version: 3.25.0
 package org.jbpm.flow.serialization.protobuf;
 
 public final class KogitoWorkItemsProtobuf {
@@ -571,7 +571,7 @@ public final class KogitoWorkItemsProtobuf {
 
         @SuppressWarnings({ "rawtypes" })
         @java.lang.Override
-        protected com.google.protobuf.MapField internalGetMapField(
+        protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                 int number) {
             switch (number) {
                 case 13:
@@ -2015,7 +2015,7 @@ public final class KogitoWorkItemsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 13:
@@ -2033,7 +2033,7 @@ public final class KogitoWorkItemsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMutableMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 13:
@@ -2207,24 +2207,58 @@ public final class KogitoWorkItemsProtobuf {
                     to_bitField0_ |= 0x00000010;
                 }
                 if (((from_bitField0_ & 0x00001000) != 0)) {
-                    result.startDeadlines_ = internalGetStartDeadlines();
-                    result.startDeadlines_.makeImmutable();
+                    result.startDeadlines_ = internalGetStartDeadlines().build(StartDeadlinesDefaultEntryHolder.defaultEntry);
                 }
                 if (((from_bitField0_ & 0x00002000) != 0)) {
-                    result.completedDeadlines_ = internalGetCompletedDeadlines();
-                    result.completedDeadlines_.makeImmutable();
+                    result.completedDeadlines_ = internalGetCompletedDeadlines().build(CompletedDeadlinesDefaultEntryHolder.defaultEntry);
                 }
                 if (((from_bitField0_ & 0x00004000) != 0)) {
-                    result.startReassigments_ = internalGetStartReassigments();
-                    result.startReassigments_.makeImmutable();
+                    result.startReassigments_ = internalGetStartReassigments().build(StartReassigmentsDefaultEntryHolder.defaultEntry);
                 }
                 if (((from_bitField0_ & 0x00008000) != 0)) {
-                    result.completedReassigments_ = internalGetCompletedReassigments();
-                    result.completedReassigments_.makeImmutable();
+                    result.completedReassigments_ = internalGetCompletedReassigments().build(CompletedReassigmentsDefaultEntryHolder.defaultEntry);
                 }
                 result.bitField0_ |= to_bitField0_;
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.HumanTaskWorkItemData) {
@@ -2485,7 +2519,7 @@ public final class KogitoWorkItemsProtobuf {
                             case 106: {
                                 com.google.protobuf.MapEntry<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline> startDeadlines__ = input.readMessage(
                                         StartDeadlinesDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
-                                internalGetMutableStartDeadlines().getMutableMap().put(
+                                internalGetMutableStartDeadlines().ensureBuilderMap().put(
                                         startDeadlines__.getKey(), startDeadlines__.getValue());
                                 bitField0_ |= 0x00001000;
                                 break;
@@ -2493,7 +2527,7 @@ public final class KogitoWorkItemsProtobuf {
                             case 114: {
                                 com.google.protobuf.MapEntry<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline> completedDeadlines__ = input.readMessage(
                                         CompletedDeadlinesDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
-                                internalGetMutableCompletedDeadlines().getMutableMap().put(
+                                internalGetMutableCompletedDeadlines().ensureBuilderMap().put(
                                         completedDeadlines__.getKey(), completedDeadlines__.getValue());
                                 bitField0_ |= 0x00002000;
                                 break;
@@ -2501,7 +2535,7 @@ public final class KogitoWorkItemsProtobuf {
                             case 122: {
                                 com.google.protobuf.MapEntry<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment> startReassigments__ = input.readMessage(
                                         StartReassigmentsDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
-                                internalGetMutableStartReassigments().getMutableMap().put(
+                                internalGetMutableStartReassigments().ensureBuilderMap().put(
                                         startReassigments__.getKey(), startReassigments__.getValue());
                                 bitField0_ |= 0x00004000;
                                 break;
@@ -2509,7 +2543,7 @@ public final class KogitoWorkItemsProtobuf {
                             case 130: {
                                 com.google.protobuf.MapEntry<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment> completedReassigments__ = input.readMessage(
                                         CompletedReassigmentsDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
-                                internalGetMutableCompletedReassigments().getMutableMap().put(
+                                internalGetMutableCompletedReassigments().ensureBuilderMap().put(
                                         completedReassigments__.getKey(), completedReassigments__.getValue());
                                 bitField0_ |= 0x00008000;
                                 break;
@@ -4208,25 +4242,38 @@ public final class KogitoWorkItemsProtobuf {
                 return attachmentsBuilder_;
             }
 
-            private com.google.protobuf.MapField<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline> startDeadlines_;
+            private static final class StartDeadlinesConverter implements
+                    com.google.protobuf.MapFieldBuilder.Converter<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.DeadlineOrBuilder, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline> {
+                @java.lang.Override
+                public org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline build(org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.DeadlineOrBuilder val) {
+                    if (val instanceof org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline) {
+                        return (org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline) val;
+                    }
+                    return ((org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline.Builder) val).build();
+                }
+
+                @java.lang.Override
+                public com.google.protobuf.MapEntry<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline> defaultEntry() {
+                    return StartDeadlinesDefaultEntryHolder.defaultEntry;
+                }
+            };
 
-            private com.google.protobuf.MapField<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline>
+            private static final StartDeadlinesConverter startDeadlinesConverter = new StartDeadlinesConverter();
+
+            private com.google.protobuf.MapFieldBuilder<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.DeadlineOrBuilder, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline.Builder> startDeadlines_;
+
+            private com.google.protobuf.MapFieldBuilder<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.DeadlineOrBuilder, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline.Builder>
                     internalGetStartDeadlines() {
                 if (startDeadlines_ == null) {
-                    return com.google.protobuf.MapField.emptyMapField(
-                            StartDeadlinesDefaultEntryHolder.defaultEntry);
+                    return new com.google.protobuf.MapFieldBuilder<>(startDeadlinesConverter);
                 }
                 return startDeadlines_;
             }
 
-            private com.google.protobuf.MapField<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline>
+            private com.google.protobuf.MapFieldBuilder<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.DeadlineOrBuilder, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline.Builder>
                     internalGetMutableStartDeadlines() {
                 if (startDeadlines_ == null) {
-                    startDeadlines_ = com.google.protobuf.MapField.newMapField(
-                            StartDeadlinesDefaultEntryHolder.defaultEntry);
-                }
-                if (!startDeadlines_.isMutable()) {
-                    startDeadlines_ = startDeadlines_.copy();
+                    startDeadlines_ = new com.google.protobuf.MapFieldBuilder<>(startDeadlinesConverter);
                 }
                 bitField0_ |= 0x00001000;
                 onChanged();
@@ -4234,7 +4281,7 @@ public final class KogitoWorkItemsProtobuf {
             }
 
             public int getStartDeadlinesCount() {
-                return internalGetStartDeadlines().getMap().size();
+                return internalGetStartDeadlines().ensureBuilderMap().size();
             }
 
             /**
@@ -4246,7 +4293,7 @@ public final class KogitoWorkItemsProtobuf {
                 if (key == null) {
                     throw new NullPointerException("map key");
                 }
-                return internalGetStartDeadlines().getMap().containsKey(key);
+                return internalGetStartDeadlines().ensureBuilderMap().containsKey(key);
             }
 
             /**
@@ -4263,7 +4310,7 @@ public final class KogitoWorkItemsProtobuf {
              */
             @java.lang.Override
             public java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline> getStartDeadlinesMap() {
-                return internalGetStartDeadlines().getMap();
+                return internalGetStartDeadlines().getImmutableMap();
             }
 
             /**
@@ -4278,9 +4325,8 @@ public final class KogitoWorkItemsProtobuf {
                 if (key == null) {
                     throw new NullPointerException("map key");
                 }
-                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline> map =
-                        internalGetStartDeadlines().getMap();
-                return map.containsKey(key) ? map.get(key) : defaultValue;
+                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.DeadlineOrBuilder> map = internalGetMutableStartDeadlines().ensureBuilderMap();
+                return map.containsKey(key) ? startDeadlinesConverter.build(map.get(key)) : defaultValue;
             }
 
             /**
@@ -4292,18 +4338,16 @@ public final class KogitoWorkItemsProtobuf {
                 if (key == null) {
                     throw new NullPointerException("map key");
                 }
-                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline> map =
-                        internalGetStartDeadlines().getMap();
+                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.DeadlineOrBuilder> map = internalGetMutableStartDeadlines().ensureBuilderMap();
                 if (!map.containsKey(key)) {
                     throw new java.lang.IllegalArgumentException();
                 }
-                return map.get(key);
+                return startDeadlinesConverter.build(map.get(key));
             }
 
             public Builder clearStartDeadlines() {
                 bitField0_ = (bitField0_ & ~0x00001000);
-                internalGetMutableStartDeadlines().getMutableMap()
-                        .clear();
+                internalGetMutableStartDeadlines().clear();
                 return this;
             }
 
@@ -4315,7 +4359,7 @@ public final class KogitoWorkItemsProtobuf {
                 if (key == null) {
                     throw new NullPointerException("map key");
                 }
-                internalGetMutableStartDeadlines().getMutableMap()
+                internalGetMutableStartDeadlines().ensureBuilderMap()
                         .remove(key);
                 return this;
             }
@@ -4327,7 +4371,7 @@ public final class KogitoWorkItemsProtobuf {
             public java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline>
                     getMutableStartDeadlines() {
                 bitField0_ |= 0x00001000;
-                return internalGetMutableStartDeadlines().getMutableMap();
+                return internalGetMutableStartDeadlines().ensureMessageMap();
             }
 
             /**
@@ -4342,7 +4386,7 @@ public final class KogitoWorkItemsProtobuf {
                 if (value == null) {
                     throw new NullPointerException("map value");
                 }
-                internalGetMutableStartDeadlines().getMutableMap()
+                internalGetMutableStartDeadlines().ensureBuilderMap()
                         .put(key, value);
                 bitField0_ |= 0x00001000;
                 return this;
@@ -4353,31 +4397,67 @@ public final class KogitoWorkItemsProtobuf {
              */
             public Builder putAllStartDeadlines(
                     java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline> values) {
-                internalGetMutableStartDeadlines().getMutableMap()
+                for (java.util.Map.Entry<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline> e : values.entrySet()) {
+                    if (e.getKey() == null || e.getValue() == null) {
+                        throw new NullPointerException();
+                    }
+                }
+                internalGetMutableStartDeadlines().ensureBuilderMap()
                         .putAll(values);
                 bitField0_ |= 0x00001000;
                 return this;
             }
 
-            private com.google.protobuf.MapField<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline> completedDeadlines_;
+            /**
+             * <code>map&lt;string, .org.jbpm.flow.serialization.protobuf.Deadline&gt; start_deadlines = 13;</code>
+             */
+            public org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline.Builder putStartDeadlinesBuilderIfAbsent(
+                    java.lang.String key) {
+                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.DeadlineOrBuilder> builderMap = internalGetMutableStartDeadlines().ensureBuilderMap();
+                org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.DeadlineOrBuilder entry = builderMap.get(key);
+                if (entry == null) {
+                    entry = org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline.newBuilder();
+                    builderMap.put(key, entry);
+                }
+                if (entry instanceof org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline) {
+                    entry = ((org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline) entry).toBuilder();
+                    builderMap.put(key, entry);
+                }
+                return (org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline.Builder) entry;
+            }
+
+            private static final class CompletedDeadlinesConverter implements
+                    com.google.protobuf.MapFieldBuilder.Converter<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.DeadlineOrBuilder, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline> {
+                @java.lang.Override
+                public org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline build(org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.DeadlineOrBuilder val) {
+                    if (val instanceof org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline) {
+                        return (org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline) val;
+                    }
+                    return ((org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline.Builder) val).build();
+                }
+
+                @java.lang.Override
+                public com.google.protobuf.MapEntry<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline> defaultEntry() {
+                    return CompletedDeadlinesDefaultEntryHolder.defaultEntry;
+                }
+            };
+
+            private static final CompletedDeadlinesConverter completedDeadlinesConverter = new CompletedDeadlinesConverter();
+
+            private com.google.protobuf.MapFieldBuilder<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.DeadlineOrBuilder, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline.Builder> completedDeadlines_;
 
-            private com.google.protobuf.MapField<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline>
+            private com.google.protobuf.MapFieldBuilder<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.DeadlineOrBuilder, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline.Builder>
                     internalGetCompletedDeadlines() {
                 if (completedDeadlines_ == null) {
-                    return com.google.protobuf.MapField.emptyMapField(
-                            CompletedDeadlinesDefaultEntryHolder.defaultEntry);
+                    return new com.google.protobuf.MapFieldBuilder<>(completedDeadlinesConverter);
                 }
                 return completedDeadlines_;
             }
 
-            private com.google.protobuf.MapField<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline>
+            private com.google.protobuf.MapFieldBuilder<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.DeadlineOrBuilder, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline.Builder>
                     internalGetMutableCompletedDeadlines() {
                 if (completedDeadlines_ == null) {
-                    completedDeadlines_ = com.google.protobuf.MapField.newMapField(
-                            CompletedDeadlinesDefaultEntryHolder.defaultEntry);
-                }
-                if (!completedDeadlines_.isMutable()) {
-                    completedDeadlines_ = completedDeadlines_.copy();
+                    completedDeadlines_ = new com.google.protobuf.MapFieldBuilder<>(completedDeadlinesConverter);
                 }
                 bitField0_ |= 0x00002000;
                 onChanged();
@@ -4385,7 +4465,7 @@ public final class KogitoWorkItemsProtobuf {
             }
 
             public int getCompletedDeadlinesCount() {
-                return internalGetCompletedDeadlines().getMap().size();
+                return internalGetCompletedDeadlines().ensureBuilderMap().size();
             }
 
             /**
@@ -4397,7 +4477,7 @@ public final class KogitoWorkItemsProtobuf {
                 if (key == null) {
                     throw new NullPointerException("map key");
                 }
-                return internalGetCompletedDeadlines().getMap().containsKey(key);
+                return internalGetCompletedDeadlines().ensureBuilderMap().containsKey(key);
             }
 
             /**
@@ -4414,7 +4494,7 @@ public final class KogitoWorkItemsProtobuf {
              */
             @java.lang.Override
             public java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline> getCompletedDeadlinesMap() {
-                return internalGetCompletedDeadlines().getMap();
+                return internalGetCompletedDeadlines().getImmutableMap();
             }
 
             /**
@@ -4429,9 +4509,8 @@ public final class KogitoWorkItemsProtobuf {
                 if (key == null) {
                     throw new NullPointerException("map key");
                 }
-                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline> map =
-                        internalGetCompletedDeadlines().getMap();
-                return map.containsKey(key) ? map.get(key) : defaultValue;
+                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.DeadlineOrBuilder> map = internalGetMutableCompletedDeadlines().ensureBuilderMap();
+                return map.containsKey(key) ? completedDeadlinesConverter.build(map.get(key)) : defaultValue;
             }
 
             /**
@@ -4443,18 +4522,16 @@ public final class KogitoWorkItemsProtobuf {
                 if (key == null) {
                     throw new NullPointerException("map key");
                 }
-                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline> map =
-                        internalGetCompletedDeadlines().getMap();
+                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.DeadlineOrBuilder> map = internalGetMutableCompletedDeadlines().ensureBuilderMap();
                 if (!map.containsKey(key)) {
                     throw new java.lang.IllegalArgumentException();
                 }
-                return map.get(key);
+                return completedDeadlinesConverter.build(map.get(key));
             }
 
             public Builder clearCompletedDeadlines() {
                 bitField0_ = (bitField0_ & ~0x00002000);
-                internalGetMutableCompletedDeadlines().getMutableMap()
-                        .clear();
+                internalGetMutableCompletedDeadlines().clear();
                 return this;
             }
 
@@ -4466,7 +4543,7 @@ public final class KogitoWorkItemsProtobuf {
                 if (key == null) {
                     throw new NullPointerException("map key");
                 }
-                internalGetMutableCompletedDeadlines().getMutableMap()
+                internalGetMutableCompletedDeadlines().ensureBuilderMap()
                         .remove(key);
                 return this;
             }
@@ -4478,7 +4555,7 @@ public final class KogitoWorkItemsProtobuf {
             public java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline>
                     getMutableCompletedDeadlines() {
                 bitField0_ |= 0x00002000;
-                return internalGetMutableCompletedDeadlines().getMutableMap();
+                return internalGetMutableCompletedDeadlines().ensureMessageMap();
             }
 
             /**
@@ -4493,7 +4570,7 @@ public final class KogitoWorkItemsProtobuf {
                 if (value == null) {
                     throw new NullPointerException("map value");
                 }
-                internalGetMutableCompletedDeadlines().getMutableMap()
+                internalGetMutableCompletedDeadlines().ensureBuilderMap()
                         .put(key, value);
                 bitField0_ |= 0x00002000;
                 return this;
@@ -4504,31 +4581,67 @@ public final class KogitoWorkItemsProtobuf {
              */
             public Builder putAllCompletedDeadlines(
                     java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline> values) {
-                internalGetMutableCompletedDeadlines().getMutableMap()
+                for (java.util.Map.Entry<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline> e : values.entrySet()) {
+                    if (e.getKey() == null || e.getValue() == null) {
+                        throw new NullPointerException();
+                    }
+                }
+                internalGetMutableCompletedDeadlines().ensureBuilderMap()
                         .putAll(values);
                 bitField0_ |= 0x00002000;
                 return this;
             }
 
-            private com.google.protobuf.MapField<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment> startReassigments_;
+            /**
+             * <code>map&lt;string, .org.jbpm.flow.serialization.protobuf.Deadline&gt; completed_deadlines = 14;</code>
+             */
+            public org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline.Builder putCompletedDeadlinesBuilderIfAbsent(
+                    java.lang.String key) {
+                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.DeadlineOrBuilder> builderMap = internalGetMutableCompletedDeadlines().ensureBuilderMap();
+                org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.DeadlineOrBuilder entry = builderMap.get(key);
+                if (entry == null) {
+                    entry = org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline.newBuilder();
+                    builderMap.put(key, entry);
+                }
+                if (entry instanceof org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline) {
+                    entry = ((org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline) entry).toBuilder();
+                    builderMap.put(key, entry);
+                }
+                return (org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline.Builder) entry;
+            }
 
-            private com.google.protobuf.MapField<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment>
+            private static final class StartReassigmentsConverter implements
+                    com.google.protobuf.MapFieldBuilder.Converter<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.ReassignmentOrBuilder, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment> {
+                @java.lang.Override
+                public org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment build(org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.ReassignmentOrBuilder val) {
+                    if (val instanceof org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment) {
+                        return (org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment) val;
+                    }
+                    return ((org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment.Builder) val).build();
+                }
+
+                @java.lang.Override
+                public com.google.protobuf.MapEntry<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment> defaultEntry() {
+                    return StartReassigmentsDefaultEntryHolder.defaultEntry;
+                }
+            };
+
+            private static final StartReassigmentsConverter startReassigmentsConverter = new StartReassigmentsConverter();
+
+            private com.google.protobuf.MapFieldBuilder<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.ReassignmentOrBuilder, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment.Builder> startReassigments_;
+
+            private com.google.protobuf.MapFieldBuilder<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.ReassignmentOrBuilder, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment.Builder>
                     internalGetStartReassigments() {
                 if (startReassigments_ == null) {
-                    return com.google.protobuf.MapField.emptyMapField(
-                            StartReassigmentsDefaultEntryHolder.defaultEntry);
+                    return new com.google.protobuf.MapFieldBuilder<>(startReassigmentsConverter);
                 }
                 return startReassigments_;
             }
 
-            private com.google.protobuf.MapField<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment>
+            private com.google.protobuf.MapFieldBuilder<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.ReassignmentOrBuilder, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment.Builder>
                     internalGetMutableStartReassigments() {
                 if (startReassigments_ == null) {
-                    startReassigments_ = com.google.protobuf.MapField.newMapField(
-                            StartReassigmentsDefaultEntryHolder.defaultEntry);
-                }
-                if (!startReassigments_.isMutable()) {
-                    startReassigments_ = startReassigments_.copy();
+                    startReassigments_ = new com.google.protobuf.MapFieldBuilder<>(startReassigmentsConverter);
                 }
                 bitField0_ |= 0x00004000;
                 onChanged();
@@ -4536,7 +4649,7 @@ public final class KogitoWorkItemsProtobuf {
             }
 
             public int getStartReassigmentsCount() {
-                return internalGetStartReassigments().getMap().size();
+                return internalGetStartReassigments().ensureBuilderMap().size();
             }
 
             /**
@@ -4548,7 +4661,7 @@ public final class KogitoWorkItemsProtobuf {
                 if (key == null) {
                     throw new NullPointerException("map key");
                 }
-                return internalGetStartReassigments().getMap().containsKey(key);
+                return internalGetStartReassigments().ensureBuilderMap().containsKey(key);
             }
 
             /**
@@ -4565,7 +4678,7 @@ public final class KogitoWorkItemsProtobuf {
              */
             @java.lang.Override
             public java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment> getStartReassigmentsMap() {
-                return internalGetStartReassigments().getMap();
+                return internalGetStartReassigments().getImmutableMap();
             }
 
             /**
@@ -4580,9 +4693,8 @@ public final class KogitoWorkItemsProtobuf {
                 if (key == null) {
                     throw new NullPointerException("map key");
                 }
-                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment> map =
-                        internalGetStartReassigments().getMap();
-                return map.containsKey(key) ? map.get(key) : defaultValue;
+                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.ReassignmentOrBuilder> map = internalGetMutableStartReassigments().ensureBuilderMap();
+                return map.containsKey(key) ? startReassigmentsConverter.build(map.get(key)) : defaultValue;
             }
 
             /**
@@ -4594,18 +4706,16 @@ public final class KogitoWorkItemsProtobuf {
                 if (key == null) {
                     throw new NullPointerException("map key");
                 }
-                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment> map =
-                        internalGetStartReassigments().getMap();
+                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.ReassignmentOrBuilder> map = internalGetMutableStartReassigments().ensureBuilderMap();
                 if (!map.containsKey(key)) {
                     throw new java.lang.IllegalArgumentException();
                 }
-                return map.get(key);
+                return startReassigmentsConverter.build(map.get(key));
             }
 
             public Builder clearStartReassigments() {
                 bitField0_ = (bitField0_ & ~0x00004000);
-                internalGetMutableStartReassigments().getMutableMap()
-                        .clear();
+                internalGetMutableStartReassigments().clear();
                 return this;
             }
 
@@ -4617,7 +4727,7 @@ public final class KogitoWorkItemsProtobuf {
                 if (key == null) {
                     throw new NullPointerException("map key");
                 }
-                internalGetMutableStartReassigments().getMutableMap()
+                internalGetMutableStartReassigments().ensureBuilderMap()
                         .remove(key);
                 return this;
             }
@@ -4629,7 +4739,7 @@ public final class KogitoWorkItemsProtobuf {
             public java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment>
                     getMutableStartReassigments() {
                 bitField0_ |= 0x00004000;
-                return internalGetMutableStartReassigments().getMutableMap();
+                return internalGetMutableStartReassigments().ensureMessageMap();
             }
 
             /**
@@ -4644,7 +4754,7 @@ public final class KogitoWorkItemsProtobuf {
                 if (value == null) {
                     throw new NullPointerException("map value");
                 }
-                internalGetMutableStartReassigments().getMutableMap()
+                internalGetMutableStartReassigments().ensureBuilderMap()
                         .put(key, value);
                 bitField0_ |= 0x00004000;
                 return this;
@@ -4655,31 +4765,68 @@ public final class KogitoWorkItemsProtobuf {
              */
             public Builder putAllStartReassigments(
                     java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment> values) {
-                internalGetMutableStartReassigments().getMutableMap()
+                for (java.util.Map.Entry<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment> e : values.entrySet()) {
+                    if (e.getKey() == null || e.getValue() == null) {
+                        throw new NullPointerException();
+                    }
+                }
+                internalGetMutableStartReassigments().ensureBuilderMap()
                         .putAll(values);
                 bitField0_ |= 0x00004000;
                 return this;
             }
 
-            private com.google.protobuf.MapField<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment> completedReassigments_;
+            /**
+             * <code>map&lt;string, .org.jbpm.flow.serialization.protobuf.Reassignment&gt; start_reassigments = 15;</code>
+             */
+            public org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment.Builder putStartReassigmentsBuilderIfAbsent(
+                    java.lang.String key) {
+                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.ReassignmentOrBuilder> builderMap =
+                        internalGetMutableStartReassigments().ensureBuilderMap();
+                org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.ReassignmentOrBuilder entry = builderMap.get(key);
+                if (entry == null) {
+                    entry = org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment.newBuilder();
+                    builderMap.put(key, entry);
+                }
+                if (entry instanceof org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment) {
+                    entry = ((org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment) entry).toBuilder();
+                    builderMap.put(key, entry);
+                }
+                return (org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment.Builder) entry;
+            }
+
+            private static final class CompletedReassigmentsConverter implements
+                    com.google.protobuf.MapFieldBuilder.Converter<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.ReassignmentOrBuilder, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment> {
+                @java.lang.Override
+                public org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment build(org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.ReassignmentOrBuilder val) {
+                    if (val instanceof org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment) {
+                        return (org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment) val;
+                    }
+                    return ((org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment.Builder) val).build();
+                }
+
+                @java.lang.Override
+                public com.google.protobuf.MapEntry<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment> defaultEntry() {
+                    return CompletedReassigmentsDefaultEntryHolder.defaultEntry;
+                }
+            };
+
+            private static final CompletedReassigmentsConverter completedReassigmentsConverter = new CompletedReassigmentsConverter();
+
+            private com.google.protobuf.MapFieldBuilder<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.ReassignmentOrBuilder, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment.Builder> completedReassigments_;
 
-            private com.google.protobuf.MapField<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment>
+            private com.google.protobuf.MapFieldBuilder<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.ReassignmentOrBuilder, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment.Builder>
                     internalGetCompletedReassigments() {
                 if (completedReassigments_ == null) {
-                    return com.google.protobuf.MapField.emptyMapField(
-                            CompletedReassigmentsDefaultEntryHolder.defaultEntry);
+                    return new com.google.protobuf.MapFieldBuilder<>(completedReassigmentsConverter);
                 }
                 return completedReassigments_;
             }
 
-            private com.google.protobuf.MapField<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment>
+            private com.google.protobuf.MapFieldBuilder<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.ReassignmentOrBuilder, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment.Builder>
                     internalGetMutableCompletedReassigments() {
                 if (completedReassigments_ == null) {
-                    completedReassigments_ = com.google.protobuf.MapField.newMapField(
-                            CompletedReassigmentsDefaultEntryHolder.defaultEntry);
-                }
-                if (!completedReassigments_.isMutable()) {
-                    completedReassigments_ = completedReassigments_.copy();
+                    completedReassigments_ = new com.google.protobuf.MapFieldBuilder<>(completedReassigmentsConverter);
                 }
                 bitField0_ |= 0x00008000;
                 onChanged();
@@ -4687,7 +4834,7 @@ public final class KogitoWorkItemsProtobuf {
             }
 
             public int getCompletedReassigmentsCount() {
-                return internalGetCompletedReassigments().getMap().size();
+                return internalGetCompletedReassigments().ensureBuilderMap().size();
             }
 
             /**
@@ -4699,7 +4846,7 @@ public final class KogitoWorkItemsProtobuf {
                 if (key == null) {
                     throw new NullPointerException("map key");
                 }
-                return internalGetCompletedReassigments().getMap().containsKey(key);
+                return internalGetCompletedReassigments().ensureBuilderMap().containsKey(key);
             }
 
             /**
@@ -4716,7 +4863,7 @@ public final class KogitoWorkItemsProtobuf {
              */
             @java.lang.Override
             public java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment> getCompletedReassigmentsMap() {
-                return internalGetCompletedReassigments().getMap();
+                return internalGetCompletedReassigments().getImmutableMap();
             }
 
             /**
@@ -4731,9 +4878,8 @@ public final class KogitoWorkItemsProtobuf {
                 if (key == null) {
                     throw new NullPointerException("map key");
                 }
-                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment> map =
-                        internalGetCompletedReassigments().getMap();
-                return map.containsKey(key) ? map.get(key) : defaultValue;
+                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.ReassignmentOrBuilder> map = internalGetMutableCompletedReassigments().ensureBuilderMap();
+                return map.containsKey(key) ? completedReassigmentsConverter.build(map.get(key)) : defaultValue;
             }
 
             /**
@@ -4745,18 +4891,16 @@ public final class KogitoWorkItemsProtobuf {
                 if (key == null) {
                     throw new NullPointerException("map key");
                 }
-                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment> map =
-                        internalGetCompletedReassigments().getMap();
+                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.ReassignmentOrBuilder> map = internalGetMutableCompletedReassigments().ensureBuilderMap();
                 if (!map.containsKey(key)) {
                     throw new java.lang.IllegalArgumentException();
                 }
-                return map.get(key);
+                return completedReassigmentsConverter.build(map.get(key));
             }
 
             public Builder clearCompletedReassigments() {
                 bitField0_ = (bitField0_ & ~0x00008000);
-                internalGetMutableCompletedReassigments().getMutableMap()
-                        .clear();
+                internalGetMutableCompletedReassigments().clear();
                 return this;
             }
 
@@ -4768,7 +4912,7 @@ public final class KogitoWorkItemsProtobuf {
                 if (key == null) {
                     throw new NullPointerException("map key");
                 }
-                internalGetMutableCompletedReassigments().getMutableMap()
+                internalGetMutableCompletedReassigments().ensureBuilderMap()
                         .remove(key);
                 return this;
             }
@@ -4780,7 +4924,7 @@ public final class KogitoWorkItemsProtobuf {
             public java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment>
                     getMutableCompletedReassigments() {
                 bitField0_ |= 0x00008000;
-                return internalGetMutableCompletedReassigments().getMutableMap();
+                return internalGetMutableCompletedReassigments().ensureMessageMap();
             }
 
             /**
@@ -4795,7 +4939,7 @@ public final class KogitoWorkItemsProtobuf {
                 if (value == null) {
                     throw new NullPointerException("map value");
                 }
-                internalGetMutableCompletedReassigments().getMutableMap()
+                internalGetMutableCompletedReassigments().ensureBuilderMap()
                         .put(key, value);
                 bitField0_ |= 0x00008000;
                 return this;
@@ -4806,12 +4950,36 @@ public final class KogitoWorkItemsProtobuf {
              */
             public Builder putAllCompletedReassigments(
                     java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment> values) {
-                internalGetMutableCompletedReassigments().getMutableMap()
+                for (java.util.Map.Entry<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment> e : values.entrySet()) {
+                    if (e.getKey() == null || e.getValue() == null) {
+                        throw new NullPointerException();
+                    }
+                }
+                internalGetMutableCompletedReassigments().ensureBuilderMap()
                         .putAll(values);
                 bitField0_ |= 0x00008000;
                 return this;
             }
 
+            /**
+             * <code>map&lt;string, .org.jbpm.flow.serialization.protobuf.Reassignment&gt; completed_reassigments = 16;</code>
+             */
+            public org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment.Builder putCompletedReassigmentsBuilderIfAbsent(
+                    java.lang.String key) {
+                java.util.Map<java.lang.String, org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.ReassignmentOrBuilder> builderMap =
+                        internalGetMutableCompletedReassigments().ensureBuilderMap();
+                org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.ReassignmentOrBuilder entry = builderMap.get(key);
+                if (entry == null) {
+                    entry = org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment.newBuilder();
+                    builderMap.put(key, entry);
+                }
+                if (entry instanceof org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment) {
+                    entry = ((org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment) entry).toBuilder();
+                    builderMap.put(key, entry);
+                }
+                return (org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment.Builder) entry;
+            }
+
             @java.lang.Override
             public final Builder setUnknownFields(
                     final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -5488,6 +5656,44 @@ public final class KogitoWorkItemsProtobuf {
                 result.bitField0_ |= to_bitField0_;
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Comment) {
@@ -6681,6 +6887,44 @@ public final class KogitoWorkItemsProtobuf {
                 result.bitField0_ |= to_bitField0_;
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Attachment) {
@@ -7342,7 +7586,7 @@ public final class KogitoWorkItemsProtobuf {
 
         @SuppressWarnings({ "rawtypes" })
         @java.lang.Override
-        protected com.google.protobuf.MapField internalGetMapField(
+        protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                 int number) {
             switch (number) {
                 case 1:
@@ -7653,7 +7897,7 @@ public final class KogitoWorkItemsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 1:
@@ -7665,7 +7909,7 @@ public final class KogitoWorkItemsProtobuf {
             }
 
             @SuppressWarnings({ "rawtypes" })
-            protected com.google.protobuf.MapField internalGetMutableMapField(
+            protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection(
                     int number) {
                 switch (number) {
                     case 1:
@@ -7741,6 +7985,44 @@ public final class KogitoWorkItemsProtobuf {
                 }
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Deadline) {
@@ -8510,6 +8792,44 @@ public final class KogitoWorkItemsProtobuf {
                 }
             }
 
+            @java.lang.Override
+            public Builder clone() {
+                return super.clone();
+            }
+
+            @java.lang.Override
+            public Builder setField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.setField(field, value);
+            }
+
+            @java.lang.Override
+            public Builder clearField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field) {
+                return super.clearField(field);
+            }
+
+            @java.lang.Override
+            public Builder clearOneof(
+                    com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+                return super.clearOneof(oneof);
+            }
+
+            @java.lang.Override
+            public Builder setRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    int index, java.lang.Object value) {
+                return super.setRepeatedField(field, index, value);
+            }
+
+            @java.lang.Override
+            public Builder addRepeatedField(
+                    com.google.protobuf.Descriptors.FieldDescriptor field,
+                    java.lang.Object value) {
+                return super.addRepeatedField(field, value);
+            }
+
             @java.lang.Override
             public Builder mergeFrom(com.google.protobuf.Message other) {
                 if (other instanceof org.jbpm.flow.serialization.protobuf.KogitoWorkItemsProtobuf.Reassignment) {
@@ -9025,8 +9345,7 @@ public final class KogitoWorkItemsProtobuf {
         internal_static_org_jbpm_flow_serialization_protobuf_HumanTaskWorkItemData_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 internal_static_org_jbpm_flow_serialization_protobuf_HumanTaskWorkItemData_descriptor,
                 new java.lang.String[] { "TaskName", "TaskDescription", "TaskPriority", "ActualOwner", "PotUsers", "PotGroups", "ExcludedUsers", "AdminUsers", "AdminGroups", "TaskReferenceName",
-                        "Comments", "Attachments", "StartDeadlines", "CompletedDeadlines", "StartReassigments", "CompletedReassigments", "TaskName", "TaskDescription", "TaskPriority", "ActualOwner",
-                        "TaskReferenceName", });
+                        "Comments", "Attachments", "StartDeadlines", "CompletedDeadlines", "StartReassigments", "CompletedReassigments", });
         internal_static_org_jbpm_flow_serialization_protobuf_HumanTaskWorkItemData_StartDeadlinesEntry_descriptor =
                 internal_static_org_jbpm_flow_serialization_protobuf_HumanTaskWorkItemData_descriptor.getNestedTypes().get(0);
         internal_static_org_jbpm_flow_serialization_protobuf_HumanTaskWorkItemData_StartDeadlinesEntry_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
@@ -9051,12 +9370,12 @@ public final class KogitoWorkItemsProtobuf {
                 getDescriptor().getMessageTypes().get(1);
         internal_static_org_jbpm_flow_serialization_protobuf_Comment_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 internal_static_org_jbpm_flow_serialization_protobuf_Comment_descriptor,
-                new java.lang.String[] { "Id", "Content", "UpdatedAt", "UpdatedBy", "Content", "UpdatedAt", "UpdatedBy", });
+                new java.lang.String[] { "Id", "Content", "UpdatedAt", "UpdatedBy", });
         internal_static_org_jbpm_flow_serialization_protobuf_Attachment_descriptor =
                 getDescriptor().getMessageTypes().get(2);
         internal_static_org_jbpm_flow_serialization_protobuf_Attachment_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 internal_static_org_jbpm_flow_serialization_protobuf_Attachment_descriptor,
-                new java.lang.String[] { "Id", "Content", "UpdatedAt", "UpdatedBy", "Name", "Content", "UpdatedAt", "UpdatedBy", "Name", });
+                new java.lang.String[] { "Id", "Content", "UpdatedAt", "UpdatedBy", "Name", });
         internal_static_org_jbpm_flow_serialization_protobuf_Deadline_descriptor =
                 getDescriptor().getMessageTypes().get(3);
         internal_static_org_jbpm_flow_serialization_protobuf_Deadline_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
diff --git a/jbpm/process-serialization-protobuf/src/main/resources/META-INF/services/org.jbpm.flow.serialization.ObjectMarshallerStrategy b/jbpm/process-serialization-protobuf/src/main/resources/META-INF/services/org.jbpm.flow.serialization.ObjectMarshallerStrategy
index ed8d8a019e..854682475f 100644
--- a/jbpm/process-serialization-protobuf/src/main/resources/META-INF/services/org.jbpm.flow.serialization.ObjectMarshallerStrategy
+++ b/jbpm/process-serialization-protobuf/src/main/resources/META-INF/services/org.jbpm.flow.serialization.ObjectMarshallerStrategy
@@ -26,3 +26,4 @@ org.jbpm.flow.serialization.impl.marshallers.ProtobufIntegerMarshallerStrategy
 org.jbpm.flow.serialization.impl.marshallers.ProtobufDateMarshallerStrategy
 org.jbpm.flow.serialization.impl.marshallers.ProtobufDoubleMarshallerStrategy
 org.jbpm.flow.serialization.impl.marshallers.ProtobufJsonNodeMessageMarshaller
+org.jbpm.flow.serialization.impl.marshallers.ProtobufDocumentNodeMessageMarshaller
diff --git a/jbpm/process-serialization-protobuf/src/main/resources/org/jbpm/flow/serialization/protobuf/kogito_types.proto b/jbpm/process-serialization-protobuf/src/main/resources/org/jbpm/flow/serialization/protobuf/kogito_types.proto
index 91fc4357c5..2bde059971 100644
--- a/jbpm/process-serialization-protobuf/src/main/resources/org/jbpm/flow/serialization/protobuf/kogito_types.proto
+++ b/jbpm/process-serialization-protobuf/src/main/resources/org/jbpm/flow/serialization/protobuf/kogito_types.proto
@@ -29,6 +29,10 @@ message JsonNode {
     string content = 1;
 }
 
+message Document {
+    string content = 1;
+}
+
 message Variable {
     string name = 1;
     string data_type = 2;
diff --git a/jbpm/process-serialization-protobuf/src/test/java/org/jbpm/flow/serialization/ProcessInstanceMarshallTest.java b/jbpm/process-serialization-protobuf/src/test/java/org/jbpm/flow/serialization/ProcessInstanceMarshallTest.java
index 4fb09ea4f5..427311a1ea 100644
--- a/jbpm/process-serialization-protobuf/src/test/java/org/jbpm/flow/serialization/ProcessInstanceMarshallTest.java
+++ b/jbpm/process-serialization-protobuf/src/test/java/org/jbpm/flow/serialization/ProcessInstanceMarshallTest.java
@@ -21,6 +21,7 @@ package org.jbpm.flow.serialization;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.Serializable;
+import java.io.StringWriter;
 import java.math.BigDecimal;
 import java.sql.Timestamp;
 import java.time.Duration;
@@ -29,14 +30,19 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.OffsetDateTime;
 import java.time.ZonedDateTime;
-import java.util.ArrayList;
-import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
-import java.util.ServiceLoader;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
 import org.jbpm.flow.serialization.impl.ProtobufMarshallerReaderContext;
 import org.jbpm.flow.serialization.impl.ProtobufProcessInstanceReader;
 import org.jbpm.flow.serialization.impl.ProtobufProcessInstanceWriter;
@@ -62,9 +68,13 @@ import org.junit.jupiter.params.provider.MethodSource;
 import org.junit.jupiter.params.provider.NullSource;
 import org.kie.kogito.internal.process.runtime.KogitoProcessRuntime;
 import org.kie.kogito.process.impl.AbstractProcess;
+import org.w3c.dom.Document;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 
+import jakarta.xml.bind.JAXBContext;
+import jakarta.xml.bind.annotation.XmlRootElement;
+
 import static java.util.Collections.singletonMap;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.kie.kogito.internal.process.runtime.KogitoWorkflowProcess.RULEFLOW_TYPE;
@@ -113,6 +123,7 @@ public class ProcessInstanceMarshallTest {
         when(process.get()).thenReturn(workflow);
     }
 
+    @XmlRootElement
     public static class MarshableObject implements Serializable {
 
         private static final long serialVersionUID = 1481370154514125687L;
@@ -167,6 +178,16 @@ public class ProcessInstanceMarshallTest {
     }
 
     private static Stream<Arguments> testRoundTrip() throws Exception {
+        MarshableObject marshableObject = new MarshableObject("henry");
+        JAXBContext jaxbContext = JAXBContext.newInstance(MarshableObject.class);
+        jakarta.xml.bind.Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
+
+        jaxbMarshaller.setProperty(jakarta.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, true);
+        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+        DocumentBuilder db = dbf.newDocumentBuilder();
+        Document document = db.newDocument();
+        jaxbMarshaller.marshal(marshableObject, document);
+
         return Stream.of(
                 Arguments.of(1),
                 Arguments.of("hello"),
@@ -177,7 +198,7 @@ public class ProcessInstanceMarshallTest {
                 Arguments.of(BigDecimal.valueOf(10l)),
                 Arguments.of(new MarshableObject("henry")),
                 Arguments.of(new ObjectMapper().readTree("{ \"key\" : \"value\" }")),
-                Arguments.of(new ObjectMapper().valueToTree(new MarshableObject("henry"))),
+                Arguments.of(new ObjectMapper().valueToTree(marshableObject)),
                 Arguments.of(new Date()),
                 Arguments.of(Instant.now()),
                 Arguments.of(OffsetDateTime.now()),
@@ -185,9 +206,8 @@ public class ProcessInstanceMarshallTest {
                 Arguments.of(LocalDate.now()),
                 Arguments.of(ZonedDateTime.now()),
                 Arguments.of(new Timestamp(System.currentTimeMillis())),
-                Arguments.of(Duration.ofDays(1))
-
-        );
+                Arguments.of(Duration.ofDays(1)),
+                Arguments.of(document));
     }
 
     @ParameterizedTest
@@ -195,7 +215,7 @@ public class ProcessInstanceMarshallTest {
     public void testProcessInstanceMarshalling(RuleFlowProcessInstance toMarshall) throws Exception {
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         ProtobufProcessMarshallerWriteContext ctxOut = new ProtobufProcessMarshallerWriteContext(out);
-        ctxOut.set(MarshallerContextName.OBJECT_MARSHALLING_STRATEGIES, defaultStrategies());
+        ctxOut.set(MarshallerContextName.OBJECT_MARSHALLING_STRATEGIES, ObjectMarshallerStrategyHelper.defaultStrategies());
         ctxOut.set(MarshallerContextName.MARSHALLER_PROCESS, process);
 
         ProtobufProcessInstanceWriter writer = new ProtobufProcessInstanceWriter(ctxOut);
@@ -204,7 +224,7 @@ public class ProcessInstanceMarshallTest {
 
         ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
         ProtobufMarshallerReaderContext ctxIn = new ProtobufMarshallerReaderContext(in);
-        ctxIn.set(MarshallerContextName.OBJECT_MARSHALLING_STRATEGIES, defaultStrategies());
+        ctxIn.set(MarshallerContextName.OBJECT_MARSHALLING_STRATEGIES, ObjectMarshallerStrategyHelper.defaultStrategies());
         ctxIn.set(MarshallerContextName.MARSHALLER_PROCESS, process);
         ProtobufProcessInstanceReader reader = new ProtobufProcessInstanceReader(ctxIn);
         RuleFlowProcessInstance unmarshalled = reader.read(in);
@@ -228,29 +248,42 @@ public class ProcessInstanceMarshallTest {
     public void testRoundTrip(Object toMarshall) {
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         ProtobufProcessMarshallerWriteContext ctxOut = new ProtobufProcessMarshallerWriteContext(out);
-        ctxOut.set(MarshallerContextName.OBJECT_MARSHALLING_STRATEGIES, defaultStrategies());
+        ctxOut.set(MarshallerContextName.OBJECT_MARSHALLING_STRATEGIES, ObjectMarshallerStrategyHelper.defaultStrategies());
         ctxOut.set(MarshallerContextName.MARSHALLER_PROCESS, process);
         ProtobufVariableWriter writer = new ProtobufVariableWriter(ctxOut);
         List<KogitoTypesProtobuf.Variable> variables = writer.buildVariables(singletonMap("var", toMarshall).entrySet().stream().collect(Collectors.toList()));
 
         ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
         ProtobufMarshallerReaderContext ctxIn = new ProtobufMarshallerReaderContext(in);
-        ctxIn.set(MarshallerContextName.OBJECT_MARSHALLING_STRATEGIES, defaultStrategies());
+        ctxIn.set(MarshallerContextName.OBJECT_MARSHALLING_STRATEGIES, ObjectMarshallerStrategyHelper.defaultStrategies());
         ctxIn.set(MarshallerContextName.MARSHALLER_PROCESS, process);
         ProtobufVariableReader reader = new ProtobufVariableReader(ctxIn);
         List<Variable> unmarshalledVars = reader.buildVariables(variables);
         assertThat(unmarshalledVars).hasSize(1);
-        assertThat(unmarshalledVars.get(0).getValue()).isEqualTo(toMarshall);
+        assertThat(unmarshalledVars.get(0).getValue())
+                .usingComparatorForType(new DocumentComparator(), Document.class)
+                .usingRecursiveComparison()
+                .isEqualTo(toMarshall);
     }
 
-    private ObjectMarshallerStrategy[] defaultStrategies() {
-        List<ObjectMarshallerStrategy> strats = new ArrayList<>();
-        ServiceLoader<ObjectMarshallerStrategy> loader = ServiceLoader.load(ObjectMarshallerStrategy.class);
+    public class DocumentComparator implements Comparator<Document> {
 
-        for (ObjectMarshallerStrategy strategy : loader) {
-            strats.add(strategy);
+        @Override
+        public int compare(Document doc1, Document doc2) {
+            return toXml(doc1).compareTo(toXml(doc2));
         }
-        Collections.sort(strats);
-        return strats.stream().toArray(ObjectMarshallerStrategy[]::new);
     }
+
+    private String toXml(Document document) {
+        try {
+            TransformerFactory tf = TransformerFactory.newInstance();
+            Transformer trans = tf.newTransformer();
+            StringWriter sw = new StringWriter();
+            trans.transform(new DOMSource(document), new StreamResult(sw));
+            return sw.toString();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
 }
diff --git a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/persistence/proto/AbstractProtoGenerator.java b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/persistence/proto/AbstractProtoGenerator.java
index 462e555a05..b7e55ec836 100644
--- a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/persistence/proto/AbstractProtoGenerator.java
+++ b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/persistence/proto/AbstractProtoGenerator.java
@@ -19,10 +19,14 @@
 package org.kie.kogito.codegen.process.persistence.proto;
 
 import java.io.IOException;
+import java.io.Serializable;
 import java.io.UncheckedIOException;
+import java.lang.reflect.Constructor;
+import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
@@ -30,13 +34,20 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import org.drools.codegen.common.GeneratedFile;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import static java.lang.String.format;
 
 public abstract class AbstractProtoGenerator<T> implements ProtoGenerator {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(AbstractProtoGenerator.class);
+
+    protected static final List<String> PROTO_BUILTINS = List.of(JsonNode.class.getName(), Document.class.getName());
     private static final String GENERATED_PROTO_RES_PATH = "persistence/protobuf/";
     private static final String LISTING_FILE = "list.json";
 
@@ -55,6 +66,11 @@ public abstract class AbstractProtoGenerator<T> implements ProtoGenerator {
         return generate(null, null, packageName, dataClasses, headers);
     }
 
+    @Override
+    public List<String> protoBuiltins() {
+        return PROTO_BUILTINS;
+    }
+
     @Override
     public Collection<GeneratedFile> generateProtoFiles() {
         validateClasses();
@@ -94,6 +110,10 @@ public abstract class AbstractProtoGenerator<T> implements ProtoGenerator {
 
     protected abstract boolean isEnum(T dataModel);
 
+    protected Optional<String> fqn(T dataModel) {
+        return extractName(dataModel);
+    }
+
     protected abstract Optional<String> extractName(T dataModel);
 
     protected abstract ProtoEnum enumFromClass(Proto proto, T clazz) throws Exception;
@@ -148,8 +168,10 @@ public abstract class AbstractProtoGenerator<T> implements ProtoGenerator {
     protected Proto generate(String messageComment, String fieldComment, String packageName, Collection<T> dataModels, String... headers) {
         Proto proto = new Proto(packageName, headers);
         Set<String> alreadyGenerated = new HashSet<>();
-        for (T dataModel : dataModels) {
+        alreadyGenerated.addAll(protoBuiltins());
+        for (T dataModel : dataModels.stream().filter(this::filterDataModels).toList()) {
             try {
+                LOGGER.debug("internal proto geneartion {}", fqn(dataModel));
                 internalGenerate(
                         proto,
                         alreadyGenerated,
@@ -163,6 +185,15 @@ public abstract class AbstractProtoGenerator<T> implements ProtoGenerator {
         return proto;
     }
 
+    private boolean filterDataModels(T type) {
+        Optional<String> stringType = fqn(type);
+        if (stringType.isEmpty()) {
+            return false;
+        }
+
+        return !protoBuiltins().contains(stringType.get());
+    }
+
     protected abstract String modelClassName(T dataModel);
 
     protected Optional<String> internalGenerate(Proto proto, Set<String> alreadyGenerated, String messageComment, String fieldComment, T dataModel) throws Exception {
@@ -200,4 +231,78 @@ public abstract class AbstractProtoGenerator<T> implements ProtoGenerator {
             return this;
         }
     }
+
+    protected String computeCardinalityModifier(String type) {
+        if (type.equals(COLLECTION) || type.equals(ARRAY)) {
+            return "repeated";
+        }
+
+        return "optional";
+    }
+
+    protected String protoType(String type) {
+        if (protoBuiltins().contains(type)) {
+            return null;
+        }
+        LOGGER.debug("Computing proto type for {}", type);
+
+        if (String.class.getCanonicalName().equals(type) || String.class.getSimpleName().equalsIgnoreCase(type)) {
+            return "string";
+        } else if (Integer.class.getCanonicalName().equals(type) || "int".equalsIgnoreCase(type)) {
+            return "int32";
+        } else if (Long.class.getCanonicalName().equals(type) || "long".equalsIgnoreCase(type)) {
+            return "int64";
+        } else if (Double.class.getCanonicalName().equals(type) || "double".equalsIgnoreCase(type)) {
+            return "double";
+        } else if (Float.class.getCanonicalName().equals(type) || "float".equalsIgnoreCase(type)) {
+            return "float";
+        } else if (Boolean.class.getCanonicalName().equals(type) || "boolean".equalsIgnoreCase(type)) {
+            return "bool";
+        } else if (Date.class.getCanonicalName().equals(type) || "date".equalsIgnoreCase(type)) {
+            return "kogito.Date";
+        } else if (byte[].class.getCanonicalName().equals(type) || "[B".equalsIgnoreCase(type)) {
+            return "bytes";
+        } else if (Instant.class.getCanonicalName().equals(type)) {
+            return "kogito.Instant";
+        } else if (type.startsWith("java.lang") || type.startsWith("java.util") || type.startsWith("java.time") || type.startsWith("java.math")) {
+            try {
+                Class<?> cls = Class.forName(type);
+                if (cls.isInterface()) {
+                    return null;
+                }
+                boolean assignable = Serializable.class.isAssignableFrom(cls);
+                if (assignable) {
+                    return KOGITO_SERIALIZABLE;
+                } else {
+                    throw new IllegalArgumentException(format("Java type %s is no supported by Kogito persistence, please consider using a class that extends java.io.Serializable", type));
+                }
+            } catch (ClassNotFoundException e) {
+                return null;
+            }
+        } else {
+            try {
+                Class<?> cls = Class.forName(type);
+                if (cls.isEnum() || hasDefaultConstructor(cls)) {
+                    return null;
+                } else if (Serializable.class.isAssignableFrom(cls)) {
+                    return KOGITO_SERIALIZABLE;
+                } else {
+                    throw new IllegalArgumentException(
+                            format("Custom type %s is no supported by Kogito persistence, please consider using a class that extends java.io.Serializable and contains a no arg constructor", type));
+                }
+            } catch (ClassNotFoundException e) {
+                return null;
+            }
+        }
+    }
+
+    protected boolean hasDefaultConstructor(Class<?> cls) {
+        for (Constructor<?> c : cls.getConstructors()) {
+            if (c.getParameterCount() == 0) {
+                return true;
+            }
+        }
+        return false;
+    }
+
 }
diff --git a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/persistence/proto/ProtoGenerator.java b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/persistence/proto/ProtoGenerator.java
index 3edcbf9ac6..9009a29c7e 100644
--- a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/persistence/proto/ProtoGenerator.java
+++ b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/persistence/proto/ProtoGenerator.java
@@ -18,19 +18,12 @@
  */
 package org.kie.kogito.codegen.process.persistence.proto;
 
-import java.io.Serializable;
-import java.lang.reflect.Constructor;
-import java.time.Instant;
 import java.util.Collection;
-import java.util.Date;
+import java.util.List;
 
 import org.drools.codegen.common.GeneratedFile;
 import org.drools.codegen.common.GeneratedFileType;
 
-import com.fasterxml.jackson.databind.JsonNode;
-
-import static java.lang.String.format;
-
 public interface ProtoGenerator {
 
     GeneratedFileType PROTO_TYPE = GeneratedFileType.of("PROTO", GeneratedFileType.Category.STATIC_HTTP_RESOURCE);
@@ -44,75 +37,7 @@ public interface ProtoGenerator {
 
     Collection<GeneratedFile> generateProtoFiles();
 
-    default String applicabilityByType(String type) {
-        if (type.equals(COLLECTION) || type.equals(ARRAY)) {
-            return "repeated";
-        }
-
-        return "optional";
-    }
-
-    default String protoType(String type) {
-        if (String.class.getCanonicalName().equals(type) || String.class.getSimpleName().equalsIgnoreCase(type)) {
-            return "string";
-        } else if (Integer.class.getCanonicalName().equals(type) || "int".equalsIgnoreCase(type)) {
-            return "int32";
-        } else if (Long.class.getCanonicalName().equals(type) || "long".equalsIgnoreCase(type)) {
-            return "int64";
-        } else if (Double.class.getCanonicalName().equals(type) || "double".equalsIgnoreCase(type)) {
-            return "double";
-        } else if (Float.class.getCanonicalName().equals(type) || "float".equalsIgnoreCase(type)) {
-            return "float";
-        } else if (Boolean.class.getCanonicalName().equals(type) || "boolean".equalsIgnoreCase(type)) {
-            return "bool";
-        } else if (Date.class.getCanonicalName().equals(type) || "date".equalsIgnoreCase(type)) {
-            return "kogito.Date";
-        } else if (byte[].class.getCanonicalName().equals(type) || "[B".equalsIgnoreCase(type)) {
-            return "bytes";
-        } else if (Instant.class.getCanonicalName().equals(type)) {
-            return "kogito.Instant";
-        } else if (JsonNode.class.getCanonicalName().equals(type)) {
-            return KOGITO_SERIALIZABLE;
-        } else if (type.startsWith("java.lang") || type.startsWith("java.util") || type.startsWith("java.time") || type.startsWith("java.math")) {
-            try {
-                Class<?> cls = Class.forName(type);
-                if (cls.isInterface()) {
-                    return null;
-                }
-                boolean assignable = Serializable.class.isAssignableFrom(cls);
-                if (assignable) {
-                    return KOGITO_SERIALIZABLE;
-                } else {
-                    throw new IllegalArgumentException(format("Java type %s is no supported by Kogito persistence, please consider using a class that extends java.io.Serializable", type));
-                }
-            } catch (ClassNotFoundException e) {
-                return null;
-            }
-        } else {
-            try {
-                Class<?> cls = Class.forName(type);
-                if (cls.isEnum() || containsValidConstructor(cls)) {
-                    return null;
-                } else if (Serializable.class.isAssignableFrom(cls)) {
-                    return KOGITO_SERIALIZABLE;
-                } else {
-                    throw new IllegalArgumentException(
-                            format("Custom type %s is no supported by Kogito persistence, please consider using a class that extends java.io.Serializable and contains a no arg constructor", type));
-                }
-            } catch (ClassNotFoundException e) {
-                return null;
-            }
-        }
-    }
-
-    private boolean containsValidConstructor(Class<?> cls) {
-        for (Constructor c : cls.getConstructors()) {
-            if (c.getParameterCount() == 0) {
-                return true;
-            }
-        }
-        return false;
-    }
+    List<String> protoBuiltins();
 
     interface Builder<E, T extends ProtoGenerator> {
 
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 7b509ddd43..730ed02dd3 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
@@ -30,6 +30,7 @@ import java.util.Collection;
 import java.util.Comparator;
 import java.util.Date;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 import java.util.function.Predicate;
@@ -61,33 +62,20 @@ public class ReflectionProtoGenerator extends AbstractProtoGenerator<Class<?>> {
 
     @Override
     protected ProtoMessage messageFromClass(Proto proto, Set<String> alreadyGenerated, Class<?> clazz, String messageComment, String fieldComment) throws Exception {
-        String name = extractName(clazz).orElse(null);
-        if (name == null) {
-            // since class is marked as hidden skip processing of that class
+
+        if (!shouldGenerateProto(clazz)) {
+            LOGGER.info("Skipping generating reflection proto for class {}", clazz);
             return null;
         }
+        LOGGER.debug("Generating reflection proto for class {}", clazz);
 
-        ProtoMessage message = new ProtoMessage(name, clazz.getPackage().getName());
+        String clazzName = extractName(clazz).get();
+        ProtoMessage message = new ProtoMessage(clazzName, clazz.getPackage().getName());
+        Predicate<PropertyDescriptor> validPropertyFilter = property -> this.isValidProperty(clazz, property);
+        List<PropertyDescriptor> propertiesDescriptor = List.of(Introspector.getBeanInfo(clazz).getPropertyDescriptors()).stream().filter(validPropertyFilter).toList();
+        for (PropertyDescriptor pd : propertiesDescriptor) {
 
-        for (PropertyDescriptor pd : Introspector.getBeanInfo(clazz).getPropertyDescriptors()) {
-            if (pd.getName().equals("class")) {
-                continue;
-            }
-
-            Field propertyField;
-            try {
-                propertyField = getFieldFromClass(clazz, pd.getName());
-            } catch (IllegalArgumentException ex) {
-                LOGGER.warn(ex.getMessage());
-                // a method starting with get or set without a corresponding backing field makes java beans to
-                // still generate a property descriptor, it should be ignored
-                continue;
-            }
-            // ignore static and/or transient fields
-            int mod = propertyField.getModifiers();
-            if (Modifier.isStatic(mod) || Modifier.isTransient(mod)) {
-                continue;
-            }
+            Field propertyField = getFieldFromClass(clazz, pd.getName());
 
             // By default, only index id field from Model generated class
             String completeFieldComment = "id".equals(pd.getName()) && Model.class.isAssignableFrom(clazz) ? fieldComment.replace("Index.NO", "Index.YES") : fieldComment;
@@ -129,7 +117,7 @@ public class ReflectionProtoGenerator extends AbstractProtoGenerator<Class<?>> {
                 protoType = optionalProtoType.get();
             }
 
-            ProtoField protoField = message.addField(applicabilityByType(fieldTypeString), protoType, pd.getName());
+            ProtoField protoField = message.addField(computeCardinalityModifier(fieldTypeString), protoType, pd.getName());
             protoField.setComment(completeFieldComment);
             if (KOGITO_SERIALIZABLE.equals(protoType)) {
                 protoField.setOption(format("[(%s) = \"%s\"]", KOGITO_JAVA_CLASS_OPTION, pd.getPropertyType().getCanonicalName()));
@@ -140,6 +128,36 @@ public class ReflectionProtoGenerator extends AbstractProtoGenerator<Class<?>> {
         return message;
     }
 
+    protected boolean shouldGenerateProto(Class<?> clazz) {
+        return extractName(clazz).isPresent();
+    }
+
+    @Override
+    protected Optional<String> extractName(Class<?> clazz) {
+        try {
+            // builtins should not generate proto files
+            BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
+            String name = beanInfo.getBeanDescriptor().getBeanClass().getSimpleName();
+
+            Predicate<String> typeExclusions = ExclusionTypeUtils.createTypeExclusions();
+            if (typeExclusions.test(clazz.getCanonicalName())) {
+                return Optional.empty();
+            }
+            Generated generatedData = clazz.getAnnotation(Generated.class);
+            if (generatedData != null) {
+                name = generatedData.name().isEmpty() ? name : generatedData.name();
+                if (generatedData.hidden()) {
+                    // since class is marked as hidden skip processing of that class
+                    return Optional.empty();
+                }
+            }
+            return Optional.of(name);
+        } catch (IntrospectionException e) {
+            throw new RuntimeException(e);
+        }
+
+    }
+
     @Override
     protected String modelClassName(Class<?> dataModel) {
         return dataModel.getName();
@@ -164,7 +182,7 @@ public class ReflectionProtoGenerator extends AbstractProtoGenerator<Class<?>> {
                     .map(name -> {
                         ProtoEnum modelEnum = new ProtoEnum(name, clazz.getPackage().getName());
                         Stream.of(clazz.getDeclaredFields())
-                                .filter(f -> !f.getName().startsWith("$"))
+                                .filter(Field::isEnumConstant)
                                 .sorted(Comparator.comparing(Field::getName))
                                 .forEach(f -> addEnumField(f, modelEnum));
                         proto.addEnum(modelEnum);
@@ -175,31 +193,6 @@ public class ReflectionProtoGenerator extends AbstractProtoGenerator<Class<?>> {
         }
     }
 
-    @Override
-    protected Optional<String> extractName(Class<?> clazz) {
-        BeanInfo beanInfo;
-        try {
-            beanInfo = Introspector.getBeanInfo(clazz);
-        } catch (IntrospectionException e) {
-            throw new RuntimeException(e);
-        }
-        String name = beanInfo.getBeanDescriptor().getBeanClass().getSimpleName();
-
-        Predicate<String> typeExclusions = ExclusionTypeUtils.createTypeExclusions();
-        if (typeExclusions.test(clazz.getCanonicalName())) {
-            return Optional.empty();
-        }
-        Generated generatedData = clazz.getAnnotation(Generated.class);
-        if (generatedData != null) {
-            name = generatedData.name().isEmpty() ? name : generatedData.name();
-            if (generatedData.hidden()) {
-                // since class is marked as hidden skip processing of that class
-                return Optional.empty();
-            }
-        }
-        return Optional.of(name);
-    }
-
     private void addEnumField(Field field, ProtoEnum pEnum) {
         ProtoEnumValue protoEnumValue = field.getAnnotation(ProtoEnumValue.class);
         Integer ordinal = null;
@@ -286,4 +279,27 @@ public class ReflectionProtoGenerator extends AbstractProtoGenerator<Class<?>> {
             return new ReflectionProtoGenerator(modelClasses, extractDataClasses(modelClasses));
         }
     }
+
+    private boolean isValidProperty(Class<?> clazz, PropertyDescriptor propertyDescriptor) {
+        try {
+            if (propertyDescriptor.getName().equals("class")) {
+                return false;
+            }
+
+            Field propertyField = getFieldFromClass(clazz, propertyDescriptor.getName());
+
+            // ignore static and/or transient fields
+            int mod = propertyField.getModifiers();
+            if (Modifier.isStatic(mod) || Modifier.isTransient(mod)) {
+                return false;
+            }
+
+            return true;
+        } catch (IllegalArgumentException ex) {
+            LOGGER.warn(ex.getMessage());
+            // a method starting with get or set without a corresponding backing field makes java beans to
+            // still generate a property descriptor, it should be ignored
+            return false;
+        }
+    }
 }
diff --git a/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/main/java/org/kie/kogito/quarkus/workflow/deployment/JandexProtoGenerator.java b/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/main/java/org/kie/kogito/quarkus/workflow/deployment/JandexProtoGenerator.java
index 558a042ae0..08ac15a972 100644
--- a/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/main/java/org/kie/kogito/quarkus/workflow/deployment/JandexProtoGenerator.java
+++ b/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/main/java/org/kie/kogito/quarkus/workflow/deployment/JandexProtoGenerator.java
@@ -54,7 +54,7 @@ import static java.util.Collections.emptyList;
 import static java.util.stream.Collectors.toList;
 
 public class JandexProtoGenerator extends AbstractProtoGenerator<ClassInfo> {
-
+    private static final Logger LOGGER = LoggerFactory.getLogger(JandexProtoGenerator.class);
     private static final DotName ENUM_VALUE_ANNOTATION = DotName.createSimple(ProtoEnumValue.class.getName());
     private static final DotName generatedAnnotation = DotName.createSimple(Generated.class.getCanonicalName());
     private static final DotName variableInfoAnnotation = DotName.createSimple(VariableInfo.class.getCanonicalName());
@@ -92,15 +92,29 @@ public class JandexProtoGenerator extends AbstractProtoGenerator<ClassInfo> {
         return Optional.of(name);
     }
 
+    protected Optional<String> fqn(ClassInfo dataModel) {
+        if (isHidden(dataModel)) {
+            // since class is marked as hidden skip processing of that class
+            return Optional.empty();
+        }
+
+        String name = dataModel.simpleName();
+        String altName = getReferenceOfModel(dataModel, "name");
+        if (altName != null) {
+            name = altName;
+        }
+        return Optional.of(dataModel.name().packagePrefix() + "." + name);
+    }
+
     @Override
     protected ProtoMessage messageFromClass(Proto proto, Set<String> alreadyGenerated, ClassInfo clazz, String messageComment, String fieldComment) throws Exception {
-        Optional<String> optionalName = extractName(clazz);
-        if (!optionalName.isPresent()) {
-            // if name cannot be extracted let skip the object
+        if (!shouldGenerateProto(clazz)) {
+            LOGGER.info("Skipping generating jandex proto for class {}", clazz);
             return null;
         }
+        LOGGER.debug("Generating reflection proto for class {}", clazz);
 
-        String name = optionalName.get();
+        String name = extractName(clazz).get();
 
         ProtoMessage message = new ProtoMessage(name, clazz.name().prefix().toString());
         for (FieldInfo pd : extractAllFields(clazz)) {
@@ -157,7 +171,7 @@ public class JandexProtoGenerator extends AbstractProtoGenerator<ClassInfo> {
                 protoType = optionalProtoType.get();
             }
 
-            ProtoField protoField = message.addField(applicabilityByType(fieldTypeString), protoType, pd.name());
+            ProtoField protoField = message.addField(computeCardinalityModifier(fieldTypeString), protoType, pd.name());
             protoField.setComment(completeFieldComment);
             if (KOGITO_SERIALIZABLE.equals(protoType)) {
                 protoField.setOption(format("[(%s) = \"%s\"]", KOGITO_JAVA_CLASS_OPTION, fieldTypeString.equals(ARRAY) ? pd.type().toString() : pd.type().name().toString()));
@@ -168,6 +182,10 @@ public class JandexProtoGenerator extends AbstractProtoGenerator<ClassInfo> {
         return message;
     }
 
+    protected boolean shouldGenerateProto(ClassInfo clazz) {
+        return extractName(clazz).isPresent();
+    }
+
     private boolean isCollection(FieldInfo pd) {
         if (pd.type().kind() == Kind.PARAMETERIZED_TYPE || pd.type().kind() == Kind.CLASS) {
             try {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@kie.apache.org
For additional commands, e-mail: commits-help@kie.apache.org