55import java .util .HashMap ;
66import java .util .Map ;
77import java .util .Objects ;
8+ import java .util .Optional ;
89import java .util .StringJoiner ;
910
1011/**
@@ -24,17 +25,21 @@ public final class Message {
2425 */
2526 public static final String HEADER_CORRELATION_ID = "cid" ;
2627
28+ /**
29+ * This header represents sender address of type {@link Address}. It's an address of message
30+ * originator. This header is optional.
31+ */
32+ public static final String HEADER_SENDER = "sender" ;
33+
2734 private Map <String , String > headers = Collections .emptyMap ();
2835 private Object data ;
29- private Address sender ;
3036
3137 /** Instantiates empty message for deserialization purpose. */
3238 Message () {}
3339
3440 private Message (Builder builder ) {
3541 this .data = builder .data ;
3642 this .headers = Collections .unmodifiableMap (Objects .requireNonNull (builder .headers ));
37- this .sender = builder .sender ;
3843 }
3944
4045 /**
@@ -114,7 +119,7 @@ public static Message from(Message message) {
114119 * @return a builder with initial data and headers from the message
115120 */
116121 public static Builder with (Message message ) {
117- return withData (message .data ).headers (message .headers ). sender ( message . sender ) ;
122+ return withData (message .data ).headers (message .headers );
118123 }
119124
120125 /**
@@ -180,13 +185,12 @@ public <T> T data() {
180185 * @return address
181186 */
182187 public Address sender () {
183- return sender ;
188+ return Optional . ofNullable ( header ( HEADER_SENDER )). map ( Address :: from ). orElse ( null ) ;
184189 }
185190
186191 @ Override
187192 public String toString () {
188193 return new StringJoiner (", " , Message .class .getSimpleName () + "[" , "]" )
189- .add ("sender=" + sender )
190194 .add ("headers=" + headers )
191195 .add ("data=" + data )
192196 .toString ();
@@ -196,7 +200,6 @@ public static class Builder {
196200
197201 private Map <String , String > headers = new HashMap <>();
198202 private Object data ;
199- private Address sender ;
200203
201204 private Builder () {}
202205
@@ -236,8 +239,7 @@ public Builder correlationId(String correlationId) {
236239 }
237240
238241 public Builder sender (Address sender ) {
239- this .sender = sender ;
240- return this ;
242+ return header (HEADER_SENDER , sender .toString ());
241243 }
242244
243245 public Message build () {
0 commit comments