This is an automated email from the ASF dual-hosted git repository.
martinweiler pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git
The following commit(s) were added to refs/heads/main by this push:
new 7895141b9e7 [incubator-kie-issues#2377] Message start event without
data mapping fails code generation (#6821)
7895141b9e7 is described below
commit 7895141b9e7cc83ec6d1e3b5e499c719f42e865f
Author: Abhiram Gundala <[email protected]>
AuthorDate: Wed Jul 29 13:49:25 2026 -0400
[incubator-kie-issues#2377] Message start event without data mapping fails
code generation (#6821)
* Support message event without data mapping
* Fix service task regression
* Handling message consumer with no data
* Handle null event data
---
.../impl/AbstractCloudEventDataConverter.java | 2 +-
.../kogito/codegen/tests/MessageStartEventIT.java | 18 +++
.../MessageStartEventNoMapping.bpmn2 | 75 ++++++++++++
.../codegen/process/MessageConsumerGenerator.java | 25 ++--
.../events/CodegenMessageStartEventTest.java | 131 +++++++++++++++++++++
.../MessageEndEventNoMapping.bpmn2 | 46 ++++++++
.../MessageStartEventEmptyStructureRef.bpmn2 | 107 +++++++++++++++++
.../MessageStartEventNoMapping.bpmn2 | 75 ++++++++++++
.../java/org/jbpm/bpmn2/xml/MessageHandler.java | 26 ++--
.../java/org/jbpm/bpmn2/xml/ProcessHandler.java | 6 +-
.../org/jbpm/bpmn2/xml/ServiceTaskHandler.java | 3 +-
.../compiler/canonical/AbstractNodeVisitor.java | 3 +-
.../jbpm/compiler/canonical/TriggerMetaData.java | 9 +-
.../bpmn2/start/BPMN2-MessageStartNoMapping.bpmn2 | 77 ++++++++++++
.../test/java/org/jbpm/bpmn2/StartEventTest.java | 16 +++
15 files changed, 592 insertions(+), 27 deletions(-)
diff --git
a/kogito-api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/AbstractCloudEventDataConverter.java
b/kogito-api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/AbstractCloudEventDataConverter.java
index 9021c2a0a4c..354a2044f2e 100644
---
a/kogito-api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/AbstractCloudEventDataConverter.java
+++
b/kogito-api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/AbstractCloudEventDataConverter.java
@@ -56,7 +56,7 @@ public abstract class AbstractCloudEventDataConverter<O>
implements Converter<Cl
return Optional.of(targetClass.isAssignableFrom(pojo.getClass()) ?
targetClass.cast(pojo) : PojoCloudEventDataMapper.from(objectMapper,
targetClass).map(value).getValue());
} else if (value instanceof JsonCloudEventData) {
JsonNode node = ((JsonCloudEventData) value).getNode();
- return Optional.of(JsonNode.class.isAssignableFrom(targetClass) ?
targetClass.cast(node) : objectMapper.convertValue(node, targetClass));
+ return
Optional.ofNullable(JsonNode.class.isAssignableFrom(targetClass) ?
targetClass.cast(node) : objectMapper.convertValue(node, targetClass));
}
return Optional.empty();
}
diff --git
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/tests/MessageStartEventIT.java
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/tests/MessageStartEventIT.java
index 045aad5a564..b84160f1aea 100644
---
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/tests/MessageStartEventIT.java
+++
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/tests/MessageStartEventIT.java
@@ -55,6 +55,24 @@ public class MessageStartEventIT extends AbstractCodegenIT {
assertThat(result.toMap().get("customerId")).isNotNull().isEqualTo("CUS-00998877");
}
+ @Test
+ public void testMessageStartEventWithoutDataMappingProcess() throws
Exception {
+
+ Application app =
generateCodeProcessesOnly("messagestartevent/MessageStartEventNoMapping.bpmn2");
+ assertThat(app).isNotNull();
+
+ Process<? extends Model> p =
app.get(Processes.class).processById("MessageStartEventNoMapping");
+
+ Model m = p.createModel();
+
+ ProcessInstance<?> processInstance = p.createInstance(m);
+ processInstance.start("customers", null);
+
+
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
+ Model result = (Model) processInstance.variables();
+ assertThat(result.toMap()).isEmpty();
+ }
+
@Test
public void testMessageStartAndEndEventProcess() throws Exception {
diff --git
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/messagestartevent/MessageStartEventNoMapping.bpmn2
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/messagestartevent/MessageStartEventNoMapping.bpmn2
new file mode 100644
index 00000000000..aef837cee83
--- /dev/null
+++
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/resources/messagestartevent/MessageStartEventNoMapping.bpmn2
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
xmlns:java="http://www.java.com/javaTypes"
xmlns:tns="http://www.jboss.org/drools" xmlns="http://www.jboss.org/drools"
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd
http://www. [...]
+ <bpmn2:message id="Message_1" name="customers"/>
+ <bpmn2:process id="MessageStartEventNoMapping"
tns:packageName="org.kie.kogito.test" name="MessageStartEventNoMapping"
isExecutable="true" processType="Public">
+ <bpmn2:startEvent id="StartEvent_1" name="StartProcess">
+ <bpmn2:extensionElements>
+ <tns:metaData name="elementname">
+ <tns:metaValue><![CDATA[StartProcess]]></tns:metaValue>
+ </tns:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:outgoing>SequenceFlow_2</bpmn2:outgoing>
+ <bpmn2:messageEventDefinition id="MessageEventDefinition_1"
messageRef="Message_1"/>
+ </bpmn2:startEvent>
+ <bpmn2:scriptTask id="ScriptTask_1" name="Script Task 1"
scriptFormat="http://www.java.com/java">
+ <bpmn2:extensionElements>
+ <tns:metaData name="elementname">
+ <tns:metaValue><![CDATA[Script Task 1]]></tns:metaValue>
+ </tns:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
+ <bpmn2:outgoing>SequenceFlow_3</bpmn2:outgoing>
+ <bpmn2:script>System.out.println("Message
received");</bpmn2:script>
+ </bpmn2:scriptTask>
+ <bpmn2:sequenceFlow id="SequenceFlow_2" tns:priority="1"
sourceRef="StartEvent_1" targetRef="ScriptTask_1"/>
+ <bpmn2:endEvent id="EndEvent_1" name="End Event 1">
+ <bpmn2:extensionElements>
+ <tns:metaData name="elementname">
+ <tns:metaValue><![CDATA[End Event 1]]></tns:metaValue>
+ </tns:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:incoming>SequenceFlow_3</bpmn2:incoming>
+ </bpmn2:endEvent>
+ <bpmn2:sequenceFlow id="SequenceFlow_3" tns:priority="1"
sourceRef="ScriptTask_1" targetRef="EndEvent_1"/>
+ </bpmn2:process>
+ <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+ <bpmndi:BPMNPlane id="BPMNPlane_Process_1"
bpmnElement="MessageStartEventNoMapping">
+ <bpmndi:BPMNShape id="BPMNShape_StartEvent_1" bpmnElement="StartEvent_1">
+ <dc:Bounds height="36.0" width="36.0" x="120.0" y="100.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="BPMNShape_ScriptTask_1" bpmnElement="ScriptTask_1"
isExpanded="true">
+ <dc:Bounds height="50.0" width="110.0" x="261.0" y="93.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="BPMNShape_EndEvent_1" bpmnElement="EndEvent_1">
+ <dc:Bounds height="36.0" width="36.0" x="439.0" y="100.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_2"
bpmnElement="SequenceFlow_2" sourceElement="BPMNShape_StartEvent_1"
targetElement="BPMNShape_ScriptTask_1">
+ <di:waypoint xsi:type="dc:Point" x="156.0" y="118.0"/>
+ <di:waypoint xsi:type="dc:Point" x="261.0" y="118.0"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_3"
bpmnElement="SequenceFlow_3" sourceElement="BPMNShape_ScriptTask_1"
targetElement="BPMNShape_EndEvent_1">
+ <di:waypoint xsi:type="dc:Point" x="371.0" y="118.0"/>
+ <di:waypoint xsi:type="dc:Point" x="439.0" y="118.0"/>
+ </bpmndi:BPMNEdge>
+ </bpmndi:BPMNPlane>
+ </bpmndi:BPMNDiagram>
+</bpmn2:definitions>
diff --git
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/MessageConsumerGenerator.java
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/MessageConsumerGenerator.java
index 1e2e911eac6..178649c3099 100644
---
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/MessageConsumerGenerator.java
+++
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/MessageConsumerGenerator.java
@@ -40,6 +40,7 @@ import org.kie.kogito.event.cloudevents.utils.CloudEventUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.Modifier.Keyword;
+import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.ConstructorDeclaration;
@@ -52,6 +53,7 @@ import com.github.javaparser.ast.expr.NameExpr;
import com.github.javaparser.ast.expr.ObjectCreationExpr;
import com.github.javaparser.ast.expr.StringLiteralExpr;
import com.github.javaparser.ast.stmt.BlockStmt;
+import com.github.javaparser.ast.stmt.IfStmt;
import com.github.javaparser.ast.stmt.ReturnStmt;
import com.github.javaparser.ast.type.ClassOrInterfaceType;
@@ -152,13 +154,16 @@ public class MessageConsumerGenerator {
}
private void generateModelMethods(ClassOrInterfaceDeclaration template) {
- //generate setter call on eventToModel method
- template.findAll(MethodCallExpr.class)
- .forEach(t -> {
- String name = (String)
trigger.getNode().getMetaData().get(Metadata.MAPPING_VARIABLE);
- name = Optional.ofNullable(name).orElseGet(() ->
trigger.getModelRef());
-
t.setName(t.getNameAsString().replace("$SetModelMethodName$", "set" +
StringUtils.ucFirst(name)));
- });
+ String mappedVariable = (String)
trigger.getNode().getMetaData().get(Metadata.MAPPING_VARIABLE);
+ mappedVariable = Optional.ofNullable(mappedVariable).orElseGet(() ->
trigger.getModelRef());
+ if (mappedVariable == null) {
+ template.findAll(MethodDeclaration.class, m ->
m.getName().getIdentifier().equals("eventToModel"))
+ .forEach(m -> m.getBody().ifPresent(body ->
body.findAll(IfStmt.class).forEach(Node::remove)));
+ } else {
+ String setModelMethodName = "set" +
StringUtils.ucFirst(mappedVariable);
+ template.findAll(MethodCallExpr.class)
+ .forEach(t ->
t.setName(t.getNameAsString().replace("$SetModelMethodName$",
setModelMethodName)));
+ }
if (!(trigger.getNode() instanceof StartNode)) {
template.findAll(MethodDeclaration.class, m ->
m.getName().getIdentifier().equals("getModelConverter")).stream().findFirst().ifPresent(template::remove);
@@ -201,8 +206,8 @@ public class MessageConsumerGenerator {
private void interpolateStrings(MethodCallExpr vv) {
String s = vv.getNameAsString();
- String interpolated =
- s.replace("$DataType$",
StringUtils.ucFirst(trigger.getModelRef()));
- vv.setName(interpolated);
+ if (s.contains("$DataType$")) {
+ vv.setName(s.replace("$DataType$",
StringUtils.ucFirst(trigger.getModelRef())));
+ }
}
}
diff --git
a/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/process/events/CodegenMessageStartEventTest.java
b/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/process/events/CodegenMessageStartEventTest.java
index b3de66d44b3..c56106c35d8 100644
---
a/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/process/events/CodegenMessageStartEventTest.java
+++
b/kogito-codegen-modules/kogito-codegen-processes/src/test/java/org/kie/kogito/codegen/process/events/CodegenMessageStartEventTest.java
@@ -37,6 +37,9 @@ import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
+import com.github.javaparser.ast.expr.MethodCallExpr;
+import com.github.javaparser.ast.expr.NullLiteralExpr;
+import com.github.javaparser.ast.expr.ObjectCreationExpr;
import static java.util.Collections.emptyList;
import static java.util.Collections.singleton;
@@ -52,6 +55,12 @@ public class CodegenMessageStartEventTest {
private static final Path MESSAGE_END_EVENT_SOURCE_FULL_SOURCE =
BASE_PATH.resolve(MESSAGE_END_EVENT_SOURCE);
private static final String MESSAGE_START_END_EVENT_SOURCE =
"messagestartevent/MessageStartAndEndEvent.bpmn2";
private static final Path MESSAGE_START_END_EVENT_SOURCE_FULL_SOURCE =
BASE_PATH.resolve(MESSAGE_START_END_EVENT_SOURCE);
+ private static final String MESSAGE_START_EVENT_NO_MAPPING_SOURCE =
"messagestartevent/MessageStartEventNoMapping.bpmn2";
+ private static final Path MESSAGE_START_EVENT_NO_MAPPING_FULL_SOURCE =
BASE_PATH.resolve(MESSAGE_START_EVENT_NO_MAPPING_SOURCE);
+ private static final String MESSAGE_START_EVENT_EMPTY_STRUCTURE_REF_SOURCE
= "messagestartevent/MessageStartEventEmptyStructureRef.bpmn2";
+ private static final Path
MESSAGE_START_EVENT_EMPTY_STRUCTURE_REF_FULL_SOURCE =
BASE_PATH.resolve(MESSAGE_START_EVENT_EMPTY_STRUCTURE_REF_SOURCE);
+ private static final String MESSAGE_END_EVENT_NO_MAPPING_SOURCE =
"messagestartevent/MessageEndEventNoMapping.bpmn2";
+ private static final Path MESSAGE_END_EVENT_NO_MAPPING_FULL_SOURCE =
BASE_PATH.resolve(MESSAGE_END_EVENT_NO_MAPPING_SOURCE);
@ParameterizedTest
@MethodSource("org.kie.kogito.codegen.api.utils.KogitoContextTestUtils#restContextBuilders")
@@ -85,6 +94,128 @@ public class CodegenMessageStartEventTest {
}
+ @ParameterizedTest
+
@MethodSource("org.kie.kogito.codegen.api.utils.KogitoContextTestUtils#restContextBuilders")
+ public void testMessageStartEventWithoutItemRef(KogitoBuildContext.Builder
contextBuilder) {
+ contextBuilder
+
.withClassAvailabilityResolver(mockClassAvailabilityResolver(singleton(KogitoCodeGenConstants.QUARKUS_TRANSACTION_MANAGER_CLASS),
emptyList()));
+ KogitoBuildContext context = contextBuilder.build();
+ ProcessCodegen codeGenerator = ProcessCodegen.ofCollectedResources(
+ context,
+ CollectedResourceProducer.fromFiles(BASE_PATH,
MESSAGE_START_EVENT_NO_MAPPING_FULL_SOURCE.toFile()));
+
+ Collection<GeneratedFile> generatedFiles = codeGenerator.generate();
+ assertThat(generatedFiles).isNotEmpty();
+
+ List<GeneratedFile> processes = generatedFiles.stream()
+ .filter(generatedFile ->
generatedFile.relativePath().endsWith("org/kie/kogito/test/MessageStartEventNoMappingProcess.java"))
+ .collect(Collectors.toList());
+ assertThat(processes).hasSize(1);
+
+ CompilationUnit parsedProcess = StaticJavaParser.parse(new
String(processes.get(0).contents()));
+
+ List<MethodCallExpr> correlationMessages =
parsedProcess.findAll(MethodCallExpr.class,
+ methodCall ->
"newCorrelationMessage".equals(methodCall.getNameAsString()));
+ assertThat(correlationMessages)
+ .withFailMessage("A message without itemRef must still be
registered as a correlation message")
+ .hasSize(1);
+
assertThat(correlationMessages.get(0).getArgument(2).asStringLiteralExpr().getValue())
+ .withFailMessage("A message without itemRef carries no data,
so its type must default to java.lang.Object")
+ .isEqualTo("java.lang.Object");
+ }
+
+ @ParameterizedTest
+
@MethodSource("org.kie.kogito.codegen.api.utils.KogitoContextTestUtils#restContextBuilders")
+ public void
testMessageStartEventWithEmptyStructureRef(KogitoBuildContext.Builder
contextBuilder) {
+ contextBuilder
+
.withClassAvailabilityResolver(mockClassAvailabilityResolver(singleton(KogitoCodeGenConstants.QUARKUS_TRANSACTION_MANAGER_CLASS),
emptyList()));
+ KogitoBuildContext context = contextBuilder.build();
+ ProcessCodegen codeGenerator = ProcessCodegen.ofCollectedResources(
+ context,
+ CollectedResourceProducer.fromFiles(BASE_PATH,
MESSAGE_START_EVENT_EMPTY_STRUCTURE_REF_FULL_SOURCE.toFile()));
+
+ Collection<GeneratedFile> generatedFiles = codeGenerator.generate();
+ assertThat(generatedFiles).isNotEmpty();
+
+ List<GeneratedFile> processes = generatedFiles.stream()
+ .filter(generatedFile ->
generatedFile.relativePath().endsWith("org/kie/kogito/test/MessageStartEventEmptyStructureRefProcess.java"))
+ .collect(Collectors.toList());
+ assertThat(processes).hasSize(1);
+
+ CompilationUnit parsedProcess = StaticJavaParser.parse(new
String(processes.get(0).contents()));
+
+ List<MethodCallExpr> correlationMessages =
parsedProcess.findAll(MethodCallExpr.class,
+ methodCall ->
"newCorrelationMessage".equals(methodCall.getNameAsString()));
+ assertThat(correlationMessages)
+ .withFailMessage("A message pointing to an itemDefinition with
an empty structureRef must still be registered as a correlation message")
+ .hasSize(1);
+
assertThat(correlationMessages.get(0).getArgument(2).asStringLiteralExpr().getValue())
+ .withFailMessage("An empty structureRef carries no data, so
the message type must default to java.lang.Object")
+ .isEqualTo("java.lang.Object");
+ }
+
+ @ParameterizedTest
+
@MethodSource("org.kie.kogito.codegen.api.utils.KogitoContextTestUtils#restContextBuilders")
+ public void
testMessageEndEventWithoutDataMapping(KogitoBuildContext.Builder
contextBuilder) {
+ contextBuilder
+
.withClassAvailabilityResolver(mockClassAvailabilityResolver(singleton(KogitoCodeGenConstants.QUARKUS_TRANSACTION_MANAGER_CLASS),
emptyList()));
+ KogitoBuildContext context = contextBuilder.build();
+ ProcessCodegen codeGenerator = ProcessCodegen.ofCollectedResources(
+ context,
+ CollectedResourceProducer.fromFiles(BASE_PATH,
MESSAGE_END_EVENT_NO_MAPPING_FULL_SOURCE.toFile()));
+
+ Collection<GeneratedFile> generatedFiles = codeGenerator.generate();
+ assertThat(generatedFiles).isNotEmpty();
+
+ List<GeneratedFile> processes = generatedFiles.stream()
+ .filter(generatedFile ->
generatedFile.relativePath().endsWith("org/kie/kogito/test/MessageEndEventNoMappingProcess.java"))
+ .collect(Collectors.toList());
+ assertThat(processes).hasSize(1);
+
+ CompilationUnit parsedProcess = StaticJavaParser.parse(new
String(processes.get(0).contents()));
+
+ List<ObjectCreationExpr> producerActions =
parsedProcess.findAll(ObjectCreationExpr.class,
+ objectCreation ->
objectCreation.getType().getNameAsString().equals("ProduceEventAction"));
+ assertThat(producerActions).hasSize(1);
+ assertThat(producerActions.get(0).getArgument(1))
+ .withFailMessage("A message end event without data mapping has
no variable to send, so no variable name must be passed")
+ .isInstanceOf(NullLiteralExpr.class);
+ }
+
+ @ParameterizedTest
+
@MethodSource("org.kie.kogito.codegen.api.utils.KogitoContextTestUtils#contextBuilders")
+ public void
testMessageConsumerForMessageStartEventWithoutDataMapping(KogitoBuildContext.Builder
contextBuilder) {
+ Properties properties = new Properties();
+
properties.put("kogito.addon.cloudevents.kafka.kogito_outgoing_stream",
"test-out");
+
properties.put("kogito.addon.cloudevents.kafka.kogito_incoming_stream",
"test-in");
+ contextBuilder.withApplicationProperties(properties);
+
+ KogitoBuildContext context = contextBuilder.build();
+ ProcessCodegen codeGenerator = ProcessCodegen.ofCollectedResources(
+ context,
+ CollectedResourceProducer.fromFiles(BASE_PATH,
MESSAGE_START_EVENT_NO_MAPPING_FULL_SOURCE.toFile()));
+
+ Collection<GeneratedFile> generatedFiles = codeGenerator.generate();
+ assertThat(generatedFiles).isNotEmpty();
+
+ List<GeneratedFile> consumers = generatedFiles.stream()
+ .filter(generatedFile ->
generatedFile.relativePath().endsWith("org/kie/kogito/test/MessageStartEventNoMappingMessageConsumer_StartEvent_1.java"))
+ .collect(Collectors.toList());
+ assertThat(consumers).hasSize(1);
+
+ CompilationUnit parsedConsumer = StaticJavaParser.parse(new
String(consumers.get(0).contents()));
+
+ assertThat(parsedConsumer.findAll(MethodCallExpr.class, mc ->
mc.getNameAsString().contains("$SetModelMethodName$")))
+ .withFailMessage("A message without data mapping has no
variable to set on the model")
+ .isEmpty();
+
+ if (context.hasDI()) {
+ assertThat(parsedConsumer.findFirst(MethodDeclaration.class, md ->
"getModelConverter".equals(md.getNameAsString())))
+ .withFailMessage("The model converter must be kept,
otherwise the message would not start the process")
+ .isPresent();
+ }
+ }
+
@ParameterizedTest
@MethodSource("org.kie.kogito.codegen.api.utils.KogitoContextTestUtils#restContextBuilders")
public void testRESTApiForMessageEndEvent(KogitoBuildContext.Builder
contextBuilder) {
diff --git
a/kogito-codegen-modules/kogito-codegen-processes/src/test/resources/messagestartevent/MessageEndEventNoMapping.bpmn2
b/kogito-codegen-modules/kogito-codegen-processes/src/test/resources/messagestartevent/MessageEndEventNoMapping.bpmn2
new file mode 100644
index 00000000000..9d74af836ae
--- /dev/null
+++
b/kogito-codegen-modules/kogito-codegen-processes/src/test/resources/messagestartevent/MessageEndEventNoMapping.bpmn2
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
xmlns:tns="http://www.jboss.org/drools" id="Definition"
exporter="org.eclipse.bpmn2.modeler.core"
exporterVersion="1.5.0.Final-v20180515-1642-B1"
expressionLanguage="http://www.mvel.org/2.0" targetNamespac [...]
+ <bpmn2:message id="Message_1" name="processedcustomers"/>
+ <bpmn2:process id="MessageEndEventNoMapping"
tns:packageName="org.kie.kogito.test" name="MessageEndEventNoMapping"
isExecutable="true" processType="Public">
+ <bpmn2:startEvent id="StartEvent_1" name="StartProcess">
+ <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
+ </bpmn2:startEvent>
+ <bpmn2:sequenceFlow id="SequenceFlow_1" tns:priority="1"
sourceRef="StartEvent_1" targetRef="EndEvent_1"/>
+ <bpmn2:endEvent id="EndEvent_1" name="SendMessage">
+ <bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
+ <bpmn2:messageEventDefinition id="MessageEventDefinition_1"
messageRef="Message_1"/>
+ </bpmn2:endEvent>
+ </bpmn2:process>
+ <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+ <bpmndi:BPMNPlane id="BPMNPlane_Process_1"
bpmnElement="MessageEndEventNoMapping">
+ <bpmndi:BPMNShape id="BPMNShape_StartEvent_1" bpmnElement="StartEvent_1">
+ <dc:Bounds height="36.0" width="36.0" x="120.0" y="100.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="BPMNShape_EndEvent_1" bpmnElement="EndEvent_1">
+ <dc:Bounds height="36.0" width="36.0" x="300.0" y="100.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_1"
bpmnElement="SequenceFlow_1" sourceElement="BPMNShape_StartEvent_1"
targetElement="BPMNShape_EndEvent_1">
+ <di:waypoint xsi:type="dc:Point" x="156.0" y="118.0"/>
+ <di:waypoint xsi:type="dc:Point" x="300.0" y="118.0"/>
+ </bpmndi:BPMNEdge>
+ </bpmndi:BPMNPlane>
+ </bpmndi:BPMNDiagram>
+</bpmn2:definitions>
diff --git
a/kogito-codegen-modules/kogito-codegen-processes/src/test/resources/messagestartevent/MessageStartEventEmptyStructureRef.bpmn2
b/kogito-codegen-modules/kogito-codegen-processes/src/test/resources/messagestartevent/MessageStartEventEmptyStructureRef.bpmn2
new file mode 100644
index 00000000000..241ec7251f3
--- /dev/null
+++
b/kogito-codegen-modules/kogito-codegen-processes/src/test/resources/messagestartevent/MessageStartEventEmptyStructureRef.bpmn2
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+<bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:bpsim="http://www.bpsim.org/schemas/1.0"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
xmlns:drools="http://www.jboss.org/drools" xmlns:xsi="xsi"
id="_1LzeAD1AED-4ytPGpMdr_Q"
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd
http://www.jboss.org/drools drools.xsd http://www [...]
+ <bpmn2:itemDefinition id="HelloMessageType" structureRef=""/>
+ <bpmn2:itemDefinition id="_0CCC1AF7-773D-47B9-B84F-2E766A1A422B"
structureRef=""/>
+ <bpmn2:itemDefinition id="_82170791-2215-4C50-82FF-E10D4F4A6765"
structureRef=""/>
+ <bpmn2:message id="_1L0FED1AED-4ytPGpMdr_Q" itemRef="HelloMessageType"
name="HelloMessage"/>
+ <bpmn2:collaboration id="_14C40EAD-55BF-480D-A048-E916353DE4D4"
name="Default Collaboration">
+ <bpmn2:participant id="_66D20077-8CC7-4712-9011-6F9076BE243D" name="Pool
Participant" processRef="MessageStartEventEmptyStructureRef"/>
+ </bpmn2:collaboration>
+ <bpmn2:process id="MessageStartEventEmptyStructureRef"
drools:packageName="org.kie.kogito.test" drools:version="1.0"
drools:adHoc="false" name="MessageStartEventEmptyStructureRef"
isExecutable="true" processType="Public">
+ <bpmn2:sequenceFlow id="_EE47D218-4FAF-4EE6-8007-80097CEEB65D"
sourceRef="_C7D5472F-DE97-46E7-9003-778E2CD89C29"
targetRef="_04380D05-0FD1-4F44-AFD8-3B3CB39EEBFD"/>
+ <bpmn2:sequenceFlow id="_026AC3E5-EA00-426C-ACD6-8BCAAC8B09D5"
sourceRef="_B5F5824A-61E9-4E75-9289-4A14CE2C0E23"
targetRef="_C7D5472F-DE97-46E7-9003-778E2CD89C29">
+ <bpmn2:extensionElements>
+ <drools:metaData name="isAutoConnection.target">
+ <drools:metaValue><![CDATA[true]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ </bpmn2:sequenceFlow>
+ <bpmn2:endEvent id="_04380D05-0FD1-4F44-AFD8-3B3CB39EEBFD">
+ <bpmn2:incoming>_EE47D218-4FAF-4EE6-8007-80097CEEB65D</bpmn2:incoming>
+ </bpmn2:endEvent>
+ <bpmn2:scriptTask id="_C7D5472F-DE97-46E7-9003-778E2CD89C29" name="Script
task" scriptFormat="http://www.java.com/java">
+ <bpmn2:extensionElements>
+ <drools:metaData name="elementname">
+ <drools:metaValue><![CDATA[Script task]]></drools:metaValue>
+ </drools:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:incoming>_026AC3E5-EA00-426C-ACD6-8BCAAC8B09D5</bpmn2:incoming>
+ <bpmn2:outgoing>_EE47D218-4FAF-4EE6-8007-80097CEEB65D</bpmn2:outgoing>
+ <bpmn2:script>System.out.println("Received event NO data
mapping");</bpmn2:script>
+ </bpmn2:scriptTask>
+ <bpmn2:startEvent id="_B5F5824A-61E9-4E75-9289-4A14CE2C0E23">
+ <bpmn2:outgoing>_026AC3E5-EA00-426C-ACD6-8BCAAC8B09D5</bpmn2:outgoing>
+ <bpmn2:messageEventDefinition drools:msgref="HelloMessage"
messageRef="_1L0FED1AED-4ytPGpMdr_Q"/>
+ </bpmn2:startEvent>
+ </bpmn2:process>
+ <bpmndi:BPMNDiagram>
+ <bpmndi:BPMNPlane bpmnElement="MessageStartEventEmptyStructureRef">
+ <bpmndi:BPMNShape id="shape__B5F5824A-61E9-4E75-9289-4A14CE2C0E23"
bpmnElement="_B5F5824A-61E9-4E75-9289-4A14CE2C0E23">
+ <dc:Bounds height="56" width="56" x="411" y="221"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__C7D5472F-DE97-46E7-9003-778E2CD89C29"
bpmnElement="_C7D5472F-DE97-46E7-9003-778E2CD89C29">
+ <dc:Bounds height="102" width="154" x="571" y="198"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="shape__04380D05-0FD1-4F44-AFD8-3B3CB39EEBFD"
bpmnElement="_04380D05-0FD1-4F44-AFD8-3B3CB39EEBFD">
+ <dc:Bounds height="56" width="56" x="829" y="221"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge
id="edge_shape__B5F5824A-61E9-4E75-9289-4A14CE2C0E23_to_shape__C7D5472F-DE97-46E7-9003-778E2CD89C29"
bpmnElement="_026AC3E5-EA00-426C-ACD6-8BCAAC8B09D5">
+ <di:waypoint x="439" y="249"/>
+ <di:waypoint x="571" y="249"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge
id="edge_shape__C7D5472F-DE97-46E7-9003-778E2CD89C29_to_shape__04380D05-0FD1-4F44-AFD8-3B3CB39EEBFD"
bpmnElement="_EE47D218-4FAF-4EE6-8007-80097CEEB65D">
+ <di:waypoint x="648" y="249"/>
+ <di:waypoint x="829" y="249"/>
+ </bpmndi:BPMNEdge>
+ </bpmndi:BPMNPlane>
+ </bpmndi:BPMNDiagram>
+ <bpmn2:relationship type="BPSimData">
+ <bpmn2:extensionElements>
+ <bpsim:BPSimData>
+ <bpsim:Scenario id="default" name="Simulationscenario">
+ <bpsim:ScenarioParameters/>
+ <bpsim:ElementParameters
elementRef="_C7D5472F-DE97-46E7-9003-778E2CD89C29">
+ <bpsim:TimeParameters>
+ <bpsim:ProcessingTime>
+ <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+ </bpsim:ProcessingTime>
+ </bpsim:TimeParameters>
+ <bpsim:ResourceParameters>
+ <bpsim:Availability>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Availability>
+ <bpsim:Quantity>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:Quantity>
+ </bpsim:ResourceParameters>
+ <bpsim:CostParameters>
+ <bpsim:UnitCost>
+ <bpsim:FloatingParameter value="0"/>
+ </bpsim:UnitCost>
+ </bpsim:CostParameters>
+ </bpsim:ElementParameters>
+ </bpsim:Scenario>
+ </bpsim:BPSimData>
+ </bpmn2:extensionElements>
+ <bpmn2:source>_1LzeAD1AED-4ytPGpMdr_Q</bpmn2:source>
+ <bpmn2:target>_1LzeAD1AED-4ytPGpMdr_Q</bpmn2:target>
+ </bpmn2:relationship>
+</bpmn2:definitions>
diff --git
a/kogito-codegen-modules/kogito-codegen-processes/src/test/resources/messagestartevent/MessageStartEventNoMapping.bpmn2
b/kogito-codegen-modules/kogito-codegen-processes/src/test/resources/messagestartevent/MessageStartEventNoMapping.bpmn2
new file mode 100644
index 00000000000..aef837cee83
--- /dev/null
+++
b/kogito-codegen-modules/kogito-codegen-processes/src/test/resources/messagestartevent/MessageStartEventNoMapping.bpmn2
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
xmlns:java="http://www.java.com/javaTypes"
xmlns:tns="http://www.jboss.org/drools" xmlns="http://www.jboss.org/drools"
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd
http://www. [...]
+ <bpmn2:message id="Message_1" name="customers"/>
+ <bpmn2:process id="MessageStartEventNoMapping"
tns:packageName="org.kie.kogito.test" name="MessageStartEventNoMapping"
isExecutable="true" processType="Public">
+ <bpmn2:startEvent id="StartEvent_1" name="StartProcess">
+ <bpmn2:extensionElements>
+ <tns:metaData name="elementname">
+ <tns:metaValue><![CDATA[StartProcess]]></tns:metaValue>
+ </tns:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:outgoing>SequenceFlow_2</bpmn2:outgoing>
+ <bpmn2:messageEventDefinition id="MessageEventDefinition_1"
messageRef="Message_1"/>
+ </bpmn2:startEvent>
+ <bpmn2:scriptTask id="ScriptTask_1" name="Script Task 1"
scriptFormat="http://www.java.com/java">
+ <bpmn2:extensionElements>
+ <tns:metaData name="elementname">
+ <tns:metaValue><![CDATA[Script Task 1]]></tns:metaValue>
+ </tns:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
+ <bpmn2:outgoing>SequenceFlow_3</bpmn2:outgoing>
+ <bpmn2:script>System.out.println("Message
received");</bpmn2:script>
+ </bpmn2:scriptTask>
+ <bpmn2:sequenceFlow id="SequenceFlow_2" tns:priority="1"
sourceRef="StartEvent_1" targetRef="ScriptTask_1"/>
+ <bpmn2:endEvent id="EndEvent_1" name="End Event 1">
+ <bpmn2:extensionElements>
+ <tns:metaData name="elementname">
+ <tns:metaValue><![CDATA[End Event 1]]></tns:metaValue>
+ </tns:metaData>
+ </bpmn2:extensionElements>
+ <bpmn2:incoming>SequenceFlow_3</bpmn2:incoming>
+ </bpmn2:endEvent>
+ <bpmn2:sequenceFlow id="SequenceFlow_3" tns:priority="1"
sourceRef="ScriptTask_1" targetRef="EndEvent_1"/>
+ </bpmn2:process>
+ <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+ <bpmndi:BPMNPlane id="BPMNPlane_Process_1"
bpmnElement="MessageStartEventNoMapping">
+ <bpmndi:BPMNShape id="BPMNShape_StartEvent_1" bpmnElement="StartEvent_1">
+ <dc:Bounds height="36.0" width="36.0" x="120.0" y="100.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="BPMNShape_ScriptTask_1" bpmnElement="ScriptTask_1"
isExpanded="true">
+ <dc:Bounds height="50.0" width="110.0" x="261.0" y="93.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="BPMNShape_EndEvent_1" bpmnElement="EndEvent_1">
+ <dc:Bounds height="36.0" width="36.0" x="439.0" y="100.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_2"
bpmnElement="SequenceFlow_2" sourceElement="BPMNShape_StartEvent_1"
targetElement="BPMNShape_ScriptTask_1">
+ <di:waypoint xsi:type="dc:Point" x="156.0" y="118.0"/>
+ <di:waypoint xsi:type="dc:Point" x="261.0" y="118.0"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_3"
bpmnElement="SequenceFlow_3" sourceElement="BPMNShape_ScriptTask_1"
targetElement="BPMNShape_EndEvent_1">
+ <di:waypoint xsi:type="dc:Point" x="371.0" y="118.0"/>
+ <di:waypoint xsi:type="dc:Point" x="439.0" y="118.0"/>
+ </bpmndi:BPMNEdge>
+ </bpmndi:BPMNPlane>
+ </bpmndi:BPMNDiagram>
+</bpmn2:definitions>
diff --git
a/kogito-jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/MessageHandler.java
b/kogito-jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/MessageHandler.java
index 005fc4f3475..1326a055ac6 100755
---
a/kogito-jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/MessageHandler.java
+++
b/kogito-jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/MessageHandler.java
@@ -68,13 +68,20 @@ public class MessageHandler extends BaseAbstractHandler
implements Handler {
name = id;
}
- Map<String, ItemDefinition> itemDefinitions = (Map<String,
ItemDefinition>) ((ProcessBuildData)
parser.getData()).getMetaData("ItemDefinitions");
- if (itemDefinitions == null) {
- throw new ProcessParsingValidationException("No item definitions
found");
+ String type = null;
+ if (itemRef != null && !itemRef.trim().isEmpty()) {
+ Map<String, ItemDefinition> itemDefinitions = (Map<String,
ItemDefinition>) ((ProcessBuildData)
parser.getData()).getMetaData("ItemDefinitions");
+ if (itemDefinitions == null) {
+ throw new ProcessParsingValidationException("No item
definitions found");
+ }
+ ItemDefinition itemDefinition = itemDefinitions.get(itemRef);
+ if (itemDefinition == null) {
+ throw new ProcessParsingValidationException("Could not find
itemDefinition " + itemRef);
+ }
+ type = itemDefinition.getStructureRef();
}
- ItemDefinition itemDefinition = itemDefinitions.get(itemRef);
- if (itemDefinition == null) {
- throw new ProcessParsingValidationException("Could not find
itemDefinition " + itemRef);
+ if (type != null && type.trim().isEmpty()) {
+ type = null;
}
ProcessBuildData buildData = (ProcessBuildData) parser.getData();
@@ -84,12 +91,9 @@ public class MessageHandler extends BaseAbstractHandler
implements Handler {
buildData.setMetaData("Messages", messages);
}
Message message = new Message(id);
- message.setType(itemDefinition.getStructureRef());
+ message.setType(type);
message.setName(name);
-
- if (message.getType() != null && !message.getType().isEmpty()) {
- messages.put(id, message);
- }
+ messages.put(id, message);
return message;
}
diff --git
a/kogito-jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/ProcessHandler.java
b/kogito-jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/ProcessHandler.java
index 1dd36b21ddf..2dde278f76a 100755
---
a/kogito-jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/ProcessHandler.java
+++
b/kogito-jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/ProcessHandler.java
@@ -231,7 +231,11 @@ public class ProcessHandler extends BaseAbstractHandler
implements Handler {
// now we wire correlation process subscriptions
CorrelationManager correlationManager =
process.getCorrelationManager();
for (Message message : HandlerUtil.messages(parser).values()) {
- correlationManager.newMessage(message.getId(), message.getName(),
message.getType());
+ String messageType = message.getType();
+ if (messageType == null || messageType.trim().isEmpty()) {
+ messageType = "java.lang.Object";
+ }
+ correlationManager.newMessage(message.getId(), message.getName(),
messageType);
}
// only the ones this process is member of
diff --git
a/kogito-jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/ServiceTaskHandler.java
b/kogito-jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/ServiceTaskHandler.java
index cfdeb6163d3..0802ada1d6a 100755
---
a/kogito-jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/ServiceTaskHandler.java
+++
b/kogito-jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/ServiceTaskHandler.java
@@ -76,7 +76,8 @@ public class ServiceTaskHandler extends TaskHandler {
if (workItemNode.getWork().getParameter("Operation") == null) {
workItemNode.getWork().setParameter("Operation",
operation.getName());
}
- if (workItemNode.getWork().getParameter("ParameterType") == null
&& operation.getMessage() != null) {
+ if (workItemNode.getWork().getParameter("ParameterType") == null
&& operation.getMessage() != null
+ && operation.getMessage().getType() != null &&
!operation.getMessage().getType().trim().isEmpty()) {
workItemNode.getWork().setParameter("ParameterType",
operation.getMessage().getType());
}
// parameters to support web service invocation
diff --git
a/kogito-jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/AbstractNodeVisitor.java
b/kogito-jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/AbstractNodeVisitor.java
index d54eafedc3a..c8375ec35f7 100644
---
a/kogito-jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/AbstractNodeVisitor.java
+++
b/kogito-jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/AbstractNodeVisitor.java
@@ -475,9 +475,10 @@ public abstract class AbstractNodeVisitor<T extends Node>
extends AbstractVisito
public static ObjectCreationExpr buildProducerAction(ClassOrInterfaceType
actionClass, TriggerMetaData trigger, ProcessMetaData metadata) {
metadata.addTrigger(trigger);
+ Expression modelRef = trigger.getModelRef() != null ? new
StringLiteralExpr(trigger.getModelRef()) : new NullLiteralExpr();
return new ObjectCreationExpr(null, actionClass, NodeList.nodeList(
new StringLiteralExpr(trigger.getName()),
- new StringLiteralExpr(trigger.getModelRef()),
+ modelRef,
new LambdaExpr(NodeList.nodeList(),
new NameExpr("producer_" + trigger.getOwnerId()))));
}
diff --git
a/kogito-jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/TriggerMetaData.java
b/kogito-jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/TriggerMetaData.java
index 7a195d1b037..a45bfaa2527 100644
---
a/kogito-jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/TriggerMetaData.java
+++
b/kogito-jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/TriggerMetaData.java
@@ -70,12 +70,17 @@ public class TriggerMetaData {
public static TriggerMetaData of(Node node, String mappingVariable) {
Map<String, Object> nodeMetaData = node.getMetaData();
String channelName = (String) nodeMetaData.getOrDefault(CHANNEL_NAME,
(String) nodeMetaData.get(TRIGGER_REF));
+ TriggerType triggerType = TriggerType.valueOf((String)
nodeMetaData.get(TRIGGER_TYPE));
+ String dataType = (String) nodeMetaData.get(MESSAGE_TYPE);
+ if ((TriggerType.ConsumeMessage.equals(triggerType) ||
TriggerType.ProduceMessage.equals(triggerType)) &&
StringUtils.isEmpty(dataType)) {
+ dataType = "java.lang.Object";
+ }
return new TriggerMetaData(
node,
(String) nodeMetaData.get(TRIGGER_REF),
channelName,
- TriggerType.valueOf((String) nodeMetaData.get(TRIGGER_TYPE)),
- (String) nodeMetaData.get(MESSAGE_TYPE),
+ triggerType,
+ dataType,
mappingVariable,
getOwnerId(node),
(Boolean) nodeMetaData.get(DATA_ONLY),
diff --git
a/kogito-jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/start/BPMN2-MessageStartNoMapping.bpmn2
b/kogito-jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/start/BPMN2-MessageStartNoMapping.bpmn2
new file mode 100644
index 00000000000..3ec8ffc200c
--- /dev/null
+++
b/kogito-jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/start/BPMN2-MessageStartNoMapping.bpmn2
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL
BPMN20.xsd"
+ xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
+ xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
+ xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
+ xmlns:tns="http://www.jboss.org/drools">
+
+ <itemDefinition id="HelloMessageType" structureRef="" />
+ <message id="HelloMessage" itemRef="HelloMessageType" />
+
+ <process processType="Private" isExecutable="true"
id="MessageStartNoMapping" name="Message Start No Mapping"
tns:packageName="org.jbpm.bpmn2.start" >
+
+ <!-- nodes -->
+ <startEvent id="_1" name="StartProcess" >
+ <messageEventDefinition messageRef="HelloMessage"/>
+ </startEvent>
+ <scriptTask id="_2" name="Hello" >
+ <script>System.out.println("Message received without data
mapping");</script>
+ </scriptTask>
+ <endEvent id="_3" name="EndProcess" >
+ <terminateEventDefinition/>
+ </endEvent>
+
+ <!-- connections -->
+ <sequenceFlow id="_1-_2" sourceRef="_1" targetRef="_2" />
+ <sequenceFlow id="_2-_3" sourceRef="_2" targetRef="_3" />
+
+ </process>
+
+ <bpmndi:BPMNDiagram>
+ <bpmndi:BPMNPlane bpmnElement="MessageStartNoMapping" >
+ <bpmndi:BPMNShape bpmnElement="_1" >
+ <dc:Bounds x="16" y="16" width="48" height="48" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape bpmnElement="_2" >
+ <dc:Bounds x="96" y="16" width="80" height="48" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape bpmnElement="_3" >
+ <dc:Bounds x="208" y="16" width="48" height="48" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge bpmnElement="_1-_2" >
+ <di:waypoint x="40" y="40" />
+ <di:waypoint x="136" y="40" />
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge bpmnElement="_2-_3" >
+ <di:waypoint x="136" y="40" />
+ <di:waypoint x="232" y="40" />
+ </bpmndi:BPMNEdge>
+ </bpmndi:BPMNPlane>
+ </bpmndi:BPMNDiagram>
+
+</definitions>
diff --git
a/kogito-jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StartEventTest.java
b/kogito-jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StartEventTest.java
index c267948e528..e7da5c38024 100755
--- a/kogito-jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StartEventTest.java
+++ b/kogito-jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StartEventTest.java
@@ -308,6 +308,22 @@ public class StartEventTest extends JbpmBpmn2TestCase {
assertThat(startedProcesses).hasSize(1);
}
+ @Test
+ public void testMessageStartWithoutDataMapping() throws Exception {
+ Application app = ProcessTestHelper.newApplication();
+ final List<ProcessInstance> startedProcesses = new ArrayList<>();
+ ProcessTestHelper.registerProcessEventListener(app, new
DefaultKogitoProcessEventListener() {
+ @Override
+ public void beforeProcessStarted(ProcessStartedEvent event) {
+ startedProcesses.add(event.getProcessInstance());
+ }
+ });
+ org.kie.kogito.process.Process<MessageStartNoMappingModel> definition
= MessageStartNoMappingProcess.newProcess(app);
+ definition.send(SignalFactory.of("HelloMessage"));
+ assertThat(startedProcesses).hasSize(1);
+
assertThat(startedProcesses).extracting(ProcessInstance::getProcessId).containsExactly("MessageStartNoMapping");
+ }
+
@Test
public void testMultipleStartEventsRegularStart() throws Exception {
kruntime =
createKogitoProcessRuntime("org/jbpm/bpmn2/start/BPMN2-MultipleStartEventProcessLongInterval.bpmn2");
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]