Skip to content

Commit 4d70fee

Browse files
committed
Use RecordELResolver in Flowable expression manager
1 parent 2c31be4 commit 4d70fee

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/DefaultExpressionManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.flowable.common.engine.impl.javax.el.ExpressionFactory;
2929
import org.flowable.common.engine.impl.javax.el.ListELResolver;
3030
import org.flowable.common.engine.impl.javax.el.MapELResolver;
31+
import org.flowable.common.engine.impl.javax.el.RecordELResolver;
3132
import org.flowable.common.engine.impl.javax.el.ValueExpression;
3233
import org.flowable.common.engine.impl.persistence.deploy.DeploymentCache;
3334

@@ -135,6 +136,7 @@ protected List<ELResolver> createDefaultElResolvers() {
135136
elResolvers.add(new ArrayELResolver());
136137
elResolvers.add(new ListELResolver());
137138
elResolvers.add(new MapELResolver());
139+
elResolvers.add(new RecordELResolver());
138140
ELResolver jsonNodeElResolver = createJsonNodeElResolver();
139141
if (jsonNodeElResolver != null) {
140142
elResolvers.add(jsonNodeElResolver);

modules/flowable-engine/src/test/java/org/flowable/engine/test/el/ExpressionManagerTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,34 @@ public void testInvokeIntegerMethodWithNullParameter() {
276276
assertThat(value).isNull();
277277
}
278278

279+
@Test
280+
@Deployment(resources = "org/flowable/engine/test/api/runtime/oneTaskProcess.bpmn20.xml")
281+
public void testResolveRecordProperties() {
282+
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
283+
284+
Object value = managementService.executeCommand(commandContext -> {
285+
Expression expression = processEngineConfiguration.getExpressionManager().createExpression("#{bean.name}");
286+
ExecutionEntity executionEntity = (ExecutionEntity) runtimeService.createProcessInstanceQuery()
287+
.processInstanceId(processInstance.getId())
288+
.includeProcessVariables().singleResult();
289+
executionEntity.setTransientVariable("bean", new TestRecord("kermit", 30));
290+
return expression.getValue(executionEntity);
291+
});
292+
293+
assertThat(value).isEqualTo("kermit");
294+
295+
value = managementService.executeCommand(commandContext -> {
296+
Expression expression = processEngineConfiguration.getExpressionManager().createExpression("#{bean.age}");
297+
ExecutionEntity executionEntity = (ExecutionEntity) runtimeService.createProcessInstanceQuery()
298+
.processInstanceId(processInstance.getId())
299+
.includeProcessVariables().singleResult();
300+
executionEntity.setTransientVariable("bean", new TestRecord("kermit", 30));
301+
return expression.getValue(executionEntity);
302+
});
303+
304+
assertThat(value).isEqualTo(30);
305+
}
306+
279307
@Test
280308
@Deployment(resources = "org/flowable/engine/test/api/runtime/oneTaskProcess.bpmn20.xml")
281309
public void testInvokeOnArrayNode() {
@@ -398,4 +426,7 @@ public String nonPrimitiveInteger(Integer value) {
398426
return value == null ? null : value.toString();
399427
}
400428
}
429+
430+
record TestRecord(String name, int age) {
431+
}
401432
}

0 commit comments

Comments
 (0)