Skip to content

Commit e2a4e92

Browse files
wadhwaroh-langolegz
authored andcommitted
Register Expression serializer on binder ObjectMapper
Restore the intended Expression serializer registration so bindings actuator output can render SpEL expressions as strings instead of traversing Expression internals. Signed-off-by: wadhwaroh-lang <wadhwa.roh@gmail.com>
1 parent e508b2f commit e2a4e92

2 files changed

Lines changed: 21 additions & 1 deletion

File tree

core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/AbstractMessageChannelBinder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ protected void onInit() throws Exception {
157157
// }
158158
SimpleModule module = new SimpleModule();
159159
module.addSerializer(Expression.class, new ExpressionSerializer(Expression.class));
160-
this.objectMapper = this.objectMapper.rebuild().build();
160+
this.objectMapper = this.objectMapper.rebuild().addModule(module).build();
161161
}
162162

163163
public AbstractMessageChannelBinder(String[] headersToEmbed, PP provisioningProvider,

core/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/binder/AbstractMessageChannelBinderTests.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import org.springframework.cloud.stream.provisioning.ConsumerDestination;
2828
import org.springframework.cloud.stream.provisioning.ProducerDestination;
2929
import org.springframework.context.support.GenericApplicationContext;
30+
import org.springframework.expression.Expression;
31+
import org.springframework.expression.spel.standard.SpelExpressionParser;
3032
import org.springframework.integration.core.MessageProducer;
3133
import org.springframework.messaging.MessageChannel;
3234
import org.springframework.messaging.MessageHandler;
@@ -60,6 +62,24 @@ void serializeDurationOnObjectMapperInAMCB() throws Exception {
6062
assertThat(convertedMap).isNotEmpty();
6163
}
6264

65+
@Test
66+
@SuppressWarnings("unchecked")
67+
void serializeExpressionOnObjectMapperInAMCB() throws Exception {
68+
AbstractMessageChannelBinder<?, ?, ?> binder = createBinderInstance();
69+
70+
Field objectMapperField = ReflectionUtils.findField(AbstractMessageChannelBinder.class, "objectMapper");
71+
assertThat(objectMapperField).isNotNull();
72+
ReflectionUtils.makeAccessible(objectMapperField);
73+
ObjectMapper objectMapper = (ObjectMapper) ReflectionUtils.getField(objectMapperField, binder);
74+
assertThat(objectMapper).isNotNull();
75+
76+
Expression expression = new SpelExpressionParser().parseExpression("'routing.key'");
77+
Map<String, Object> properties = Map.of("routingKeyExpression", expression);
78+
Map<String, Object> convertedMap = objectMapper.convertValue(properties, Map.class);
79+
80+
assertThat(convertedMap).containsEntry("routingKeyExpression", "'routing.key'");
81+
}
82+
6383
@NotNull
6484
private static AbstractMessageChannelBinder<?, ?, ?> createBinderInstance() throws Exception {
6585
AbstractMessageChannelBinder<?, ?, ?> binder = new AbstractMessageChannelBinder<>(null, null) {

0 commit comments

Comments
 (0)