/**
   * A variation of {@link #getAccessor(org.springframework.messaging.Message, Class)} with a {@code
   * MessageHeaders} instance instead of a {@code Message}.
   *
   * <p>This is for cases when a full message may not have been created yet.
   *
   * @return an accessor instance of the specified type, or {@code null} if none
   * @since 4.1
   */
  @SuppressWarnings("unchecked")
  public static <T extends MessageHeaderAccessor> T getAccessor(
      MessageHeaders messageHeaders, Class<T> requiredType) {

    if (messageHeaders instanceof MutableMessageHeaders) {
      MutableMessageHeaders mutableHeaders = (MutableMessageHeaders) messageHeaders;
      MessageHeaderAccessor headerAccessor = mutableHeaders.getMessageHeaderAccessor();
      if (requiredType.isAssignableFrom(headerAccessor.getClass())) {
        return (T) headerAccessor;
      }
    }
    return null;
  }