Skip to content

Commit 363215c

Browse files
Allow copying value/sequence message (Azure#25048)
1 parent b304a66 commit 363215c

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

sdk/servicebus/Azure.Messaging.ServiceBus/src/Primitives/ServiceBusMessage.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,25 @@ public ServiceBusMessage(BinaryData body) : this(body?.ToMemory() ?? default)
6363
public ServiceBusMessage(ServiceBusReceivedMessage receivedMessage)
6464
{
6565
Argument.AssertNotNull(receivedMessage, nameof(receivedMessage));
66-
if (!receivedMessage.AmqpMessage.Body.TryGetData(out IEnumerable<ReadOnlyMemory<byte>> dataBody))
66+
67+
AmqpMessageBody body = null;
68+
if (receivedMessage.AmqpMessage.Body.TryGetData(out IEnumerable<ReadOnlyMemory<byte>> dataBody))
69+
{
70+
body = AmqpMessageBody.FromData(MessageBody.FromReadOnlyMemorySegments(dataBody));
71+
}
72+
else if (receivedMessage.AmqpMessage.Body.TryGetValue(out object valueBody))
73+
{
74+
body = AmqpMessageBody.FromValue(valueBody);
75+
}
76+
else if (receivedMessage.AmqpMessage.Body.TryGetSequence(out IEnumerable<IList<object>> sequenceBody))
77+
{
78+
body = AmqpMessageBody.FromSequence(sequenceBody);
79+
}
80+
else
6781
{
6882
throw new NotSupportedException($"{receivedMessage.AmqpMessage.Body.BodyType} is not a supported message body type.");
6983
}
7084

71-
AmqpMessageBody body = new AmqpMessageBody(MessageBody.FromReadOnlyMemorySegments(dataBody));
7285
AmqpMessage = new AmqpAnnotatedMessage(body);
7386

7487
// copy properties

sdk/servicebus/Azure.Messaging.ServiceBus/tests/Message/MessageLiveTests.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,10 @@ public async Task CanSendValueSection(object value)
387387
Assert.That(
388388
() => received.Body,
389389
Throws.InstanceOf<NotSupportedException>());
390+
391+
var sendable = new ServiceBusMessage(received);
392+
sendable.GetRawAmqpMessage().Body.TryGetValue(out var sendData);
393+
Assert.AreEqual(value, sendData);
390394
}
391395
}
392396

@@ -433,6 +437,10 @@ public async Task CanSendSequenceSection(IEnumerable<IList<object>> sequence)
433437
Assert.That(
434438
() => received.Body,
435439
Throws.InstanceOf<NotSupportedException>());
440+
441+
var sendable = new ServiceBusMessage(received);
442+
sendable.GetRawAmqpMessage().Body.TryGetSequence(out var sendData);
443+
Assert.AreEqual(sequence, sendData);
436444
}
437445
}
438446

0 commit comments

Comments
 (0)