From 60b6f02a499aa45333850f3b8ec79795f46f68f0 Mon Sep 17 00:00:00 2001 From: Soby Chacko Date: Mon, 8 Oct 2018 18:17:16 -0400 Subject: [PATCH] Addressing snake_case properties binding Related to #1495 --- .../cloud/stream/binding/BindingService.java | 5 +++-- .../config/EnvironmentEntryInitializingTreeMap.java | 4 +++- .../cloud/stream/binding/BindingServiceTests.java | 8 +++++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/BindingService.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/BindingService.java index d9902d2fb..42d31f56d 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/BindingService.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/BindingService.java @@ -284,8 +284,9 @@ public class BindingService implements ApplicationContextAware { } }; //Re-bind extended properties to check which properties are really provided by the application - extendedPropertiesResolverBinder.bind(producer ? bindingPropertyPrefixOnBinder + ".producer" : bindingPropertyPrefixOnBinder + ".consumer", - Bindable.ofInstance(extendedProperties), handler); + String configElements = producer ? bindingPropertyPrefixOnBinder + ".producer" : bindingPropertyPrefixOnBinder + ".consumer"; + String uniformConfigElements = StringUtils.replace(configElements, "_", "").toLowerCase(); + extendedPropertiesResolverBinder.bind(uniformConfigElements, Bindable.ofInstance(extendedProperties), handler); BinderSpecificPropertiesProvider defaultProperties = BeanUtils.instantiateClass(extendedPropertiesEntryClass); extendedPropertiesResolverBinder.bind(defaultsPrefix, Bindable.ofInstance(defaultProperties)); diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/EnvironmentEntryInitializingTreeMap.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/EnvironmentEntryInitializingTreeMap.java index 32bb66cd5..84bb4c72c 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/EnvironmentEntryInitializingTreeMap.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/EnvironmentEntryInitializingTreeMap.java @@ -33,6 +33,7 @@ import org.springframework.boot.context.properties.source.ConfigurationPropertyS import org.springframework.core.convert.ConversionService; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.util.Assert; +import org.springframework.util.StringUtils; /** * A {@link Map} implementation that initializes its entries by binding values from the @@ -114,7 +115,8 @@ public class EnvironmentEntryInitializingTreeMap extends AbstractMap bindings = bindingServiceProperties.getBindings(); @@ -467,6 +469,7 @@ public class BindingServiceTests { assertThat(bindings.get("inputXyz").getContentType()).isEqualTo("application/json"); assertThat(bindings.get("inputFooBar").getContentType()).isEqualTo("application/avro"); assertThat(bindings.get("inputFooBarBuzz").getContentType()).isEqualTo("text/plain"); + assertThat(bindings.get("input_snake_case").getContentType()).isEqualTo("application/avro"); } @EnableBinding(FooBinding.class) @@ -500,6 +503,9 @@ public class BindingServiceTests { @Input("inputFooBarBuzz") SubscribableChannel inFooBarBuzz(); + + @Input("input_snake_case") + SubscribableChannel inWithSnakeCase(); } @Test