diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/properties/JaasLoginModuleConfiguration.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/properties/JaasLoginModuleConfiguration.java index 9934f30dd..871a880c8 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/properties/JaasLoginModuleConfiguration.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/properties/JaasLoginModuleConfiguration.java @@ -17,6 +17,7 @@ package org.springframework.cloud.stream.binder.kafka.properties; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import javax.security.auth.login.AppConfigurationEntry; @@ -55,7 +56,7 @@ public class JaasLoginModuleConfiguration { public void setControlFlag(String controlFlag) { Assert.notNull(controlFlag, "cannot be null"); this.controlFlag = KafkaJaasLoginModuleInitializer.ControlFlag - .valueOf(controlFlag.toUpperCase()); + .valueOf(controlFlag.toUpperCase(Locale.ROOT)); } public Map getOptions() { diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/test/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderIntegrationTests.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/test/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderIntegrationTests.java index 7495dacdb..e1a04dfe6 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/test/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderIntegrationTests.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/test/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderIntegrationTests.java @@ -20,6 +20,7 @@ import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.function.Function; @@ -193,7 +194,7 @@ class ReactorKafkaBinderIntegrationTests { @Bean Function>, Flux> lowercase() { - return s -> s.map(rec -> new String(rec.value()).toLowerCase()); + return s -> s.map(rec -> new String(rec.value()).toLowerCase(Locale.ROOT)); } @Bean diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/test/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderObservationTests.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/test/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderObservationTests.java index 474325af3..13a35377c 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/test/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderObservationTests.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-reactive/src/test/java/org/springframework/cloud/stream/binder/reactorkafka/ReactorKafkaBinderObservationTests.java @@ -18,6 +18,7 @@ package org.springframework.cloud.stream.binder.reactorkafka; import java.lang.reflect.Type; import java.time.Duration; +import java.util.Locale; import java.util.function.Function; import java.util.stream.Collectors; @@ -147,7 +148,7 @@ public class ReactorKafkaBinderObservationTests { observationRegistry); return Mono.deferContextual(contextView -> Mono.just(record) - .map(rec -> new String(rec.value()).toLowerCase()) + .map(rec -> new String(rec.value()).toLowerCase(Locale.ROOT)) .map(rec -> MessageBuilder.withPayload(rec).setHeader(IntegrationMessageHeaderAccessor.REACTOR_CONTEXT, contextView).build())) .doOnTerminate(receiverObservation::stop) .doOnError(receiverObservation::error) diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/AbstractKafkaStreamsBinderProcessor.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/AbstractKafkaStreamsBinderProcessor.java index 2f289d316..30d11b0f2 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/AbstractKafkaStreamsBinderProcessor.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/AbstractKafkaStreamsBinderProcessor.java @@ -18,6 +18,7 @@ package org.springframework.cloud.stream.binder.kafka.streams; import java.util.Arrays; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.Optional; @@ -370,7 +371,7 @@ public abstract class AbstractKafkaStreamsBinderProcessor implements Application if (!concurrencyExplicitlyProvided[0]) { concurrencyExplicitlyProvided[0] = name.getLastElement(ConfigurationPropertyName.Form.UNIFORM).equals("concurrency") && // name is normalized to contain only uniform elements and thus safe to call toLowerCase here. - ConfigurationPropertyName.of("spring.cloud.stream.bindings." + inboundName.toLowerCase() + ".consumer") + ConfigurationPropertyName.of("spring.cloud.stream.bindings." + inboundName.toLowerCase(Locale.ROOT) + ".consumer") .isAncestorOf(name); } return result; diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/function/KafkaStreamsBinderWordCountBranchesFunctionTests.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/function/KafkaStreamsBinderWordCountBranchesFunctionTests.java index e18186018..80f2e944b 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/function/KafkaStreamsBinderWordCountBranchesFunctionTests.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/function/KafkaStreamsBinderWordCountBranchesFunctionTests.java @@ -19,6 +19,7 @@ package org.springframework.cloud.stream.binder.kafka.streams.function; import java.time.Duration; import java.util.Arrays; import java.util.Date; +import java.util.Locale; import java.util.Map; import java.util.function.Function; @@ -190,7 +191,7 @@ class KafkaStreamsBinderWordCountBranchesFunctionTests { return input -> { final Map> stringKStreamMap = input - .flatMapValues(value -> Arrays.asList(value.toLowerCase().split("\\W+"))) + .flatMapValues(value -> Arrays.asList(value.toLowerCase(Locale.ROOT).split("\\W+"))) .groupBy((key, value) -> value) .windowedBy(TimeWindows.of(Duration.ofSeconds(5))) .count(Materialized.as("WordCounts-branch")) diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/function/KafkaStreamsBinderWordCountFunctionTests.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/function/KafkaStreamsBinderWordCountFunctionTests.java index 19dfe654a..57f0646b7 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/function/KafkaStreamsBinderWordCountFunctionTests.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/function/KafkaStreamsBinderWordCountFunctionTests.java @@ -21,6 +21,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Date; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Optional; import java.util.concurrent.CountDownLatch; @@ -397,7 +398,7 @@ class KafkaStreamsBinderWordCountFunctionTests { Function, KStream> process() { return input -> input - .flatMapValues(value -> Arrays.asList(value.toLowerCase().split("\\W+"))) + .flatMapValues(value -> Arrays.asList(value.toLowerCase(Locale.ROOT).split("\\W+"))) .map((key, value) -> new KeyValue<>(value, value)) .groupByKey(Grouped.with(Serdes.String(), Serdes.String())) .windowedBy(TimeWindows.of(Duration.ofMillis(5000))) @@ -439,7 +440,7 @@ class KafkaStreamsBinderWordCountFunctionTests { Function, KStream> process() { return input -> input .flatMapValues( - value -> Arrays.asList(value.toLowerCase().split("\\W+"))) + value -> Arrays.asList(value.toLowerCase(Locale.ROOT).split("\\W+"))) .map((key, value) -> new KeyValue<>(value, value)) .groupByKey(Grouped.with(Serdes.String(), Serdes.String())) .windowedBy(TimeWindows.ofSizeWithNoGrace(Duration.ofSeconds(5))).count(Materialized.as("foobar-WordCounts")) diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/DlqDestinationResolverTests.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/DlqDestinationResolverTests.java index a83a71459..89d086c8b 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/DlqDestinationResolverTests.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/DlqDestinationResolverTests.java @@ -18,6 +18,7 @@ package org.springframework.cloud.stream.binder.kafka.streams.integration; import java.time.Duration; import java.util.Arrays; +import java.util.Locale; import java.util.Map; import java.util.function.Function; @@ -124,7 +125,7 @@ class DlqDestinationResolverTests { return input -> input .flatMapValues( - value -> Arrays.asList(value.toLowerCase().split("\\W+"))) + value -> Arrays.asList(value.toLowerCase(Locale.ROOT).split("\\W+"))) .map((key, value) -> new KeyValue<>(value, value)) .groupByKey(Grouped.with(Serdes.String(), Serdes.String())) .windowedBy(TimeWindows.of(Duration.ofSeconds(5))).count(Materialized.as("foo-WordCounts-x")) diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/KafkaStreamsBinderMultipleInputTopicsTest.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/KafkaStreamsBinderMultipleInputTopicsTest.java index 8e14655ee..41b131de2 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/KafkaStreamsBinderMultipleInputTopicsTest.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/KafkaStreamsBinderMultipleInputTopicsTest.java @@ -19,6 +19,7 @@ package org.springframework.cloud.stream.binder.kafka.streams.integration; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.function.Function; @@ -149,7 +150,7 @@ class KafkaStreamsBinderMultipleInputTopicsTest { return input -> input .flatMapValues( - value -> Arrays.asList(value.toLowerCase().split("\\W+"))) + value -> Arrays.asList(value.toLowerCase(Locale.ROOT).split("\\W+"))) .map((key, value) -> new KeyValue<>(value, value)) .groupByKey(Grouped.with(Serdes.String(), Serdes.String())) .count(Materialized.as("WordCounts-tKWCWSIAP0")).toStream() diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/KafkaStreamsBinderTombstoneTests.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/KafkaStreamsBinderTombstoneTests.java index e4f436ccb..38db7eeb4 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/KafkaStreamsBinderTombstoneTests.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/KafkaStreamsBinderTombstoneTests.java @@ -19,6 +19,7 @@ package org.springframework.cloud.stream.binder.kafka.streams.integration; import java.time.Duration; import java.util.Arrays; import java.util.Date; +import java.util.Locale; import java.util.Map; import java.util.Properties; import java.util.function.Function; @@ -173,7 +174,7 @@ class KafkaStreamsBinderTombstoneTests { public Function, KStream> process() { return input -> input - .flatMapValues(value -> Arrays.asList(value.toLowerCase().split("\\W+"))) + .flatMapValues(value -> Arrays.asList(value.toLowerCase(Locale.ROOT).split("\\W+"))) .map((key, value) -> new KeyValue<>(value, value)) .groupByKey(Grouped.with(Serdes.String(), Serdes.String())) .windowedBy(TimeWindows.of(Duration.ofMillis(5000))) diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/KafkaStreamsNativeEncodingDecodingDisabledTests.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/KafkaStreamsNativeEncodingDecodingDisabledTests.java index 4e4ab9b9c..b67dab139 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/KafkaStreamsNativeEncodingDecodingDisabledTests.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/KafkaStreamsNativeEncodingDecodingDisabledTests.java @@ -19,6 +19,7 @@ package org.springframework.cloud.stream.binder.kafka.streams.integration; import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.Arrays; +import java.util.Locale; import java.util.Map; import java.util.function.Function; @@ -153,7 +154,7 @@ public abstract class KafkaStreamsNativeEncodingDecodingDisabledTests { return input -> input .flatMapValues( - value -> Arrays.asList(value.toLowerCase().split("\\W+"))) + value -> Arrays.asList(value.toLowerCase(Locale.ROOT).split("\\W+"))) .map((key, value) -> new KeyValue<>(value, value)) .groupByKey(Grouped.with(Serdes.String(), Serdes.String())) .windowedBy(TimeWindows.of(Duration.ofSeconds(5))).count(Materialized.as("foo-WordCounts-x")) diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/KafkaStreamsNativeEncodingDecodingEnabledTests.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/KafkaStreamsNativeEncodingDecodingEnabledTests.java index 3211d1106..5954bf270 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/KafkaStreamsNativeEncodingDecodingEnabledTests.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/test/java/org/springframework/cloud/stream/binder/kafka/streams/integration/KafkaStreamsNativeEncodingDecodingEnabledTests.java @@ -18,6 +18,7 @@ package org.springframework.cloud.stream.binder.kafka.streams.integration; import java.time.Duration; import java.util.Arrays; +import java.util.Locale; import java.util.Map; import java.util.function.Function; @@ -137,7 +138,7 @@ public abstract class KafkaStreamsNativeEncodingDecodingEnabledTests { return input -> input .flatMapValues( - value -> Arrays.asList(value.toLowerCase().split("\\W+"))) + value -> Arrays.asList(value.toLowerCase(Locale.ROOT).split("\\W+"))) .map((key, value) -> new KeyValue<>(value, value)) .groupByKey(Grouped.with(Serdes.String(), Serdes.String())) .windowedBy(TimeWindows.of(Duration.ofSeconds(5))).count(Materialized.as("foo-WordCounts-x")) diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/KafkaMessageChannelBinder.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/KafkaMessageChannelBinder.java index f68576438..cad961104 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/KafkaMessageChannelBinder.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/KafkaMessageChannelBinder.java @@ -26,6 +26,7 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.Set; @@ -1478,7 +1479,7 @@ public class KafkaMessageChannelBinder extends if (producerProperties.isDynamicPartitionUpdatesEnabled() && producerProperties.getPartitionKeyExpression() != null && !(producerProperties.getPartitionKeyExpression().getExpressionString() - .toLowerCase().contains("payload"))) { + .toLowerCase(Locale.ROOT).contains("payload"))) { kafkaPartitionHandler = new PartitionHandler(ExpressionUtils.createStandardEvaluationContext(beanFactory), producerProperties, beanFactory); diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/integration/ProducerOnlyTransactionTests.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/integration/ProducerOnlyTransactionTests.java index 2fbb2766d..c958948e9 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/integration/ProducerOnlyTransactionTests.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/integration/ProducerOnlyTransactionTests.java @@ -16,6 +16,7 @@ package org.springframework.cloud.stream.binder.kafka.integration; +import java.util.Locale; import java.util.Map; import org.apache.kafka.clients.consumer.Consumer; @@ -86,7 +87,7 @@ class ProducerOnlyTransactionTests { props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, ByteArrayDeserializer.class); props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, ByteArrayDeserializer.class); props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest"); - props.put(ConsumerConfig.ISOLATION_LEVEL_CONFIG, IsolationLevel.READ_COMMITTED.name().toLowerCase()); + props.put(ConsumerConfig.ISOLATION_LEVEL_CONFIG, IsolationLevel.READ_COMMITTED.name().toLowerCase(Locale.ROOT)); Consumer consumer = new KafkaConsumer<>(props); embeddedKafkaBrokera.consumeFromAllEmbeddedTopics(consumer); ConsumerRecord record = KafkaTestUtils.getSingleRecord(consumer, "output"); diff --git a/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/integration2/ConsumerProducerTransactionTests.java b/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/integration2/ConsumerProducerTransactionTests.java index a0919cff1..3af3dccc2 100644 --- a/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/integration2/ConsumerProducerTransactionTests.java +++ b/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/test/java/org/springframework/cloud/stream/binder/kafka/integration2/ConsumerProducerTransactionTests.java @@ -18,6 +18,7 @@ package org.springframework.cloud.stream.binder.kafka.integration2; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -130,7 +131,7 @@ class ConsumerProducerTransactionTests { if (in.equals("two")) { throw new RuntimeException("fail"); } - return in.toUpperCase(); + return in.toUpperCase(Locale.ROOT); }; } diff --git a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/binder/PollableConsumerTests.java b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/binder/PollableConsumerTests.java index 46655c833..0391ae731 100644 --- a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/binder/PollableConsumerTests.java +++ b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/binder/PollableConsumerTests.java @@ -18,6 +18,7 @@ package org.springframework.cloud.stream.binder; import java.util.Collections; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger; @@ -116,7 +117,7 @@ class PollableConsumerTests { @Override public Message preSend(Message message, MessageChannel channel) { return MessageBuilder - .withPayload(((String) message.getPayload()).toUpperCase()) + .withPayload(((String) message.getPayload()).toUpperCase(Locale.ROOT)) .copyHeaders(message.getHeaders()).build(); } @@ -301,7 +302,7 @@ class PollableConsumerTests { public Message preSend(Message message, MessageChannel channel) { return MessageBuilder .withPayload( - new String((byte[]) message.getPayload()).toUpperCase()) + new String((byte[]) message.getPayload()).toUpperCase(Locale.ROOT)) .copyHeaders(message.getHeaders()).build(); } @@ -328,7 +329,7 @@ class PollableConsumerTests { @Override public Message preSend(Message message, MessageChannel channel) { return MessageBuilder - .withPayload(((String) message.getPayload()).toUpperCase()) + .withPayload(((String) message.getPayload()).toUpperCase(Locale.ROOT)) .copyHeaders(message.getHeaders()).build(); } @@ -379,7 +380,7 @@ class PollableConsumerTests { @Override public Message preSend(Message message, MessageChannel channel) { return MessageBuilder - .withPayload(((String) message.getPayload()).toUpperCase()) + .withPayload(((String) message.getPayload()).toUpperCase(Locale.ROOT)) .copyHeaders(message.getHeaders()).build(); } diff --git a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/FunctionPostProcessingTests.java b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/FunctionPostProcessingTests.java index 621251304..e92aa919b 100644 --- a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/FunctionPostProcessingTests.java +++ b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/FunctionPostProcessingTests.java @@ -16,6 +16,7 @@ package org.springframework.cloud.stream.function; +import java.util.Locale; import java.util.function.Function; import java.util.function.Supplier; @@ -241,7 +242,7 @@ class FunctionPostProcessingTests { public Function uppercase() { return new PostProcessingFunction() { public String apply(String input) { - return input.toUpperCase(); + return input.toUpperCase(Locale.ROOT); } public void postProcess(Message result) { @@ -260,7 +261,7 @@ class FunctionPostProcessingTests { if (input.equals("error")) { throw new RuntimeException("intentional"); } - return input.toUpperCase(); + return input.toUpperCase(Locale.ROOT); } @Override diff --git a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/GreenfieldFunctionEnableBindingTests.java b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/GreenfieldFunctionEnableBindingTests.java index 470291011..bca3d8502 100644 --- a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/GreenfieldFunctionEnableBindingTests.java +++ b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/GreenfieldFunctionEnableBindingTests.java @@ -18,6 +18,7 @@ package org.springframework.cloud.stream.function; import java.nio.charset.StandardCharsets; import java.util.Date; +import java.util.Locale; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; @@ -94,7 +95,7 @@ class GreenfieldFunctionEnableBindingTests { @Bean public Function toUpperCase() { - return String::toUpperCase; + return v -> v.toUpperCase(Locale.ROOT); } } diff --git a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/HeaderTests.java b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/HeaderTests.java index f3b71374a..15bf8ac39 100644 --- a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/HeaderTests.java +++ b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/HeaderTests.java @@ -16,6 +16,7 @@ package org.springframework.cloud.stream.function; +import java.util.Locale; import java.util.function.Function; import org.junit.jupiter.api.BeforeAll; @@ -142,7 +143,7 @@ public class HeaderTests { public static class FunctionMessageConfiguration { @Bean public Function, Message> uppercase() { - return msg -> MessageBuilder.withPayload(msg.getPayload().toUpperCase()).build(); + return msg -> MessageBuilder.withPayload(msg.getPayload().toUpperCase(Locale.ROOT)).build(); } } diff --git a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/ImplicitFunctionBindingTests.java b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/ImplicitFunctionBindingTests.java index ad9a4c08f..a15485cda 100644 --- a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/ImplicitFunctionBindingTests.java +++ b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/ImplicitFunctionBindingTests.java @@ -23,6 +23,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.function.BiConsumer; import java.util.function.Consumer; @@ -244,7 +245,7 @@ class ImplicitFunctionBindingTests { // good, we expected it } - Function function = v -> new String(v).toUpperCase(); + Function function = v -> new String(v).toUpperCase(Locale.ROOT); FunctionBindingTestUtils.bind(context, function); input.send(new GenericMessage("hello".getBytes())); @@ -1434,7 +1435,7 @@ class ImplicitFunctionBindingTests { public Function>, Flux>> reactivePojoMessage() { return flux -> flux.map(message -> { Person p = message.getPayload(); - p.setName(p.getName().toUpperCase()); + p.setName(p.getName().toUpperCase(Locale.ROOT)); return MessageBuilder.withPayload(p).copyHeaders(message.getHeaders()).build(); }); } @@ -1636,7 +1637,7 @@ class ImplicitFunctionBindingTests { @Bean public Function uppercase() { - return v -> v.toUpperCase(); + return v -> v.toUpperCase(Locale.ROOT); } @Bean diff --git a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/MultipleInputOutputFunctionTests.java b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/MultipleInputOutputFunctionTests.java index c71772ed0..6a99e39d5 100644 --- a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/MultipleInputOutputFunctionTests.java +++ b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/MultipleInputOutputFunctionTests.java @@ -18,6 +18,7 @@ package org.springframework.cloud.stream.function; import java.nio.charset.StandardCharsets; import java.time.Duration; +import java.util.Locale; import java.util.function.Consumer; import java.util.function.Function; @@ -296,7 +297,7 @@ class MultipleInputOutputFunctionTests { @Bean public Function uppercase() { - return value -> value.toUpperCase(); + return value -> value.toUpperCase(Locale.ROOT); } @Bean @@ -378,8 +379,8 @@ class MultipleInputOutputFunctionTests { @Bean public Function, Flux>, Flux> multiInputSingleOutput() { return tuple -> { - Flux stringStream = tuple.getT1().map(p -> p.getName().toUpperCase()); - Flux intStream = tuple.getT2().map(p -> p.getName().toUpperCase()); + Flux stringStream = tuple.getT1().map(p -> p.getName().toUpperCase(Locale.ROOT)); + Flux intStream = tuple.getT2().map(p -> p.getName().toUpperCase(Locale.ROOT)); return Flux.merge(stringStream, intStream); }; } diff --git a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/RoutingFunctionTests.java b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/RoutingFunctionTests.java index 7407a248e..a2d16cfca 100644 --- a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/RoutingFunctionTests.java +++ b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/RoutingFunctionTests.java @@ -18,6 +18,7 @@ package org.springframework.cloud.stream.function; import java.lang.reflect.Field; import java.util.List; +import java.util.Locale; import java.util.function.Consumer; import java.util.function.Function; @@ -376,7 +377,6 @@ class RoutingFunctionTests { @Bean public Function, Message> enrich() { return x -> { - System.out.println("===> enrich"); return MessageBuilder.withPayload(x.getPayload()).setHeader("spring.cloud.function.definition", "uppercase").build(); }; } @@ -384,8 +384,7 @@ class RoutingFunctionTests { @Bean public Function uppercase() { return x -> { - System.out.println("===> uppercase"); - return x.toUpperCase(); + return x.toUpperCase(Locale.ROOT); }; } diff --git a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/StreamBridgeTests.java b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/StreamBridgeTests.java index 5d7ec5982..e55c8b055 100644 --- a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/StreamBridgeTests.java +++ b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/function/StreamBridgeTests.java @@ -18,6 +18,7 @@ package org.springframework.cloud.stream.function; import java.lang.reflect.Field; import java.net.URI; +import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.Set; @@ -819,7 +820,7 @@ class StreamBridgeTests { public static class DynamicProducerDestinationConfig { @Bean public Function, Message> uppercase() { - return msg -> MessageBuilder.withPayload(msg.getPayload().toUpperCase()) + return msg -> MessageBuilder.withPayload(msg.getPayload().toUpperCase(Locale.ROOT)) .setHeader("spring.cloud.stream.sendto.destination", "dynamicTopic").build(); } } @@ -1003,7 +1004,7 @@ class StreamBridgeTests { public IntegrationFlow transform(StreamBridge bridge) { return IntegrationFlow.from("foo").transform(v -> { String s = new String((byte[]) v); - return s.toUpperCase(); + return s.toUpperCase(Locale.ROOT); }) .handle(v -> bridge.send("output", v)) .get(); diff --git a/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/DefaultBinderFactory.java b/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/DefaultBinderFactory.java index 0eae62ed9..a570741e7 100644 --- a/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/DefaultBinderFactory.java +++ b/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/DefaultBinderFactory.java @@ -26,6 +26,7 @@ import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Map.Entry; import java.util.Properties; @@ -220,7 +221,7 @@ public class DefaultBinderFactory implements BinderFactory, DisposableBean, Appl } private String getKafkaStreamsBinderSimpleName(Class bindingTargetType) { - return bindingTargetType.getSimpleName().toLowerCase(); + return bindingTargetType.getSimpleName().toLowerCase(Locale.ROOT); } private boolean isKafkaStreamsType(Class bindingTargetType) { @@ -233,7 +234,7 @@ public class DefaultBinderFactory implements BinderFactory, DisposableBean, Appl if (!MessageChannel.class.isAssignableFrom(bindingTargetType) && !PollableMessageSource.class.isAssignableFrom(bindingTargetType)) { - String bindingTargetTypeName = StringUtils.hasText(name) ? name : bindingTargetType.getSimpleName().toLowerCase(); + String bindingTargetTypeName = StringUtils.hasText(name) ? name : bindingTargetType.getSimpleName().toLowerCase(Locale.ROOT); Binder binderInstance = getBinderInstance(bindingTargetTypeName); return binderInstance; } diff --git a/schema-registry/spring-cloud-stream-schema-registry-server/src/test/java/org/springframework/cloud/stream/schema/registry/server/SchemaRegistryServerAvroTests.java b/schema-registry/spring-cloud-stream-schema-registry-server/src/test/java/org/springframework/cloud/stream/schema/registry/server/SchemaRegistryServerAvroTests.java index 7bbd30c95..064d18d13 100644 --- a/schema-registry/spring-cloud-stream-schema-registry-server/src/test/java/org/springframework/cloud/stream/schema/registry/server/SchemaRegistryServerAvroTests.java +++ b/schema-registry/spring-cloud-stream-schema-registry-server/src/test/java/org/springframework/cloud/stream/schema/registry/server/SchemaRegistryServerAvroTests.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Map.Entry; import java.util.Optional; @@ -81,12 +82,12 @@ class SchemaRegistryServerAvroTests { .parse(resourceToString("classpath:/avro_user_definition_schema_v2.json")); private static final String AVRO_USER_SCHEMA_DEFAULT_NAME_STRATEGY_SUBJECT = AVRO_USER_AVRO_SCHEMA_V1.getName() - .toLowerCase(); + .toLowerCase(Locale.ROOT); private static final String AVRO_USER_SCHEMA_QUALIFED_NAME_STRATEGY_SUBJECT = AVRO_USER_AVRO_SCHEMA_V1 .getFullName() - .toLowerCase(); + .toLowerCase(Locale.ROOT); private static final Schema AVRO_USER_REGISTRY_SCHEMA_V1 = toSchema( AVRO_USER_SCHEMA_DEFAULT_NAME_STRATEGY_SUBJECT,