From 66cc731d18316af156b07779ab73b6fdb2089008 Mon Sep 17 00:00:00 2001 From: yiliuTo Date: Mon, 19 Jul 2021 21:34:43 +0800 Subject: [PATCH 1/3] fix eh converter encode bug --- .../eventhub/converter/EventHubMessageConverter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/converter/EventHubMessageConverter.java b/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/converter/EventHubMessageConverter.java index 902beb8bc57d..636ae0e07bf6 100644 --- a/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/converter/EventHubMessageConverter.java +++ b/sdk/spring/azure-spring-integration-eventhubs/src/main/java/com/azure/spring/integration/eventhub/converter/EventHubMessageConverter.java @@ -12,7 +12,7 @@ import org.springframework.messaging.MessageHeaders; import org.springframework.util.LinkedMultiValueMap; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -44,7 +44,7 @@ protected byte[] getPayload(EventData azureMessage) { @Override protected EventData fromString(String payload) { - return new EventData(payload.getBytes(Charset.defaultCharset())); + return new EventData(payload.getBytes(StandardCharsets.UTF_8)); } @Override From 3afb8cb6fe966c61a6fcfa37fad51a51b6d0aeb8 Mon Sep 17 00:00:00 2001 From: Yi Liu Date: Tue, 20 Jul 2021 10:00:55 +0800 Subject: [PATCH 2/3] add changelog --- sdk/spring/azure-spring-cloud-autoconfigure/CHANGELOG.md | 2 ++ sdk/spring/azure-spring-cloud-starter-eventhubs/CHANGELOG.md | 2 ++ .../azure-spring-cloud-stream-binder-eventhubs/CHANGELOG.md | 2 ++ sdk/spring/azure-spring-integration-eventhubs/CHANGELOG.md | 3 +++ 4 files changed, 9 insertions(+) diff --git a/sdk/spring/azure-spring-cloud-autoconfigure/CHANGELOG.md b/sdk/spring/azure-spring-cloud-autoconfigure/CHANGELOG.md index fad9ca805707..8e09587ca9e4 100644 --- a/sdk/spring/azure-spring-cloud-autoconfigure/CHANGELOG.md +++ b/sdk/spring/azure-spring-cloud-autoconfigure/CHANGELOG.md @@ -4,6 +4,8 @@ ### Key Bug Fixes - Fixed `EventHubMessageConverter` to load all system properties of `EventData` and put in the header of org.springframework.messaging.Message.([#22683](https://github.com/Azure/azure-sdk-for-java/pull/22683/)) +### Breaking Changes +- Encode message payload with UTF-8 charset instead of default charset of JVM when the payload is String. ([#23056](https://github.com/Azure/azure-sdk-for-java/pull/23056)) ## 2.6.0 (2021-06-23) ### Breaking Changes diff --git a/sdk/spring/azure-spring-cloud-starter-eventhubs/CHANGELOG.md b/sdk/spring/azure-spring-cloud-starter-eventhubs/CHANGELOG.md index f1fa6b3d3655..bdd47e9977e4 100644 --- a/sdk/spring/azure-spring-cloud-starter-eventhubs/CHANGELOG.md +++ b/sdk/spring/azure-spring-cloud-starter-eventhubs/CHANGELOG.md @@ -4,6 +4,8 @@ ### Key Bug Fixes - Fixed `EventHubMessageConverter` to load all system properties of `EventData` and put in the header of org.springframework.messaging.Message.([#22683](https://github.com/Azure/azure-sdk-for-java/pull/22683/)) +### Breaking Changes +- Encode message payload with UTF-8 charset instead of default charset of JVM when the payload is String. ([#23056](https://github.com/Azure/azure-sdk-for-java/pull/23056)) ## 2.6.0 (2021-06-23) ### New Features diff --git a/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/CHANGELOG.md b/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/CHANGELOG.md index f7e6fef518b1..64fcb49615ae 100644 --- a/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/CHANGELOG.md +++ b/sdk/spring/azure-spring-cloud-stream-binder-eventhubs/CHANGELOG.md @@ -4,6 +4,8 @@ ### Key Bug Fixes - Fixed `EventHubMessageConverter` to load all system properties of `EventData` and put in the header of org.springframework.messaging.Message.([#22683](https://github.com/Azure/azure-sdk-for-java/pull/22683/)) +### Breaking Changes +- Encode message payload with UTF-8 charset instead of default charset of JVM when the payload is String. ([#23056](https://github.com/Azure/azure-sdk-for-java/pull/23056)) ## 2.6.0 (2021-06-23) ### Breaking Changes diff --git a/sdk/spring/azure-spring-integration-eventhubs/CHANGELOG.md b/sdk/spring/azure-spring-integration-eventhubs/CHANGELOG.md index 1dc8cfa1057a..76c0a153ecb1 100644 --- a/sdk/spring/azure-spring-integration-eventhubs/CHANGELOG.md +++ b/sdk/spring/azure-spring-integration-eventhubs/CHANGELOG.md @@ -4,6 +4,9 @@ ### Key Bug Fixes - Fixed `EventHubMessageConverter` to load all system properties of `EventData` and put in the header of org.springframework.messaging.Message.([#22683](https://github.com/Azure/azure-sdk-for-java/pull/22683/)) +### Breaking Changes +- Encode message payload with UTF-8 charset instead of default charset of JVM when the payload is String. ([#23056](https://github.com/Azure/azure-sdk-for-java/pull/23056)) + ## 2.6.0 (2021-06-23) ### New Features - Upgrade to [spring-boot-dependencies:2.5.0](https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-dependencies/2.5.0/spring-boot-dependencies-2.5.0.pom). From 9f309566d50c3deb152a7084ff164d830100a981 Mon Sep 17 00:00:00 2001 From: Yi Liu Date: Tue, 20 Jul 2021 15:44:14 +0800 Subject: [PATCH 3/3] add ut --- .../converter/EventHubMessageConverterTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/sdk/spring/azure-spring-integration-eventhubs/src/test/java/com/azure/spring/integration/eventhub/converter/EventHubMessageConverterTest.java b/sdk/spring/azure-spring-integration-eventhubs/src/test/java/com/azure/spring/integration/eventhub/converter/EventHubMessageConverterTest.java index aecbecba6b5a..4f2a9bba3949 100644 --- a/sdk/spring/azure-spring-integration-eventhubs/src/test/java/com/azure/spring/integration/eventhub/converter/EventHubMessageConverterTest.java +++ b/sdk/spring/azure-spring-integration-eventhubs/src/test/java/com/azure/spring/integration/eventhub/converter/EventHubMessageConverterTest.java @@ -8,10 +8,12 @@ import com.azure.spring.integration.core.converter.AzureMessageConverter; import com.azure.spring.integration.test.support.UnaryAzureMessageConverterTest; import org.junit.jupiter.api.Test; +import org.springframework.integration.support.MessageBuilder; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; import org.springframework.util.LinkedMultiValueMap; +import java.nio.charset.StandardCharsets; import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.Arrays; @@ -20,6 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.springframework.messaging.support.NativeMessageHeaderAccessor.NATIVE_HEADERS; @@ -47,6 +50,15 @@ protected void assertMessageHeadersEqual(EventData azureMessage, Message mess assertEquals(azureMessage.getProperties().get(headerProperties), message.getHeaders().get(headerProperties)); } + @Test + public void testNonUtf8DecodingPayload() { + String utf16Payload = new String(payload.getBytes(), StandardCharsets.UTF_16); + Message message = MessageBuilder.withPayload(utf16Payload).build(); + EventData azureMessage = getConverter().fromMessage(message, getTargetClass()); + assertEquals(utf16Payload, azureMessage.getBodyAsString()); + assertNotEquals(payload, azureMessage.getBodyAsString()); + } + private static class MyEventHubMessageConverter extends EventHubMessageConverter { public void setCustomHeaders(MessageHeaders headers, EventData azureMessage) {