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

pefernan 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 c8c9c6dbb5 [incubator-kie-issues#2191] Allow nodes public API resolve 
the right `NodeType` (#4148)
c8c9c6dbb5 is described below

commit c8c9c6dbb51dcc91eb3b1df499c842735a0d51f7
Author: Pere Fernández <[email protected]>
AuthorDate: Mon Dec 15 17:14:38 2025 +0100

    [incubator-kie-issues#2191] Allow nodes public API resolve the right 
`NodeType` (#4148)
    
    Co-authored-by: Pere Fernández <[email protected]>
---
 .../bpmn2/xml/IntermediateThrowEventHandler.java   |  3 +-
 .../jbpm/workflow/core/impl/ExtendedNodeImpl.java  |  5 ++
 .../java/org/jbpm/workflow/core/impl/NodeImpl.java | 16 +++++
 .../org/jbpm/workflow/core/node/ActionNode.java    |  9 +++
 .../jbpm/workflow/core/node/BoundaryEventNode.java |  5 ++
 .../org/jbpm/workflow/core/node/CatchLinkNode.java |  4 ++
 .../workflow/core/node/CompositeContextNode.java   |  9 +++
 .../org/jbpm/workflow/core/node/CompositeNode.java |  8 +++
 .../org/jbpm/workflow/core/node/DynamicNode.java   |  2 +
 .../java/org/jbpm/workflow/core/node/EndNode.java  |  5 ++
 .../org/jbpm/workflow/core/node/EventNode.java     |  9 +++
 .../workflow/core/node/EventSubProcessNode.java    |  5 ++
 .../org/jbpm/workflow/core/node/FaultNode.java     |  5 ++
 .../org/jbpm/workflow/core/node/ForEachNode.java   | 10 +++
 .../org/jbpm/workflow/core/node/HumanTaskNode.java |  2 +
 .../java/org/jbpm/workflow/core/node/Join.java     | 12 ++++
 .../org/jbpm/workflow/core/node/MilestoneNode.java |  5 ++
 .../org/jbpm/workflow/core/node/RuleSetNode.java   |  5 ++
 .../java/org/jbpm/workflow/core/node/Split.java    | 14 ++++
 .../org/jbpm/workflow/core/node/StartNode.java     |  2 +
 .../jbpm/workflow/core/node/StateBasedNode.java    |  7 +-
 .../org/jbpm/workflow/core/node/StateNode.java     |  5 ++
 .../jbpm/workflow/core/node/SubProcessNode.java    |  5 ++
 .../org/jbpm/workflow/core/node/ThrowLinkNode.java |  4 ++
 .../org/jbpm/workflow/core/node/TimerNode.java     |  5 ++
 .../org/jbpm/workflow/core/node/WorkItemNode.java  |  9 +++
 .../org/jbpm/workflow/core/node/NodeTypeTest.java  | 80 ++++++++++++++++++++++
 .../org/jbpm/workflow/instance/node/MockNode.java  |  4 ++
 .../KogitoAddOnJobsKnativeEventingProcessor.java   |  8 +--
 ...ogitoAddOnJobsKnativeEventingProcessorTest.java |  7 +-
 30 files changed, 259 insertions(+), 10 deletions(-)

diff --git 
a/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/IntermediateThrowEventHandler.java
 
b/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/IntermediateThrowEventHandler.java
index 689215bd42..6c6f8b1ba6 100755
--- 
a/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/IntermediateThrowEventHandler.java
+++ 
b/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/IntermediateThrowEventHandler.java
@@ -42,6 +42,7 @@ import org.jbpm.workflow.core.impl.IOSpecification;
 import org.jbpm.workflow.core.node.ActionNode;
 import org.jbpm.workflow.core.node.CompositeNode;
 import org.jbpm.workflow.core.node.ThrowLinkNode;
+import org.kie.api.definition.process.NodeType;
 import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
 import org.xml.sax.Attributes;
@@ -70,7 +71,7 @@ public class IntermediateThrowEventHandler extends 
AbstractNodeHandler {
 
     @Override
     protected Node createNode(Attributes attrs) {
-        return new ActionNode();
+        return new ActionNode(NodeType.THROW_EVENT);
     }
 
     @Override
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/ExtendedNodeImpl.java
 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/ExtendedNodeImpl.java
index a0f4e21583..a1bd094c28 100755
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/ExtendedNodeImpl.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/ExtendedNodeImpl.java
@@ -23,6 +23,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.jbpm.workflow.core.DroolsAction;
+import org.kie.api.definition.process.NodeType;
 
 public class ExtendedNodeImpl extends NodeImpl {
 
@@ -35,6 +36,10 @@ public class ExtendedNodeImpl extends NodeImpl {
 
     private Map<String, List<DroolsAction>> actions = new HashMap<>();
 
+    protected ExtendedNodeImpl(NodeType nodeType) {
+        super(nodeType);
+    }
+
     public void setActions(String type, List<DroolsAction> actions) {
         this.actions.put(type, actions);
     }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/NodeImpl.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/NodeImpl.java
index 13a21788e1..a840de7927 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/NodeImpl.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/NodeImpl.java
@@ -38,6 +38,7 @@ import org.jbpm.workflow.core.Node;
 import org.jbpm.workflow.core.WorkflowProcess;
 import org.kie.api.definition.process.Connection;
 import org.kie.api.definition.process.NodeContainer;
+import org.kie.api.definition.process.NodeType;
 import org.kie.api.definition.process.WorkflowElementIdentifier;
 
 import static 
org.jbpm.workflow.instance.WorkflowProcessParameters.WORKFLOW_PARAM_MULTIPLE_CONNECTIONS;
@@ -62,13 +63,19 @@ public abstract class NodeImpl implements Node, 
ContextResolver, Mappable {
 
     private IOSpecification ioSpecification;
     private MultiInstanceSpecification multiInstanceSpecification;
+    private NodeType nodeType;
 
     public NodeImpl() {
+        this(NodeType.INTERNAL);
+    }
+
+    protected NodeImpl(NodeType nodeType) {
         this.id = WorkflowElementIdentifierFactory.newRandom();
         this.incomingConnections = new HashMap<>();
         this.outgoingConnections = new HashMap<>();
         this.ioSpecification = new IOSpecification();
         this.multiInstanceSpecification = new MultiInstanceSpecification();
+        this.nodeType = nodeType;
     }
 
     public void setMultiInstanceSpecification(MultiInstanceSpecification 
multiInstanceSpecification) {
@@ -152,6 +159,15 @@ public abstract class NodeImpl implements Node, 
ContextResolver, Mappable {
         return this.id;
     }
 
+    @Override
+    public NodeType getNodeType() {
+        return nodeType;
+    }
+
+    protected void setNodeType(NodeType nodeType) {
+        this.nodeType = nodeType;
+    }
+
     @Override
     public void setId(WorkflowElementIdentifier id) {
         this.id = id;
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/ActionNode.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/ActionNode.java
index 53f74b4143..5c3d57b618 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/ActionNode.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/ActionNode.java
@@ -26,6 +26,7 @@ import org.jbpm.workflow.core.Node;
 import org.jbpm.workflow.core.impl.DataAssociation;
 import org.jbpm.workflow.core.impl.ExtendedNodeImpl;
 import org.kie.api.definition.process.Connection;
+import org.kie.api.definition.process.NodeType;
 
 import static 
org.jbpm.workflow.instance.WorkflowProcessParameters.WORKFLOW_PARAM_MULTIPLE_CONNECTIONS;
 
@@ -39,6 +40,14 @@ public class ActionNode extends ExtendedNodeImpl {
 
     private DroolsAction action;
 
+    public ActionNode() {
+        super(NodeType.SCRIPT_TASK);
+    }
+
+    public ActionNode(NodeType nodeType) {
+        super(nodeType);
+    }
+
     public DroolsAction getAction() {
         return action;
     }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/BoundaryEventNode.java
 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/BoundaryEventNode.java
index 0097be4247..bab0154b94 100755
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/BoundaryEventNode.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/BoundaryEventNode.java
@@ -21,6 +21,7 @@ package org.jbpm.workflow.core.node;
 import java.util.function.Function;
 
 import org.jbpm.process.core.event.EventFilter;
+import org.kie.api.definition.process.NodeType;
 
 public class BoundaryEventNode extends EventNode {
 
@@ -28,6 +29,10 @@ public class BoundaryEventNode extends EventNode {
 
     private String attachedToNodeId;
 
+    public BoundaryEventNode() {
+        super(NodeType.BOUNDARY_EVENT);
+    }
+
     public String getAttachedToNodeId() {
         return attachedToNodeId;
     }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/CatchLinkNode.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/CatchLinkNode.java
index ff4cec2303..dfdd7d78d6 100755
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/CatchLinkNode.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/CatchLinkNode.java
@@ -19,9 +19,13 @@
 package org.jbpm.workflow.core.node;
 
 import org.jbpm.workflow.core.impl.ExtendedNodeImpl;
+import org.kie.api.definition.process.NodeType;
 
 public class CatchLinkNode extends ExtendedNodeImpl {
 
     private static final long serialVersionUID = 201105121554L;
 
+    public CatchLinkNode() {
+        super(NodeType.CATCH_LINK);
+    }
 }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/CompositeContextNode.java
 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/CompositeContextNode.java
index ca9210ad3c..c414ccb593 100755
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/CompositeContextNode.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/CompositeContextNode.java
@@ -24,6 +24,7 @@ import org.jbpm.process.core.Context;
 import org.jbpm.process.core.ContextContainer;
 import org.jbpm.process.core.context.AbstractContext;
 import org.jbpm.process.core.impl.ContextContainerImpl;
+import org.kie.api.definition.process.NodeType;
 
 public class CompositeContextNode extends CompositeNode implements 
ContextContainer {
 
@@ -31,6 +32,14 @@ public class CompositeContextNode extends CompositeNode 
implements ContextContai
 
     private ContextContainer contextContainer = new ContextContainerImpl();
 
+    protected CompositeContextNode(NodeType nodeType) {
+        super(nodeType);
+    }
+
+    public CompositeContextNode() {
+        super(NodeType.INTERNAL);
+    }
+
     public List<Context> getContexts(String contextType) {
         return this.contextContainer.getContexts(contextType);
     }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/CompositeNode.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/CompositeNode.java
index 72a95fb161..641bd40d4e 100755
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/CompositeNode.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/CompositeNode.java
@@ -32,6 +32,7 @@ import org.jbpm.workflow.core.impl.ConnectionImpl;
 import org.jbpm.workflow.core.impl.NodeContainerImpl;
 import org.jbpm.workflow.core.impl.NodeImpl;
 import org.kie.api.definition.process.Connection;
+import org.kie.api.definition.process.NodeType;
 import org.kie.api.definition.process.WorkflowElementIdentifier;
 
 public class CompositeNode extends StateBasedNode implements NodeContainer, 
EventNodeInterface {
@@ -45,6 +46,11 @@ public class CompositeNode extends StateBasedNode implements 
NodeContainer, Even
     private boolean autoComplete = true;
 
     public CompositeNode() {
+        this(NodeType.INTERNAL);
+    }
+
+    protected CompositeNode(NodeType type) {
+        super(type);
         this.nodeContainer = new NodeContainerImpl();
     }
 
@@ -439,6 +445,7 @@ public class CompositeNode extends StateBasedNode 
implements NodeContainer, Even
         private String inType;
 
         public CompositeNodeStart(CompositeNode parentNode, 
org.kie.api.definition.process.Node outNode, String outType) {
+            super(NodeType.INTERNAL);
             
setId(WorkflowElementIdentifierFactory.fromExternalFormat(parentNode.getId().toExternalFormat()
 + ":composite:start"));
             setName("Composite node start");
             this.inNodeId = outNode.getId();
@@ -475,6 +482,7 @@ public class CompositeNode extends StateBasedNode 
implements NodeContainer, Even
         private String outType;
 
         public CompositeNodeEnd(CompositeNode parentNode, 
org.kie.api.definition.process.Node outNode, String outType) {
+            super(NodeType.INTERNAL);
             
setId(WorkflowElementIdentifierFactory.fromExternalFormat(parentNode.getId().toExternalFormat()
 + ":composite:end"));
             setName("Composite node end");
             this.outNodeId = outNode.getId();
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/DynamicNode.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/DynamicNode.java
index d38584d943..8ed3014b29 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/DynamicNode.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/DynamicNode.java
@@ -24,6 +24,7 @@ import java.util.stream.Collectors;
 
 import org.jbpm.process.instance.impl.ReturnValueEvaluator;
 import org.kie.api.definition.process.Node;
+import org.kie.api.definition.process.NodeType;
 import org.kie.api.definition.process.WorkflowElementIdentifier;
 import org.kie.kogito.internal.process.runtime.KogitoProcessContext;
 
@@ -47,6 +48,7 @@ public class DynamicNode extends CompositeContextNode {
     private String language;
 
     public DynamicNode() {
+        super(NodeType.AD_HOC_SUBPROCESS);
         setAutoComplete(false);
     }
 
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/EndNode.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/EndNode.java
index 222f13d1c7..fbcd73d919 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/EndNode.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/EndNode.java
@@ -21,6 +21,7 @@ package org.jbpm.workflow.core.node;
 import org.jbpm.workflow.core.Node;
 import org.jbpm.workflow.core.impl.ExtendedNodeImpl;
 import org.kie.api.definition.process.Connection;
+import org.kie.api.definition.process.NodeType;
 
 import static 
org.jbpm.workflow.instance.WorkflowProcessParameters.WORKFLOW_PARAM_MULTIPLE_CONNECTIONS;
 
@@ -39,6 +40,10 @@ public class EndNode extends ExtendedNodeImpl {
     private boolean terminate = true;
     private int scope = CONTAINER_SCOPE;
 
+    public EndNode() {
+        super(NodeType.END);
+    }
+
     public boolean isTerminate() {
         return terminate;
     }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/EventNode.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/EventNode.java
index 0ce70b86f8..01b712a1b8 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/EventNode.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/EventNode.java
@@ -27,6 +27,7 @@ import org.jbpm.process.core.event.EventTypeFilter;
 import org.jbpm.workflow.core.Node;
 import org.jbpm.workflow.core.impl.ExtendedNodeImpl;
 import org.kie.api.definition.process.Connection;
+import org.kie.api.definition.process.NodeType;
 
 import static 
org.jbpm.workflow.instance.WorkflowProcessParameters.WORKFLOW_PARAM_MULTIPLE_CONNECTIONS;
 
@@ -39,6 +40,14 @@ public class EventNode extends ExtendedNodeImpl implements 
EventNodeInterface {
     private String variableName;
     private String scope;
 
+    public EventNode() {
+        super(NodeType.CATCH_EVENT);
+    }
+
+    protected EventNode(NodeType nodeType) {
+        super(nodeType);
+    }
+
     public String getVariableName() {
         return variableName;
     }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/EventSubProcessNode.java
 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/EventSubProcessNode.java
index fe9d04c6e3..53f4be094d 100755
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/EventSubProcessNode.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/EventSubProcessNode.java
@@ -26,6 +26,7 @@ import org.jbpm.process.core.event.EventTypeFilter;
 import org.jbpm.process.core.timer.Timer;
 import org.jbpm.workflow.core.DroolsAction;
 import org.kie.api.definition.process.Node;
+import org.kie.api.definition.process.NodeType;
 
 public class EventSubProcessNode extends CompositeContextNode {
 
@@ -35,6 +36,10 @@ public class EventSubProcessNode extends 
CompositeContextNode {
     private List<EventTypeFilter> eventTypeFilters = new ArrayList<>();
     private boolean keepActive = true;
 
+    public EventSubProcessNode() {
+        super(NodeType.EVENT_SUBPROCESS);
+    }
+
     public void addEvent(EventTypeFilter filter) {
         String type = filter.getType();
         this.events.add(type);
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/FaultNode.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/FaultNode.java
index bd5a13bfdf..0522d97de0 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/FaultNode.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/FaultNode.java
@@ -21,6 +21,7 @@ package org.jbpm.workflow.core.node;
 import org.jbpm.workflow.core.Node;
 import org.jbpm.workflow.core.impl.ExtendedNodeImpl;
 import org.kie.api.definition.process.Connection;
+import org.kie.api.definition.process.NodeType;
 
 /**
  * Default implementation of a fault node.
@@ -37,6 +38,10 @@ public class FaultNode extends ExtendedNodeImpl {
     private String faultVariable;
     private boolean terminateParent = false;
 
+    public FaultNode() {
+        super(NodeType.FAULT);
+    }
+
     public String getFaultVariable() {
         return faultVariable;
     }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/ForEachNode.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/ForEachNode.java
index 2bacf60430..78d60d9581 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/ForEachNode.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/ForEachNode.java
@@ -32,6 +32,7 @@ import 
org.jbpm.ruleflow.core.WorkflowElementIdentifierFactory;
 import org.jbpm.workflow.core.Node;
 import org.jbpm.workflow.core.impl.ConnectionImpl;
 import org.jbpm.workflow.core.impl.ExtendedNodeImpl;
+import org.kie.api.definition.process.NodeType;
 import org.kie.api.definition.process.WorkflowElementIdentifier;
 import org.kie.kogito.process.expr.Expression;
 import org.kie.kogito.process.expr.ExpressionHandlerFactory;
@@ -63,6 +64,8 @@ public class ForEachNode extends CompositeContextNode {
     }
 
     public ForEachNode(WorkflowElementIdentifier id) {
+        super(NodeType.FOR_EACH);
+
         setId(id);
         // Split
         ForEachSplitNode split = new ForEachSplitNode();
@@ -298,11 +301,18 @@ public class ForEachNode extends CompositeContextNode {
 
     public static class ForEachSplitNode extends ExtendedNodeImpl {
         private static final long serialVersionUID = 510l;
+
+        public ForEachSplitNode() {
+            super(NodeType.INTERNAL);
+        }
     }
 
     public static class ForEachJoinNode extends ExtendedNodeImpl {
         private static final long serialVersionUID = 510l;
 
+        public ForEachJoinNode() {
+            super(NodeType.INTERNAL);
+        }
     }
 
     @Override
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/HumanTaskNode.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/HumanTaskNode.java
index 1632732093..50df4d0958 100755
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/HumanTaskNode.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/HumanTaskNode.java
@@ -26,6 +26,7 @@ import org.jbpm.process.core.Work;
 import org.jbpm.process.core.datatype.impl.type.StringDataType;
 import org.jbpm.process.core.impl.ParameterDefinitionImpl;
 import org.jbpm.process.core.impl.WorkImpl;
+import org.kie.api.definition.process.NodeType;
 
 public class HumanTaskNode extends WorkItemNode {
 
@@ -54,6 +55,7 @@ public class HumanTaskNode extends WorkItemNode {
             "BusinessAdministratorGroupId");
 
     public HumanTaskNode() {
+        super(NodeType.HUMAN_TASK);
         Work work = new WorkImpl();
         work.setName("Human Task");
         Set<ParameterDefinition> parameterDefinitions = new HashSet<>();
diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/Join.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/Join.java
index c91fec1525..e1c16b51a4 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/Join.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/Join.java
@@ -21,6 +21,7 @@ package org.jbpm.workflow.core.node;
 import org.jbpm.workflow.core.Node;
 import org.jbpm.workflow.core.impl.NodeImpl;
 import org.kie.api.definition.process.Connection;
+import org.kie.api.definition.process.NodeType;
 
 /**
  * Default implementation of a join.
@@ -60,11 +61,22 @@ public class Join extends NodeImpl {
     private String n;
 
     public Join() {
+        super(NodeType.COMPLEX_GATEWAY);
         this.type = TYPE_UNDEFINED;
     }
 
     public void setType(final int type) {
         this.type = type;
+        this.setNodeType(fromType(type));
+    }
+
+    private static NodeType fromType(int type) {
+        return switch (type) {
+            case TYPE_AND -> NodeType.PARALLEL_GATEWAY;
+            case TYPE_OR -> NodeType.INCLUSIVE_GATEWAY;
+            case TYPE_XOR -> NodeType.EXCLUSIVE_GATEWAY;
+            default -> NodeType.COMPLEX_GATEWAY;
+        };
     }
 
     public int getType() {
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/MilestoneNode.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/MilestoneNode.java
index 1a1ba697ff..3e144da016 100755
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/MilestoneNode.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/MilestoneNode.java
@@ -22,6 +22,7 @@ import java.util.function.Predicate;
 
 import org.jbpm.workflow.core.Node;
 import org.kie.api.definition.process.Connection;
+import org.kie.api.definition.process.NodeType;
 import org.kie.api.runtime.process.ProcessContext;
 
 import static 
org.jbpm.workflow.instance.WorkflowProcessParameters.WORKFLOW_PARAM_MULTIPLE_CONNECTIONS;
@@ -39,6 +40,10 @@ public class MilestoneNode extends StateBasedNode implements 
Constrainable {
     private String condition;
     private Predicate<ProcessContext> conditionPredicate;
 
+    public MilestoneNode() {
+        super(NodeType.MILESTONE);
+    }
+
     public void setCondition(String condition) {
         this.condition = condition;
     }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/RuleSetNode.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/RuleSetNode.java
index b7d9f87207..07109a5fd1 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/RuleSetNode.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/RuleSetNode.java
@@ -32,6 +32,7 @@ import org.jbpm.process.core.impl.ContextContainerImpl;
 import org.jbpm.workflow.core.Node;
 import org.jbpm.workflow.instance.rule.RuleType;
 import org.kie.api.definition.process.Connection;
+import org.kie.api.definition.process.NodeType;
 import org.kie.api.runtime.KieRuntime;
 import org.kie.kogito.decision.DecisionModel;
 
@@ -58,6 +59,10 @@ public class RuleSetNode extends StateBasedNode implements 
ContextContainer {
     private Supplier<KieRuntime> kieRuntime;
     private RuleUnitFactory<RuleUnitData> ruleUnitFactory;
 
+    public RuleSetNode() {
+        super(NodeType.BUSINESS_RULE);
+    }
+
     public void setRuleType(RuleType ruleType) {
         this.ruleType = ruleType;
     }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/Split.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/Split.java
index 77c4a8e717..b9f82cd853 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/Split.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/Split.java
@@ -25,6 +25,7 @@ import org.jbpm.workflow.core.Node;
 import org.jbpm.workflow.core.impl.ConnectionRef;
 import org.jbpm.workflow.core.impl.NodeImpl;
 import org.kie.api.definition.process.Connection;
+import org.kie.api.definition.process.NodeType;
 
 import static 
org.jbpm.workflow.instance.WorkflowProcessParameters.WORKFLOW_PARAM_MULTIPLE_CONNECTIONS;
 
@@ -65,15 +66,28 @@ public class Split extends NodeImpl implements 
Constrainable {
     private int type;
 
     public Split() {
+        super(NodeType.COMPLEX_GATEWAY);
         this.type = TYPE_UNDEFINED;
     }
 
     public Split(final int type) {
+        super(fromType(type));
         this.type = type;
     }
 
     public void setType(final int type) {
         this.type = type;
+        setNodeType(fromType(type));
+    }
+
+    private static NodeType fromType(int type) {
+        return switch (type) {
+            case TYPE_AND -> NodeType.PARALLEL_GATEWAY;
+            case TYPE_XAND -> NodeType.EVENT_BASED_GATEWAY;
+            case TYPE_OR -> NodeType.INCLUSIVE_GATEWAY;
+            case TYPE_XOR -> NodeType.EXCLUSIVE_GATEWAY;
+            default -> NodeType.COMPLEX_GATEWAY;
+        };
     }
 
     public int getType() {
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/StartNode.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/StartNode.java
index e6e43a2bb3..d6b678a00c 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/StartNode.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/StartNode.java
@@ -26,6 +26,7 @@ import org.jbpm.ruleflow.core.Metadata;
 import org.jbpm.workflow.core.Node;
 import org.jbpm.workflow.core.impl.ExtendedNodeImpl;
 import org.kie.api.definition.process.Connection;
+import org.kie.api.definition.process.NodeType;
 
 import static 
org.jbpm.workflow.instance.WorkflowProcessParameters.WORKFLOW_PARAM_MULTIPLE_CONNECTIONS;
 
@@ -46,6 +47,7 @@ public class StartNode extends ExtendedNodeImpl {
     private Timer timer;
 
     public StartNode() {
+        super(NodeType.START);
         setMetaData(Metadata.EVENT_TYPE, Metadata.EVENT_TYPE_NONE);
     }
 
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/StateBasedNode.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/StateBasedNode.java
index 868b145a0d..cbba3c9bb8 100755
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/StateBasedNode.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/StateBasedNode.java
@@ -28,10 +28,11 @@ import 
org.jbpm.process.instance.impl.actions.CompleteStateBasedNodeInstanceActi
 import org.jbpm.workflow.core.DroolsAction;
 import org.jbpm.workflow.core.impl.DroolsConsequenceAction;
 import org.jbpm.workflow.core.impl.ExtendedNodeImpl;
+import org.kie.api.definition.process.NodeType;
 
 import static org.jbpm.ruleflow.core.Metadata.ACTION;
 
-public class StateBasedNode extends ExtendedNodeImpl {
+public abstract class StateBasedNode extends ExtendedNodeImpl {
 
     private static final long serialVersionUID = 510l;
 
@@ -41,6 +42,10 @@ public class StateBasedNode extends ExtendedNodeImpl {
 
     private transient String duration;
 
+    protected StateBasedNode(NodeType nodeType) {
+        super(nodeType);
+    }
+
     public Map<Timer, DroolsAction> getTimers() {
         return timers;
     }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/StateNode.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/StateNode.java
index e9e0743fbf..f329df9edf 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/StateNode.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/StateNode.java
@@ -18,8 +18,13 @@
  */
 package org.jbpm.workflow.core.node;
 
+import org.kie.api.definition.process.NodeType;
+
 public class StateNode extends CompositeContextNode implements Constrainable {
 
     private static final long serialVersionUID = 510l;
 
+    public StateNode() {
+        super(NodeType.CONDITIONAL);
+    }
 }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/SubProcessNode.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/SubProcessNode.java
index 7dcad36021..d3711219a4 100755
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/SubProcessNode.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/SubProcessNode.java
@@ -26,6 +26,7 @@ import org.jbpm.process.core.context.AbstractContext;
 import org.jbpm.process.core.impl.ContextContainerImpl;
 import org.jbpm.workflow.core.Node;
 import org.kie.api.definition.process.Connection;
+import org.kie.api.definition.process.NodeType;
 
 import static 
org.jbpm.workflow.instance.WorkflowProcessParameters.WORKFLOW_PARAM_MULTIPLE_CONNECTIONS;
 
@@ -47,6 +48,10 @@ public class SubProcessNode extends StateBasedNode 
implements ContextContainer {
     private boolean independent = true;
     private SubProcessFactory<?> subProcessFactory;
 
+    public SubProcessNode() {
+        super(NodeType.SUBPROCESS);
+    }
+
     public void setProcessId(final String processId) {
         this.processId = processId;
     }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/ThrowLinkNode.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/ThrowLinkNode.java
index 74f3ec3c79..9a9af38507 100755
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/ThrowLinkNode.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/ThrowLinkNode.java
@@ -19,9 +19,13 @@
 package org.jbpm.workflow.core.node;
 
 import org.jbpm.workflow.core.impl.ExtendedNodeImpl;
+import org.kie.api.definition.process.NodeType;
 
 public class ThrowLinkNode extends ExtendedNodeImpl {
 
     private static final long serialVersionUID = 201105121554L;
 
+    public ThrowLinkNode() {
+        super(NodeType.THROW_LINK);
+    }
 }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/TimerNode.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/TimerNode.java
index 5096a47f0e..fdbe662aa2 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/TimerNode.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/TimerNode.java
@@ -22,6 +22,7 @@ import org.jbpm.process.core.timer.Timer;
 import org.jbpm.workflow.core.Node;
 import org.jbpm.workflow.core.impl.ExtendedNodeImpl;
 import org.kie.api.definition.process.Connection;
+import org.kie.api.definition.process.NodeType;
 
 import static 
org.jbpm.workflow.instance.WorkflowProcessParameters.WORKFLOW_PARAM_MULTIPLE_CONNECTIONS;
 
@@ -31,6 +32,10 @@ public class TimerNode extends ExtendedNodeImpl {
 
     private Timer timer;
 
+    public TimerNode() {
+        super(NodeType.TIMER);
+    }
+
     public void setTimer(Timer timer) {
         this.timer = timer;
     }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/WorkItemNode.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/WorkItemNode.java
index 5eb00999d0..f1a6d2ff22 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/WorkItemNode.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/WorkItemNode.java
@@ -27,6 +27,7 @@ import org.jbpm.process.core.context.AbstractContext;
 import org.jbpm.process.core.impl.ContextContainerImpl;
 import org.jbpm.workflow.core.Node;
 import org.kie.api.definition.process.Connection;
+import org.kie.api.definition.process.NodeType;
 
 import static 
org.jbpm.workflow.instance.WorkflowProcessParameters.WORKFLOW_PARAM_MULTIPLE_CONNECTIONS;
 
@@ -44,6 +45,14 @@ public class WorkItemNode extends StateBasedNode implements 
ContextContainer {
 
     private boolean waitForCompletion = true;
 
+    public WorkItemNode() {
+        super(NodeType.WORKITEM_TASK);
+    }
+
+    protected WorkItemNode(NodeType nodeType) {
+        super(nodeType);
+    }
+
     public Work getWork() {
         return work;
     }
diff --git 
a/jbpm/jbpm-flow/src/test/java/org/jbpm/workflow/core/node/NodeTypeTest.java 
b/jbpm/jbpm-flow/src/test/java/org/jbpm/workflow/core/node/NodeTypeTest.java
new file mode 100644
index 0000000000..4430ce06e4
--- /dev/null
+++ b/jbpm/jbpm-flow/src/test/java/org/jbpm/workflow/core/node/NodeTypeTest.java
@@ -0,0 +1,80 @@
+/*
+ * 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.workflow.core.node;
+
+import org.junit.jupiter.api.Test;
+import org.kie.api.definition.process.Node;
+import org.kie.api.definition.process.NodeType;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class NodeTypeTest {
+
+    @Test
+    public void testNodeTypeSpec() {
+
+        Node node = new ActionNode();
+        assertEquals(NodeType.SCRIPT_TASK, node.getNodeType());
+        node = new ForEachNode();
+        assertEquals(NodeType.FOR_EACH, node.getNodeType());
+        node = new MilestoneNode();
+        assertEquals(NodeType.MILESTONE, node.getNodeType());
+        node = new FaultNode();
+        assertEquals(NodeType.FAULT, node.getNodeType());
+        node = new Join();
+        assertEquals(NodeType.COMPLEX_GATEWAY, node.getNodeType());
+        node = new Split(Split.TYPE_AND);
+        assertEquals(NodeType.PARALLEL_GATEWAY, node.getNodeType());
+        node = new Split(Split.TYPE_OR);
+        assertEquals(NodeType.INCLUSIVE_GATEWAY, node.getNodeType());
+        node = new Split(Split.TYPE_XOR);
+        assertEquals(NodeType.EXCLUSIVE_GATEWAY, node.getNodeType());
+        node = new Split(Split.TYPE_XAND);
+        assertEquals(NodeType.EVENT_BASED_GATEWAY, node.getNodeType());
+        node = new ThrowLinkNode();
+        assertEquals(NodeType.THROW_LINK, node.getNodeType());
+        node = new CatchLinkNode();
+        assertEquals(NodeType.CATCH_LINK, node.getNodeType());
+        node = new RuleSetNode();
+        assertEquals(NodeType.BUSINESS_RULE, node.getNodeType());
+        node = new TimerNode();
+        assertEquals(NodeType.TIMER, node.getNodeType());
+        node = new WorkItemNode();
+        assertEquals(NodeType.WORKITEM_TASK, node.getNodeType());
+        node = new SubProcessNode();
+        assertEquals(NodeType.SUBPROCESS, node.getNodeType());
+        node = new StateNode();
+        assertEquals(NodeType.CONDITIONAL, node.getNodeType());
+        node = new StartNode();
+        assertEquals(NodeType.START, node.getNodeType());
+        node = new HumanTaskNode();
+        assertEquals(NodeType.HUMAN_TASK, node.getNodeType());
+        node = new EventNode();
+        assertEquals(NodeType.CATCH_EVENT, node.getNodeType());
+        node = new EndNode();
+        assertEquals(NodeType.END, node.getNodeType());
+        node = new DynamicNode();
+        assertEquals(NodeType.AD_HOC_SUBPROCESS, node.getNodeType());
+        node = new EventSubProcessNode();
+        assertEquals(NodeType.EVENT_SUBPROCESS, node.getNodeType());
+        node = new BoundaryEventNode();
+        assertEquals(NodeType.BOUNDARY_EVENT, node.getNodeType());
+    }
+}
diff --git 
a/jbpm/jbpm-flow/src/test/java/org/jbpm/workflow/instance/node/MockNode.java 
b/jbpm/jbpm-flow/src/test/java/org/jbpm/workflow/instance/node/MockNode.java
index 1cdb1021d8..318f05f563 100755
--- a/jbpm/jbpm-flow/src/test/java/org/jbpm/workflow/instance/node/MockNode.java
+++ b/jbpm/jbpm-flow/src/test/java/org/jbpm/workflow/instance/node/MockNode.java
@@ -19,9 +19,13 @@
 package org.jbpm.workflow.instance.node;
 
 import org.jbpm.workflow.core.impl.ExtendedNodeImpl;
+import org.kie.api.definition.process.NodeType;
 
 public class MockNode extends ExtendedNodeImpl {
 
     private static final long serialVersionUID = 510l;
 
+    public MockNode() {
+        super(NodeType.INTERNAL);
+    }
 }
diff --git 
a/quarkus/addons/jobs/knative-eventing/deployment/src/main/java/org/kie/kogito/jobs/knative/eventing/quarkus/deployment/KogitoAddOnJobsKnativeEventingProcessor.java
 
b/quarkus/addons/jobs/knative-eventing/deployment/src/main/java/org/kie/kogito/jobs/knative/eventing/quarkus/deployment/KogitoAddOnJobsKnativeEventingProcessor.java
index ddab9db723..025cde56ed 100644
--- 
a/quarkus/addons/jobs/knative-eventing/deployment/src/main/java/org/kie/kogito/jobs/knative/eventing/quarkus/deployment/KogitoAddOnJobsKnativeEventingProcessor.java
+++ 
b/quarkus/addons/jobs/knative-eventing/deployment/src/main/java/org/kie/kogito/jobs/knative/eventing/quarkus/deployment/KogitoAddOnJobsKnativeEventingProcessor.java
@@ -73,10 +73,10 @@ public class KogitoAddOnJobsKnativeEventingProcessor 
extends OneOfCapabilityKogi
         List<Class<?>> reflectiveClasses = new ArrayList<>();
         
reflectiveClasses.addAll(org.kie.kogito.jobs.api.utils.ReflectionUtils.apiReflectiveClasses());
         
reflectiveClasses.addAll(org.kie.kogito.jobs.service.api.utils.ReflectionUtils.apiReflectiveClasses());
-        return new ReflectiveClassBuildItem(true,
-                true,
-                true,
-                reflectiveClasses.toArray(new Class[] {}));
+        return ReflectiveClassBuildItem.builder(reflectiveClasses.toArray(new 
Class[] {}))
+                .constructors()
+                .fields()
+                .build();
     }
 
     @BuildStep(onlyIfNot = IsTest.class, onlyIf = HasWorkflowExtension.class)
diff --git 
a/quarkus/addons/jobs/knative-eventing/deployment/src/test/java/org/kie/kogito/jobs/knative/eventing/quarkus/deployment/KogitoAddOnJobsKnativeEventingProcessorTest.java
 
b/quarkus/addons/jobs/knative-eventing/deployment/src/test/java/org/kie/kogito/jobs/knative/eventing/quarkus/deployment/KogitoAddOnJobsKnativeEventingProcessorTest.java
index 92d5ef31d6..204ab029a7 100644
--- 
a/quarkus/addons/jobs/knative-eventing/deployment/src/test/java/org/kie/kogito/jobs/knative/eventing/quarkus/deployment/KogitoAddOnJobsKnativeEventingProcessorTest.java
+++ 
b/quarkus/addons/jobs/knative-eventing/deployment/src/test/java/org/kie/kogito/jobs/knative/eventing/quarkus/deployment/KogitoAddOnJobsKnativeEventingProcessorTest.java
@@ -33,7 +33,6 @@ import org.jbpm.workflow.core.node.EndNode;
 import org.jbpm.workflow.core.node.EventNode;
 import org.jbpm.workflow.core.node.HumanTaskNode;
 import org.jbpm.workflow.core.node.StartNode;
-import org.jbpm.workflow.core.node.StateBasedNode;
 import org.jbpm.workflow.core.node.TimerNode;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -246,10 +245,10 @@ class KogitoAddOnJobsKnativeEventingProcessorTest {
      */
     private static KogitoWorkflowProcess mockProcess7() {
         Node startNode = new StartNode();
-        StateBasedNode stateBasedNode = new StateBasedNode();
-        stateBasedNode.setTimeout(DURATION);
+        HumanTaskNode humanTaskNode = new HumanTaskNode();
+        humanTaskNode.setTimeout(DURATION);
         Node endNode = new EndNode();
-        return mockProcess(PROCESS7_ID, startNode, stateBasedNode, endNode);
+        return mockProcess(PROCESS7_ID, startNode, humanTaskNode, endNode);
     }
 
     /**


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


Reply via email to