PROTON-2454 Clear body when bodySections is called in all cases
Adding a collection of body sections should clear any previous singular
or collection assigned value always.
diff --git a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/impl/ClientMessage.java b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/impl/ClientMessage.java
index 0bfc729..35b336e 100644
--- a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/impl/ClientMessage.java
+++ b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/impl/ClientMessage.java
@@ -650,13 +650,14 @@
public ClientMessage<E> bodySections(Collection<Section<?>> sections) {
if (sections == null || sections.isEmpty()) {
bodySections = null;
- body = null;
} else {
List<Section<?>> result = new ArrayList<>(sections.size());
sections.forEach(section -> result.add(validateBodySections(messageFormat, result, section)));
bodySections = result;
}
+ body = null; // Body is always cleared by this assignment.
+
return this;
}
diff --git a/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/impl/ClientMessageTest.java b/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/impl/ClientMessageTest.java
index e1fee22..1a695b2 100644
--- a/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/impl/ClientMessageTest.java
+++ b/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/impl/ClientMessageTest.java
@@ -534,6 +534,24 @@
}
@Test
+ public void testReplaceOriginalWithSetBodySectionClearsOriginal() {
+ ClientMessage<Object> message = ClientMessage.create();
+
+ message.body("string"); // AmqpValue
+
+ List<Section<?>> expected = new ArrayList<>();
+ expected.add(new Data(new byte[] { 0 }));
+ expected.add(new Data(new byte[] { 1 }));
+
+ assertEquals("string", message.body());
+ assertEquals(1, message.bodySections().size());
+
+ message.bodySections(expected);
+
+ assertEquals(expected.size(), message.bodySections().size());
+ }
+
+ @Test
public void testReplaceOriginalWithSetBodySectionDoesThrowValidationErrorIfInValid() {
ClientMessage<Object> message = ClientMessage.create();