code: @Override
      public void setHeaders(Map<String, String> headers) {
          if (headers == null || headers.isEmpty()) {
              this._headers = null;
          } else {
              if (this._headers == null) {
                  this._headers = new HashMap<String, String>(headers);
              } else {
                  // we want to replace what we had with the new headers
                  this._headers.clear();
                  this._headers.putAll(headers);
              }
          }
      }
docs: Sets headers that will be sent with the message when the message gets delivered.
  This completely replaces any existing headers already associated with this message.
  Note that the given name/value pairs will be copied to an internal map.
  If the given map is null or empty, this message's internal map will be destroyed
  and {@link #getHeaders()} will return an empty map.
  
  Note that the header values are all expected to be strings.
  
  @param headers name/value properties