diff --git a/spring-boot-starter-camunda/pom.xml b/spring-boot-starter-camunda/pom.xml index a20c10a10..1ae3ad303 100644 --- a/spring-boot-starter-camunda/pom.xml +++ b/spring-boot-starter-camunda/pom.xml @@ -44,6 +44,11 @@ jackson-core provided + + com.fasterxml.jackson.core + jackson-annotations + provided + io.camunda.spring spring-client-zeebe diff --git a/spring-boot-starter-camunda/src/main/java/io/camunda/zeebe/spring/client/properties/PropertyBasedZeebeWorkerValueCustomizer.java b/spring-boot-starter-camunda/src/main/java/io/camunda/zeebe/spring/client/properties/PropertyBasedZeebeWorkerValueCustomizer.java index 0b6182a11..f1ec959b9 100644 --- a/spring-boot-starter-camunda/src/main/java/io/camunda/zeebe/spring/client/properties/PropertyBasedZeebeWorkerValueCustomizer.java +++ b/spring-boot-starter-camunda/src/main/java/io/camunda/zeebe/spring/client/properties/PropertyBasedZeebeWorkerValueCustomizer.java @@ -1,10 +1,10 @@ package io.camunda.zeebe.spring.client.properties; import static io.camunda.zeebe.spring.client.configuration.PropertyUtil.*; -import static io.camunda.zeebe.spring.client.properties.ZeebeClientConfigurationProperties.*; import static java.util.Optional.*; import static org.apache.commons.lang3.StringUtils.*; +import com.fasterxml.jackson.annotation.JsonProperty; import io.camunda.zeebe.client.api.response.ActivatedJob; import io.camunda.zeebe.spring.client.annotation.Variable; import io.camunda.zeebe.spring.client.annotation.VariablesAsType; @@ -16,6 +16,7 @@ import io.camunda.zeebe.spring.client.bean.MethodInfo; import io.camunda.zeebe.spring.client.bean.ParameterInfo; import io.camunda.zeebe.spring.client.properties.common.ZeebeClientProperties; +import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; @@ -104,10 +105,17 @@ private List readVariablesAsTypeParameters(MethodInfo methodInfo) { parameters.forEach( pi -> ReflectionUtils.doWithFields( - pi.getParameterInfo().getType(), f -> result.add(f.getName()))); + pi.getParameterInfo().getType(), f -> result.add(extractParameterName(f)))); return result; } + private String extractParameterName(Field field) { + if (field.isAnnotationPresent(JsonProperty.class)) { + return field.getAnnotation(JsonProperty.class).value(); + } + return field.getName(); + } + private void applyOverrides(ZeebeWorkerValue zeebeWorker) { final Map workerConfigurationMap = getOrLegacyOrDefault( diff --git a/spring-boot-starter-camunda/src/test/java/io/camunda/zeebe/spring/client/properties/PropertyBasedZeebeWorkerValueCustomizerTest.java b/spring-boot-starter-camunda/src/test/java/io/camunda/zeebe/spring/client/properties/PropertyBasedZeebeWorkerValueCustomizerTest.java index 725d1dd6c..df5c80f7a 100644 --- a/spring-boot-starter-camunda/src/test/java/io/camunda/zeebe/spring/client/properties/PropertyBasedZeebeWorkerValueCustomizerTest.java +++ b/spring-boot-starter-camunda/src/test/java/io/camunda/zeebe/spring/client/properties/PropertyBasedZeebeWorkerValueCustomizerTest.java @@ -2,6 +2,7 @@ import static org.assertj.core.api.Assertions.*; +import com.fasterxml.jackson.annotation.JsonProperty; import io.camunda.zeebe.client.api.response.ActivatedJob; import io.camunda.zeebe.spring.client.annotation.JobWorker; import io.camunda.zeebe.spring.client.annotation.Variable; @@ -47,6 +48,9 @@ private static CamundaClientProperties properties() { @JobWorker void sampleWorker(@Variable String var1, @VariablesAsType ComplexProcessVariable var2) {} + @JobWorker + void sampleWorkerWithJsonProperty(@VariablesAsType PropertyAnnotatedClass var2) {} + @JobWorker void activatedJobWorker(@Variable String var1, ActivatedJob activatedJob) {} @@ -360,6 +364,19 @@ void shouldApplyWorkerOverridesOverGlobalOverrides() { assertThat(zeebeWorkerValue.getEnabled()).isFalse(); } + @Test + void shouldApplyPropertyAnnotationOnVariableFiltering() { + // given + PropertyBasedZeebeWorkerValueCustomizer customizer = + new PropertyBasedZeebeWorkerValueCustomizer(legacyProperties(), properties()); + ZeebeWorkerValue zeebeWorkerValue = new ZeebeWorkerValue(); + zeebeWorkerValue.setMethodInfo(methodInfo(this, "testBean", "sampleWorkerWithJsonProperty")); + // when + customizer.customize(zeebeWorkerValue); + // then + assertThat(zeebeWorkerValue.getFetchVariables()).containsExactly("weird_name"); + } + private static class ComplexProcessVariable { private String var3; private String var4; @@ -380,4 +397,9 @@ public void setVar4(String var4) { this.var4 = var4; } } + + private static class PropertyAnnotatedClass { + @JsonProperty("weird_name") + private String value; + } }