From 1a285aacc27c6e20f6187fde5945cafde0ba14e2 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Tue, 18 Feb 2025 06:37:58 +0100 Subject: [PATCH] chore(service-bus): deprecate service-bus encoding message-context extension --- .../AzureServiceBusMessageRouter.cs | 29 +++++++++++++++++-- .../Extensions/MessageContextExtensions.cs | 2 ++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/Arcus.Messaging.Abstractions.ServiceBus/MessageHandling/AzureServiceBusMessageRouter.cs b/src/Arcus.Messaging.Abstractions.ServiceBus/MessageHandling/AzureServiceBusMessageRouter.cs index 452f5450..356cb90a 100644 --- a/src/Arcus.Messaging.Abstractions.ServiceBus/MessageHandling/AzureServiceBusMessageRouter.cs +++ b/src/Arcus.Messaging.Abstractions.ServiceBus/MessageHandling/AzureServiceBusMessageRouter.cs @@ -272,8 +272,7 @@ private async Task TryRouteMessageWithPotentialFallback return MessageProcessingResult.Failure(message.MessageId, CannotFindMatchedHandler, "Failed to process message in the message pump as no message handler is registered in the dependency container"); } - Encoding encoding = messageContext.GetMessageEncodingProperty(Logger); - string messageBody = encoding.GetString(message.Body.ToArray()); + string messageBody = LoadMessageBody(message, messageContext); bool hasGoneThroughMessageHandler = false; foreach (MessageHandler messageHandler in messageHandlers) @@ -335,6 +334,32 @@ private async Task TryRouteMessageWithPotentialFallback } } + private static string LoadMessageBody(ServiceBusReceivedMessage message, AzureServiceBusMessageContext context) + { + Encoding encoding = DetermineEncoding(); + string messageBody = encoding.GetString(message.Body.ToArray()); + + return messageBody; + + Encoding DetermineEncoding() + { + Encoding fallbackEncoding = Encoding.UTF8; + + if (context.Properties.TryGetValue(PropertyNames.Encoding, out object encodingNameObj) + && encodingNameObj is string encodingName + && !string.IsNullOrWhiteSpace(encodingName)) + { + EncodingInfo foundEncoding = + Encoding.GetEncodings() + .FirstOrDefault(e => e.Name.Equals(encodingName, StringComparison.OrdinalIgnoreCase)); + + return foundEncoding?.GetEncoding() ?? fallbackEncoding; + } + + return fallbackEncoding; + } + } + private async Task DeadLetterMessageNoHandlerRegisteredAsync(ServiceBusReceiver messageReceiver, ServiceBusReceivedMessage message, AzureServiceBusMessageContext messageContext) { if (messageReceiver != null) diff --git a/src/Arcus.Messaging.ServiceBus.Core/Extensions/MessageContextExtensions.cs b/src/Arcus.Messaging.ServiceBus.Core/Extensions/MessageContextExtensions.cs index b777113a..ced1a88d 100644 --- a/src/Arcus.Messaging.ServiceBus.Core/Extensions/MessageContextExtensions.cs +++ b/src/Arcus.Messaging.ServiceBus.Core/Extensions/MessageContextExtensions.cs @@ -17,6 +17,7 @@ public static class MessageContextExtensions /// Gets the encoding property value in the messaging context, using UTF-8 as default if no such encoding value can be retrieved. /// /// The context of the message. + [Obsolete("Will be removed in v3.0, please use the " + nameof(PropertyNames.Encoding) + " to extract the encoding yourself from the message context")] public static Encoding GetMessageEncodingProperty(this MessageContext messageContext) { Encoding encoding = GetMessageEncodingProperty(messageContext, NullLogger.Instance); @@ -28,6 +29,7 @@ public static Encoding GetMessageEncodingProperty(this MessageContext messageCon /// /// The context of the message. /// + [Obsolete("Will be removed in v3.0, please use the " + nameof(PropertyNames.Encoding) + " to extract the encoding yourself from the message context")] public static Encoding GetMessageEncodingProperty(this MessageContext messageContext, ILogger logger) { if (messageContext is null)