|
16 | 16 |
|
17 | 17 | package org.springframework.integration.support;
|
18 | 18 |
|
| 19 | +import java.io.ByteArrayInputStream; |
| 20 | +import java.io.ByteArrayOutputStream; |
| 21 | +import java.io.IOException; |
| 22 | +import java.io.ObjectInputStream; |
| 23 | +import java.io.ObjectOutputStream; |
19 | 24 | import java.nio.ByteBuffer;
|
20 | 25 | import java.util.HashMap;
|
21 | 26 | import java.util.Map;
|
|
26 | 31 | import org.springframework.messaging.MessageHeaders;
|
27 | 32 |
|
28 | 33 | import static org.assertj.core.api.Assertions.assertThat;
|
| 34 | +import static org.assertj.core.api.Assertions.assertThatNoException; |
29 | 35 |
|
30 | 36 |
|
31 | 37 | /**
|
32 | 38 | * @author Stuart Williams
|
33 | 39 | * @author Nathan Kurtyka
|
| 40 | + * @author Mitchell McDonald |
34 | 41 | *
|
35 | 42 | * @since 4.2
|
36 | 43 | */
|
@@ -105,4 +112,34 @@ public void testMessageHeaderIsSerializable() {
|
105 | 112 | assertThat(mutableMessageBytes.getHeaders().getTimestamp()).isEqualTo(timestamp);
|
106 | 113 | }
|
107 | 114 |
|
| 115 | + @Test |
| 116 | + public void testMessageHeaderIsSerializableAndDeserializableWithNonSerializableValues() |
| 117 | + throws IOException, ClassNotFoundException { |
| 118 | + |
| 119 | + String payload = "payload"; |
| 120 | + |
| 121 | + Map<String, Object> headerMap = new HashMap<>(); |
| 122 | + headerMap.put("header1", "serializableValue"); |
| 123 | + headerMap.put("header2", new Object()); // Non-Serializable value |
| 124 | + |
| 125 | + MutableMessage<String> mutableMessage = new MutableMessage<>(payload, headerMap); |
| 126 | + |
| 127 | + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); |
| 128 | + ObjectOutputStream outputStream = new ObjectOutputStream(byteArrayOutputStream); |
| 129 | + outputStream.writeObject(mutableMessage); |
| 130 | + outputStream.flush(); |
| 131 | + |
| 132 | + ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); |
| 133 | + ObjectInputStream inputStream = new ObjectInputStream(byteArrayInputStream); |
| 134 | + Object deserializedObject = inputStream.readObject(); |
| 135 | + |
| 136 | + assertThat(deserializedObject).isInstanceOf(MutableMessage.class); |
| 137 | + MutableMessage<?> deserializedMessage = |
| 138 | + (MutableMessage<?>) deserializedObject; |
| 139 | + |
| 140 | + assertThat(deserializedMessage.getHeaders().get("header2")).isNull(); // Non-serializable value removed |
| 141 | + assertThat(deserializedMessage.getHeaders().get("header1")).isEqualTo("serializableValue"); |
| 142 | + assertThatNoException().isThrownBy(() -> deserializedMessage.getRawHeaders().put("header3", "newValue")); |
| 143 | + } |
| 144 | + |
108 | 145 | }
|
0 commit comments