@Override
 public void send(Message<?> message) {
   SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.wrap(message);
   String destination = headers.getDestination();
   destination = (destination != null) ? destination : getRequiredDefaultDestination();
   doSend(destination, message);
 }
  @Override
  protected void doSend(String destination, Message<?> message) {
    Assert.notNull(destination, "Destination must not be null");

    SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.wrap(message);
    headers.setDestination(destination);
    headers.setMessageTypeIfNotSet(SimpMessageType.MESSAGE);
    message = MessageBuilder.withPayload(message.getPayload()).setHeaders(headers).build();

    long timeout = this.sendTimeout;
    boolean sent =
        (timeout >= 0)
            ? this.messageChannel.send(message, timeout)
            : this.messageChannel.send(message);

    if (!sent) {
      throw new MessageDeliveryException(
          message,
          "failed to send message to destination '" + destination + "' within timeout: " + timeout);
    }
  }