Skip to content

Commit d0989be

Browse files
authored
Allow to specify in and out parameters for external worker tasks (#3960)
* add first draft for external workers with input variables * add external worker output variables for BPMN * cleanup XML for external worker io parameters * remove check for explicit io parameters from output parameters * change variable resolving to job acquisition * add tests for expressions and no input params * add in/out parameters for CMMN external worker task * remove not required variable deletion for external worker * remove not needed VariableService method * remove unused imports * move output mapping to ExternalWorkerJobCompleteCmd * rename noInputParameter to doNotIncludeVariables * fix BPMN export for external worker tasks * fix CMMN external job variable resolving * fix review findings
1 parent c47582b commit d0989be

41 files changed

Lines changed: 1944 additions & 92 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

modules/flowable-bpmn-converter/src/main/java/org/flowable/bpmn/constants/BpmnXMLConstants.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,9 @@ public interface BpmnXMLConstants {
217217
public static final String ATTRIBUTE_TASK_SERVICE_STORE_RESULT_AS_TRANSIENT = "storeResultVariableAsTransient";
218218

219219
public static final String ATTRIBUTE_TASK_EXTERNAL_WORKER_TOPIC = "topic";
220+
public static final String ATTRIBUTE_TASK_EXTERNAL_WORKER_DO_NOT_INCLUDE_VARIABLES = "doNotIncludeVariables";
221+
public static final String ELEMENT_EXTERNAL_WORKER_IN_PARAMETER = "externalWorkerInParameter";
222+
public static final String ELEMENT_EXTERNAL_WORKER_OUT_PARAMETER = "externalWorkerOutParameter";
220223

221224
public static final String ATTRIBUTE_TASK_HTTP_PARALLEL_IN_SAME_TRANSACTION = "parallelInSameTransaction";
222225

modules/flowable-bpmn-converter/src/main/java/org/flowable/bpmn/converter/ServiceTaskXMLConverter.java

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import org.flowable.bpmn.converter.child.BaseChildElementParser;
2626
import org.flowable.bpmn.converter.child.EventInParameterParser;
2727
import org.flowable.bpmn.converter.child.EventOutParameterParser;
28+
import org.flowable.bpmn.converter.child.ExternalWorkerInParameterParser;
29+
import org.flowable.bpmn.converter.child.ExternalWorkerOutParameterParser;
2830
import org.flowable.bpmn.converter.child.InParameterParser;
2931
import org.flowable.bpmn.converter.child.OutParameterParser;
3032
import org.flowable.bpmn.converter.export.FieldExtensionExport;
@@ -51,7 +53,8 @@ public class ServiceTaskXMLConverter extends BaseBpmnXMLConverter {
5153

5254
protected Map<String, BaseChildElementParser> caseServiceChildParserMap = new HashMap<>();
5355
protected Map<String, BaseChildElementParser> sendEventServiceChildParserMap = new HashMap<>();
54-
56+
protected Map<String, BaseChildElementParser> externalWorkerTaskChildParserMap = new HashMap<>();
57+
5558
protected static final List<ExtensionAttribute> defaultServiceTaskAttributes = Arrays.asList(
5659
new ExtensionAttribute(ATTRIBUTE_TYPE),
5760
new ExtensionAttribute(ATTRIBUTE_TASK_SERVICE_CLASS),
@@ -89,6 +92,12 @@ public ServiceTaskXMLConverter() {
8992
sendEventServiceChildParserMap.put(eventInParameterParser.getElementName(), eventInParameterParser);
9093
EventOutParameterParser eventOutParameterParser = new EventOutParameterParser();
9194
sendEventServiceChildParserMap.put(eventOutParameterParser.getElementName(), eventOutParameterParser);
95+
96+
// External Worker
97+
ExternalWorkerInParameterParser externalWorkerInParameterParser = new ExternalWorkerInParameterParser();
98+
externalWorkerTaskChildParserMap.put(externalWorkerInParameterParser.getElementName(), externalWorkerInParameterParser);
99+
ExternalWorkerOutParameterParser externalWorkerOutParameterParser = new ExternalWorkerOutParameterParser();
100+
externalWorkerTaskChildParserMap.put(externalWorkerOutParameterParser.getElementName(), externalWorkerOutParameterParser);
92101
}
93102

94103
@Override
@@ -248,6 +257,10 @@ protected void writeExternalTaskAdditionalAttributes(ExternalWorkerServiceTask e
248257
if (StringUtils.isNotEmpty(externalWorkerTask.getSkipExpression())) {
249258
writeQualifiedAttribute(ATTRIBUTE_TASK_SERVICE_SKIP_EXPRESSION, externalWorkerTask.getSkipExpression(), xtw);
250259
}
260+
261+
if (externalWorkerTask.isDoNotIncludeVariables()) {
262+
writeQualifiedAttribute(ATTRIBUTE_TASK_EXTERNAL_WORKER_DO_NOT_INCLUDE_VARIABLES, String.valueOf(externalWorkerTask.isDoNotIncludeVariables()), xtw);
263+
}
251264
}
252265

253266

@@ -303,7 +316,8 @@ protected boolean writeExtensionChildElements(BaseElement element, boolean didWr
303316

304317
} else if (element instanceof SendEventServiceTask) {
305318
return writeSendServiceExtensionChildElements(element, didWriteExtensionStartElement, xtw);
306-
319+
} else if (element instanceof ExternalWorkerServiceTask) {
320+
return writeExternalWorkerTaskExtensionChildElements(element, didWriteExtensionStartElement, xtw);
307321
} else {
308322
return writeServiceTaskExtensionChildElements((ServiceTask) element, didWriteExtensionStartElement, xtw);
309323
}
@@ -360,6 +374,14 @@ protected boolean writeSendServiceExtensionChildElements(BaseElement element, bo
360374
return didWriteExtensionStartElement;
361375
}
362376

377+
protected boolean writeExternalWorkerTaskExtensionChildElements(BaseElement element, boolean didWriteExtensionStartElement, XMLStreamWriter xtw) throws Exception {
378+
ExternalWorkerServiceTask externalWorkerTask = (ExternalWorkerServiceTask) element;
379+
didWriteExtensionStartElement = BpmnXMLUtil.writeIOParameters(ELEMENT_EXTERNAL_WORKER_IN_PARAMETER, externalWorkerTask.getInParameters(), didWriteExtensionStartElement, xtw);
380+
didWriteExtensionStartElement = BpmnXMLUtil.writeIOParameters(ELEMENT_EXTERNAL_WORKER_OUT_PARAMETER, externalWorkerTask.getOutParameters(), didWriteExtensionStartElement, xtw);
381+
382+
return didWriteExtensionStartElement;
383+
}
384+
363385
protected boolean writeCaseServiceTaskExtensionChildElements(BaseElement element, boolean didWriteExtensionStartElement, XMLStreamWriter xtw) throws Exception {
364386
CaseServiceTask caseServiceTask = (CaseServiceTask) element;
365387
didWriteExtensionStartElement = BpmnXMLUtil.writeIOParameters(ELEMENT_IN_PARAMETERS, caseServiceTask.getInParameters(), didWriteExtensionStartElement, xtw);
@@ -432,8 +454,11 @@ protected void convertSendEventServiceTaskXMLProperties(SendEventServiceTask sen
432454

433455
protected void convertExternalWorkerTaskXMLProperties(ExternalWorkerServiceTask externalWorkerServiceTask, BpmnModel bpmnModel, XMLStreamReader xtr) throws Exception {
434456
externalWorkerServiceTask.setTopic(BpmnXMLUtil.getAttributeValue(ATTRIBUTE_TASK_EXTERNAL_WORKER_TOPIC, xtr));
457+
externalWorkerServiceTask.setDoNotIncludeVariables(
458+
Boolean.parseBoolean(BpmnXMLUtil.getAttributeValue(ATTRIBUTE_TASK_EXTERNAL_WORKER_DO_NOT_INCLUDE_VARIABLES, xtr))
459+
);
435460

436-
parseChildElements(getXMLElementName(), externalWorkerServiceTask, bpmnModel, xtr);
461+
parseChildElements(getXMLElementName(), externalWorkerServiceTask, externalWorkerTaskChildParserMap, bpmnModel, xtr);
437462
}
438463

439464
protected void convertHttpServiceTaskXMLProperties(HttpServiceTask httpServiceTask, BpmnModel bpmnModel, XMLStreamReader xtr) throws Exception {
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/* Licensed under the Apache License, Version 2.0 (the "License");
2+
* you may not use this file except in compliance with the License.
3+
* You may obtain a copy of the License at
4+
*
5+
* http://www.apache.org/licenses/LICENSE-2.0
6+
*
7+
* Unless required by applicable law or agreed to in writing, software
8+
* distributed under the License is distributed on an "AS IS" BASIS,
9+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10+
* See the License for the specific language governing permissions and
11+
* limitations under the License.
12+
*/
13+
package org.flowable.bpmn.converter.child;
14+
15+
import javax.xml.stream.XMLStreamReader;
16+
17+
import org.flowable.bpmn.converter.util.BpmnXMLUtil;
18+
import org.flowable.bpmn.model.BaseElement;
19+
import org.flowable.bpmn.model.BpmnModel;
20+
import org.flowable.bpmn.model.ExternalWorkerServiceTask;
21+
import org.flowable.bpmn.model.IOParameter;
22+
23+
/**
24+
* @author Valentin Zickner
25+
*/
26+
public class ExternalWorkerInParameterParser extends BaseChildElementParser {
27+
28+
@Override
29+
public String getElementName() {
30+
return ELEMENT_EXTERNAL_WORKER_IN_PARAMETER;
31+
}
32+
33+
@Override
34+
public void parseChildElement(XMLStreamReader xtr, BaseElement parentElement, BpmnModel model) throws Exception {
35+
IOParameter parameter = BpmnXMLUtil.parseInIOParameter(xtr);
36+
if (parameter != null) {
37+
((ExternalWorkerServiceTask) parentElement).getInParameters().add(parameter);
38+
}
39+
}
40+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/* Licensed under the Apache License, Version 2.0 (the "License");
2+
* you may not use this file except in compliance with the License.
3+
* You may obtain a copy of the License at
4+
*
5+
* http://www.apache.org/licenses/LICENSE-2.0
6+
*
7+
* Unless required by applicable law or agreed to in writing, software
8+
* distributed under the License is distributed on an "AS IS" BASIS,
9+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10+
* See the License for the specific language governing permissions and
11+
* limitations under the License.
12+
*/
13+
package org.flowable.bpmn.converter.child;
14+
15+
import javax.xml.stream.XMLStreamReader;
16+
17+
import org.flowable.bpmn.converter.util.BpmnXMLUtil;
18+
import org.flowable.bpmn.model.BaseElement;
19+
import org.flowable.bpmn.model.BpmnModel;
20+
import org.flowable.bpmn.model.ExternalWorkerServiceTask;
21+
import org.flowable.bpmn.model.IOParameter;
22+
23+
/**
24+
* @author Valentin Zickner
25+
*/
26+
public class ExternalWorkerOutParameterParser extends BaseChildElementParser {
27+
28+
@Override
29+
public String getElementName() {
30+
return ELEMENT_EXTERNAL_WORKER_OUT_PARAMETER;
31+
}
32+
33+
@Override
34+
public void parseChildElement(XMLStreamReader xtr, BaseElement parentElement, BpmnModel model) throws Exception {
35+
IOParameter parameter = BpmnXMLUtil.parseOutIOParameter(xtr);
36+
((ExternalWorkerServiceTask) parentElement).getOutParameters().add(parameter);
37+
}
38+
}

modules/flowable-bpmn-converter/src/main/resources/org/flowable/impl/bpmn/parser/flowable-bpmn-extensions.xsd

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,14 @@
386386
</annotation>
387387
</attribute>
388388

389+
<attribute name="doNotIncludeVariables" type="boolean">
390+
<annotation>
391+
<documentation>
392+
Mark an external worker task to explicit not include the variables.
393+
</documentation>
394+
</annotation>
395+
</attribute>
396+
389397
<element name="field">
390398
<annotation>
391399
<documentation>

modules/flowable-bpmn-converter/src/test/java/org/flowable/editor/language/xml/ExternalWorkerServiceTaskConverterTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.flowable.bpmn.model.BpmnModel;
1818
import org.flowable.bpmn.model.ExternalWorkerServiceTask;
1919
import org.flowable.bpmn.model.FlowElement;
20+
import org.flowable.bpmn.model.IOParameter;
2021
import org.flowable.editor.language.xml.util.BpmnXmlConverterTest;
2122

2223
class ExternalWorkerServiceTaskConverterTest {
@@ -32,5 +33,15 @@ void validateModel(BpmnModel model) {
3233
assertThat(externalWorkerServiceTask.getTopic()).isEqualTo("topic");
3334
assertThat(externalWorkerServiceTask.getSkipExpression()).isEqualTo("skipExpression");
3435
assertThat(externalWorkerServiceTask.isExclusive()).isTrue();
36+
37+
assertThat(externalWorkerServiceTask.getInParameters()).hasSize(1);
38+
IOParameter inParameter = externalWorkerServiceTask.getInParameters().get(0);
39+
assertThat(inParameter.getSource()).isEqualTo("description");
40+
assertThat(inParameter.getTarget()).isEqualTo("theDescription");
41+
assertThat(externalWorkerServiceTask.getOutParameters()).hasSize(1);
42+
IOParameter outParameter = externalWorkerServiceTask.getOutParameters().get(0);
43+
assertThat(outParameter.getSource()).isEqualTo("theResult");
44+
assertThat(outParameter.getTarget()).isEqualTo("result");
45+
3546
}
3647
}

modules/flowable-bpmn-converter/src/test/resources/externalWorkerServiceTask.bpmn

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
<sequenceFlow sourceRef="start" targetRef="externalWorkerServiceTask"/>
88
<serviceTask id="externalWorkerServiceTask" flowable:type="external-worker" name="External worker task" flowable:skipExpression="skipExpression"
99
flowable:topic="topic">
10+
<extensionElements>
11+
<flowable:externalWorkerInParameter source="description" target="theDescription"/>
12+
<flowable:externalWorkerOutParameter source="theResult" target="result"/>
13+
</extensionElements>
1014
</serviceTask>
1115
<sequenceFlow sourceRef="externalWorkerServiceTask" targetRef="end"/>
1216
<endEvent id="end"/>

modules/flowable-bpmn-model/src/main/java/org/flowable/bpmn/model/ExternalWorkerServiceTask.java

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,18 @@
1212
*/
1313
package org.flowable.bpmn.model;
1414

15+
import java.util.ArrayList;
16+
import java.util.List;
17+
1518
/**
1619
* @author Filip Hrisafov
1720
*/
18-
public class ExternalWorkerServiceTask extends ServiceTask {
21+
public class ExternalWorkerServiceTask extends ServiceTask implements HasOutParameters, HasInParameters {
1922

2023
protected String topic;
24+
protected boolean doNotIncludeVariables = false;
25+
protected List<IOParameter> inParameters = new ArrayList<>();
26+
protected List<IOParameter> outParameters = new ArrayList<>();
2127

2228
public String getTopic() {
2329
return topic;
@@ -27,6 +33,44 @@ public void setTopic(String topic) {
2733
this.topic = topic;
2834
}
2935

36+
public boolean isDoNotIncludeVariables() {
37+
return doNotIncludeVariables;
38+
}
39+
40+
public void setDoNotIncludeVariables(boolean doNotIncludeVariables) {
41+
this.doNotIncludeVariables = doNotIncludeVariables;
42+
}
43+
44+
@Override
45+
public List<IOParameter> getInParameters() {
46+
return inParameters;
47+
}
48+
49+
@Override
50+
public void setInParameters(List<IOParameter> inParameters) {
51+
this.inParameters = inParameters;
52+
}
53+
54+
@Override
55+
public void addInParameter(IOParameter inParameter) {
56+
this.inParameters.add(inParameter);
57+
}
58+
59+
@Override
60+
public List<IOParameter> getOutParameters() {
61+
return outParameters;
62+
}
63+
64+
@Override
65+
public void setOutParameters(List<IOParameter> outParameters) {
66+
this.outParameters = outParameters;
67+
}
68+
69+
@Override
70+
public void addOutParameter(IOParameter outParameter) {
71+
this.outParameters.add(outParameter);
72+
}
73+
3074
@Override
3175
public ExternalWorkerServiceTask clone() {
3276
ExternalWorkerServiceTask clone = new ExternalWorkerServiceTask();

modules/flowable-cmmn-converter/src/main/java/org/flowable/cmmn/converter/CmmnXmlConstants.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@ public interface CmmnXmlConstants {
123123
String ATTRIBUTE_STORE_RESULT_AS_TRANSIENT = "storeResultVariableAsTransient";
124124

125125
String ATTRIBUTE_EXTERNAL_WORKER_TOPIC = "topic";
126+
String ATTRIBUTE_EXTERNAL_WORKER_DO_NOT_INCLUDE_VARIABLES = "doNotIncludeVariables";
127+
String ELEMENT_EXTERNAL_WORKER_IN_PARAMETER = "externalWorkerInParameter";
128+
String ELEMENT_EXTERNAL_WORKER_OUT_PARAMETER = "externalWorkerOutParameter";
126129

127130
String ATTRIBUTE_IS_AUTO_COMPLETE = "autoComplete";
128131
String ATTRIBUTE_AUTO_COMPLETE_CONDITION = "autoCompleteCondition";
@@ -157,6 +160,7 @@ public interface CmmnXmlConstants {
157160
String ATTRIBUTE_IOPARAMETER_SOURCE_EXPRESSION = "sourceExpression";
158161
String ATTRIBUTE_IOPARAMETER_TARGET = "target";
159162
String ATTRIBUTE_IOPARAMETER_TARGET_EXPRESSION = "targetExpression";
163+
String ATTRIBUTE_IOPARAMETER_TRANSIENT = "transient";
160164

161165
String ELEMENT_TIMER_EXPRESSION = "timerExpression";
162166
String ELEMENT_PLAN_ITEM_START_TRIGGER = "planItemStartTrigger";

modules/flowable-cmmn-converter/src/main/java/org/flowable/cmmn/converter/ExtensionElementsXMLConverter.java

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import org.flowable.cmmn.model.BaseElement;
3131
import org.flowable.cmmn.model.Case;
3232
import org.flowable.cmmn.model.CaseElement;
33-
import org.flowable.cmmn.model.ChildTask;
3433
import org.flowable.cmmn.model.CmmnElement;
3534
import org.flowable.cmmn.model.CompletionNeutralRule;
3635
import org.flowable.cmmn.model.DecisionTask;
@@ -40,7 +39,9 @@
4039
import org.flowable.cmmn.model.FlowableHttpResponseHandler;
4140
import org.flowable.cmmn.model.FlowableListener;
4241
import org.flowable.cmmn.model.GenericEventListener;
42+
import org.flowable.cmmn.model.HasInParameters;
4343
import org.flowable.cmmn.model.HasLifecycleListeners;
44+
import org.flowable.cmmn.model.HasOutParameters;
4445
import org.flowable.cmmn.model.HttpServiceTask;
4546
import org.flowable.cmmn.model.HumanTask;
4647
import org.flowable.cmmn.model.IOParameter;
@@ -106,11 +107,13 @@ protected CmmnElement convert(XMLStreamReader xtr, ConversionHelper conversionHe
106107
} else if (CmmnXmlConstants.ELEMENT_HTTP_RESPONSE_HANDLER.equals(xtr.getLocalName())) {
107108
readHttpResponseHandler(xtr, conversionHelper);
108109

109-
} else if (CmmnXmlConstants.ELEMENT_CHILD_TASK_IN_PARAMETERS.equals(xtr.getLocalName())) {
110-
readIOParameter(xtr, true, conversionHelper);
110+
} else if (CmmnXmlConstants.ELEMENT_CHILD_TASK_IN_PARAMETERS.equals(xtr.getLocalName())
111+
|| CmmnXmlConstants.ELEMENT_EXTERNAL_WORKER_IN_PARAMETER.equals(xtr.getLocalName())) {
112+
readInputParameter(xtr, conversionHelper);
111113

112-
} else if (CmmnXmlConstants.ELEMENT_CHILD_TASK_OUT_PARAMETERS.equals(xtr.getLocalName())) {
113-
readIOParameter(xtr, false, conversionHelper);
114+
} else if (CmmnXmlConstants.ELEMENT_CHILD_TASK_OUT_PARAMETERS.equals(xtr.getLocalName())
115+
|| CmmnXmlConstants.ELEMENT_EXTERNAL_WORKER_OUT_PARAMETER.equals(xtr.getLocalName())) {
116+
readOutputParameter(xtr, conversionHelper);
114117

115118
} else if (CmmnXmlConstants.ELEMENT_TASK_LISTENER.equals(xtr.getLocalName())) {
116119
readTaskListener(xtr, conversionHelper);
@@ -311,17 +314,26 @@ protected void readHttpResponseHandler(XMLStreamReader xtr, ConversionHelper con
311314
((HttpServiceTask) cmmnElement).setHttpResponseHandler(responseHandler);
312315
}
313316

314-
protected void readIOParameter(XMLStreamReader xtr, boolean isInParameter, ConversionHelper conversionHelper) {
317+
protected void readInputParameter(XMLStreamReader xtr, ConversionHelper conversionHelper) {
315318
CmmnElement currentCmmnElement = conversionHelper.getCurrentCmmnElement();
316-
if (!(currentCmmnElement instanceof ChildTask)) {
317-
return;
319+
if (currentCmmnElement instanceof HasInParameters hasInParameters) {
320+
hasInParameters.addInParameter(readIoParameter(xtr));
318321
}
322+
}
319323

320-
ChildTask childTask = (ChildTask) currentCmmnElement;
324+
protected void readOutputParameter(XMLStreamReader xtr, ConversionHelper conversionHelper) {
325+
CmmnElement currentCmmnElement = conversionHelper.getCurrentCmmnElement();
326+
if (currentCmmnElement instanceof HasOutParameters hasOutParameters) {
327+
hasOutParameters.addOutParameter(readIoParameter(xtr));
328+
}
329+
}
330+
331+
protected IOParameter readIoParameter(XMLStreamReader xtr) {
321332
String source = xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_IOPARAMETER_SOURCE);
322333
String sourceExpression = xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_IOPARAMETER_SOURCE_EXPRESSION);
323334
String target = xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_IOPARAMETER_TARGET);
324335
String targetExpression = xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_IOPARAMETER_TARGET_EXPRESSION);
336+
String isTransient = xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_IOPARAMETER_TRANSIENT);
325337

326338
IOParameter parameter = new IOParameter();
327339

@@ -337,11 +349,10 @@ protected void readIOParameter(XMLStreamReader xtr, boolean isInParameter, Conve
337349
parameter.setTarget(target);
338350
}
339351

340-
if (isInParameter) {
341-
childTask.getInParameters().add(parameter);
342-
} else {
343-
childTask.getOutParameters().add(parameter);
352+
if (StringUtils.isNotEmpty(isTransient)) {
353+
parameter.setTransient(Boolean.parseBoolean(isTransient));
344354
}
355+
return parameter;
345356
}
346357

347358
protected void readTaskListener(XMLStreamReader xtr, ConversionHelper conversionHelper) throws Exception {

0 commit comments

Comments
 (0)