クラス MessageHeaderAccessor

java.lang.ObjectSE
org.springframework.messaging.support.MessageHeaderAccessor
既知の直属サブクラス
NativeMessageHeaderAccessor

public class MessageHeaderAccessor extends ObjectSE
特定のヘッダーに強く型付けされたアクセサー、Message にヘッダーを可変のままにする機能、id および timestamp ヘッダーの自動生成を抑制するオプションなどの追加機能を提供する MessageHeaders のラッパー。NativeMessageHeaderAccessor などのサブクラスは、プロトコル固有のヘッダーだけでなく、処理と外部ソースヘッダーの管理をサポートします。

以下は、MessageHeaderAccessor またはそのサブクラスの 1 つを介してヘッダーを初期化し、Message を作成してから、場合によっては別のコンポーネントからアクセサーを再取得するワークフローです。

 // Create a message with headers
 MessageHeaderAccessor accessor = new MessageHeaderAccessor();
 accessor.setHeader("foo", "bar");
 MessageHeaders headers = accessor.getMessageHeaders();
 Message message = MessageBuilder.createMessage("payload", headers);

 // Later on
 MessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message);
 Assert.notNull(accessor, "No MessageHeaderAccessor");
 

上記が機能するためには、参加しているすべてのコンポーネントが MessageHeaders を使用してヘッダーを作成、アクセス、変更する必要があります。そうしないと、getAccessor(Message, Class) は null を返します。以下は、ヘッダーが作成されて変更可能のままにされ、おそらく別のコンポーネントによって変更され、最終的に別のスレッドでアクセスされる前に不変にされる方法を示すワークフローです。

 // Create a message with mutable headers
 MessageHeaderAccessor accessor = new MessageHeaderAccessor();
 accessor.setHeader("foo", "bar");
 accessor.setLeaveMutable(true);
 MessageHeaders headers = accessor.getMessageHeaders();
 Message message = MessageBuilder.createMessage("payload", headers);

 // Later on
 MessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message);
 if (accessor.isMutable()) {
     // It's mutable, just change the headers
     accessor.setHeader("bar", "baz");
 }
 else {
     // It's not, so get a mutable copy, change and re-create
     accessor = MessageHeaderAccessor.getMutableAccessor(message);
     accessor.setHeader("bar", "baz");
     accessor.setLeaveMutable(true); // leave mutable again or not?
     message = MessageBuilder.createMessage(message.getPayload(), accessor);
 }

 // Make the accessor immutable
 MessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message);
 accessor.setImmutable();
 
導入:
4.0
作成者:
Rossen Stoyanchev, Juergen Hoeller
  • フィールドの詳細

    • DEFAULT_CHARSET

      public static final CharsetSE DEFAULT_CHARSET
      ヘッダーに使用されるデフォルトの文字セット。
  • コンストラクターの詳細

    • MessageHeaderAccessor

      public MessageHeaderAccessor()
      新しいヘッダーを作成するコンストラクター。
    • MessageHeaderAccessor

      public MessageHeaderAccessor(@Nullable Message<?> message)
      コピーする既存のメッセージのヘッダーを受け入れるコンストラクター。
      パラメーター:
      message - ヘッダーをコピーするメッセージ、ない場合は null 
  • メソッドの詳細

    • createAccessor

      protected MessageHeaderAccessor createAccessor(Message<?> message)
      指定されたメッセージの「ネストされた」アクセサーを構築します。
      パラメーター:
      message - 新しいアクセサーを構築するためのメッセージ
      戻り値:
      ネストされたアクセサー (通常は特定のサブクラス)
    • setLeaveMutable

      public void setLeaveMutable(boolean leaveMutable)
      デフォルトでは、getMessageHeaders() が呼び出されると、"this"MessageHeaderAccessor インスタンスを使用して基になるメッセージヘッダーを変更することはできなくなり、返される MessageHeaders は不変になります。

      ただし、これが true に設定されている場合、返される(基になる) MessageHeaders インスタンスは変更可能なままです。さらに変更を加えるには、引き続き同じアクセサーインスタンスを使用するか、次の方法で再度取得します。
      MessageHeaderAccessor.getAccessor(Message, Class)

      変更が完了したら、setImmutable() を使用してそれ以上変更されないようにします。このメカニズムの使用目的は、単一スレッド内でのメッセージの初期化です。

      デフォルトでは、これは false に設定されています。

      導入:
      4.1
    • setImmutable

      public void setImmutable()
      デフォルトでは、getMessageHeaders() が呼び出されると、"this"MessageHeaderAccessor インスタンスを使用して基になるメッセージヘッダーを変更することはできなくなります。ただし、setLeaveMutable(boolean) を使用する場合、このメソッドは、MessageHeaders インスタンスを変更する必要がなくなる時期を明示的に示すために必要です。
      導入:
      4.1
    • isMutable

      public boolean isMutable()
      基になるヘッダーを引き続き変更できるかどうか。
      導入:
      4.1
    • setModified

      protected void setModified(boolean modified)
      基になるメッセージヘッダーを変更済みとしてマークします。
      パラメーター:
      modified - 通常、フラグをリセットするには true または false 
      導入:
      4.1
    • isModified

      public boolean isModified()
      基になるメッセージヘッダーが変更済みとしてマークされているかどうかを確認します。
      戻り値:
      フラグが設定されている場合は true、それ以外の場合は false 
    • getMessageHeaders

      public MessageHeaders getMessageHeaders()
      基になる MessageHeaders インスタンスを返します。

      setLeaveMutable(boolean) が true に設定されていない限り、この呼び出しの後、ヘッダーは不変であり、このアクセサーはヘッダーを変更できなくなります。

      このメソッドは、複数回呼び出された場合、常に同じ MessageHeaders インスタンスを返します。基になるヘッダーのコピーを取得するには、代わりに toMessageHeaders() または toMap() を使用します。

      導入:
      4.1
    • toMessageHeaders

      public MessageHeaders toMessageHeaders()
      基になるヘッダー値のコピーを MessageHeaders オブジェクトとして返します。

      このメソッドは何度も呼び出すことができ、その間に変更を加えると、新しい呼び出しごとに現在のヘッダー値の新しいコピーが返されます。

      導入:
      4.1
    • toMap

      public MapSE<StringSE,ObjectSE> toMap()
      基本となるヘッダー値のコピーをプレーンな MapSE オブジェクトとして返します。

      このメソッドは何度も呼び出すことができ、その間に変更を加えると、新しい呼び出しごとに現在のヘッダー値の新しいコピーが返されます。

    • getHeader

      @Nullable public ObjectSE getHeader(StringSE headerName)
      指定された名前のヘッダーの値を取得します。
      パラメーター:
      headerName - ヘッダーの名前
      戻り値:
      関連する値。見つからない場合は null 
    • setHeader

      public void setHeader(StringSE name, @Nullable ObjectSE value)
      指定されたヘッダー名の値を設定します。

      指定された値が null の場合、ヘッダーは削除されます。

    • verifyType

      protected void verifyType(@Nullable StringSE headerName, @Nullable ObjectSE headerValue)
    • setHeaderIfAbsent

      public void setHeaderIfAbsent(StringSE name, ObjectSE value)
      ヘッダー名がまだ値に関連付けられていない場合にのみ、指定されたヘッダー名の値を設定します。
    • removeHeader

      public void removeHeader(StringSE headerName)
      指定されたヘッダー名の値を削除します。
    • removeHeaders

      public void removeHeaders(StringSE... headerPatterns)
      'headerPatterns' の配列を介して提供されるすべてのヘッダーを削除します。

      名前が示すように、配列にはヘッダー名の単純な一致パターンが含まれる場合があります。サポートされているパターンスタイルは、"xxx*"、"*xxx"、"*xxx*"、"xxx* yyy" です。

    • copyHeaders

      public void copyHeaders(@Nullable MapSE<StringSE,?> headersToCopy)
      提供されたマップから名前と値のペアをコピーします。

      この操作は既存の値を上書きします。値の上書きを回避するには、copyHeadersIfAbsent(Map) を使用してください。

    • copyHeadersIfAbsent

      public void copyHeadersIfAbsent(@Nullable MapSE<StringSE,?> headersToCopy)
      提供されたマップから名前と値のペアをコピーします。

      この操作では、既存の値上書きされません

    • isReadOnly

      protected boolean isReadOnly(StringSE headerName)
    • getId

      @Nullable public UUIDSE getId()
    • getTimestamp

      @Nullable public LongSE getTimestamp()
    • setContentType

      public void setContentType(MimeType contentType)
    • getContentType

      @Nullable public MimeType getContentType()
    • setReplyChannelName

      public void setReplyChannelName(StringSE replyChannelName)
    • setReplyChannel

      public void setReplyChannel(MessageChannel replyChannel)
    • getReplyChannel

      @Nullable public ObjectSE getReplyChannel()
    • setErrorChannelName

      public void setErrorChannelName(StringSE errorChannelName)
    • setErrorChannel

      public void setErrorChannel(MessageChannel errorChannel)
    • getErrorChannel

      @Nullable public ObjectSE getErrorChannel()
    • getShortLogMessage

      public StringSE getShortLogMessage(ObjectSE payload)
      ロギングのために簡潔なメッセージを返します。
      パラメーター:
      payload - ヘッダーに対応するペイロード。
      戻り値:
      メッセージ
    • getDetailedLogMessage

      public StringSE getDetailedLogMessage(@Nullable ObjectSE payload)
      ロギングの目的で、より詳細なメッセージを返します。
      パラメーター:
      payload - ヘッダーに対応するペイロード。
      戻り値:
      メッセージ
    • getShortPayloadLogMessage

      protected StringSE getShortPayloadLogMessage(ObjectSE payload)
    • getDetailedPayloadLogMessage

      protected StringSE getDetailedPayloadLogMessage(@Nullable ObjectSE payload)
    • isReadableContentType

      protected boolean isReadableContentType()
    • toString

      public StringSE toString()
      オーバーライド:
      クラス ObjectSEtoString 
    • getAccessor

      @Nullable public static MessageHeaderAccessor getAccessor(Message<?> message)
      指定された Message のヘッダーの作成に使用された元の MessageHeaderAccessor を返します。または、null が利用できない場合、またはその型が必要な型と一致しない場合は、null を返します。

      これは、アクセサーの存在が強く期待される場合(アサーションが続く)、またはそれ以外の場合にアクセサーが作成される場合です。

      パラメーター:
      message - アクセサーを取得するメッセージ
      戻り値:
      指定された型のアクセサーインスタンス。存在しない場合は null 
      導入:
      5.1.19
    • getAccessor

      @Nullable public static <T extends MessageHeaderAccessor> T getAccessor(Message<?> message, @Nullable ClassSE<T> requiredType)
      指定された Message のヘッダーの作成に使用された元の MessageHeaderAccessor を返します。または、null が利用できない場合、またはその型が必要な型と一致しない場合は、null を返します。

      これは、アクセサーの存在が強く期待される場合(アサーションが続く)、またはそれ以外の場合にアクセサーが作成される場合です。

      パラメーター:
      message - アクセサーを取得するメッセージ
      requiredType - 必要なアクセサー型 (または null for any)
      戻り値:
      指定された型のアクセサーインスタンス。存在しない場合は null 
      導入:
      4.1
    • getAccessor

      @Nullable public static <T extends MessageHeaderAccessor> T getAccessor(MessageHeaders messageHeaders, @Nullable ClassSE<T> requiredType)
      Message の代わりに MessageHeaders インスタンスを持つ getAccessor(org.springframework.messaging.Message, Class) のバリエーション。

      これは、完全なメッセージがまだ作成されていない場合があるためです。

      パラメーター:
      messageHeaders - アクセサーを取得するメッセージヘッダー
      requiredType - 必要なアクセサー型 (または null for any)
      戻り値:
      指定された型のアクセサーインスタンス。存在しない場合は null 
      導入:
      4.1
    • getMutableAccessor

      public static MessageHeaderAccessor getMutableAccessor(Message<?> message)
      メッセージヘッダーを作成するために使用されるアクセサーの型と一致しようとする、またはメッセージを MessageHeaderAccessor インスタンスでラップする、指定されたメッセージの可変 MessageHeaderAccessor を返します。

      これは、ダウンストリーム処理のためにアクセサー型を保持しながら、汎用コードでヘッダーを更新する必要がある場合のためです。

      戻り値:
      必要な型のアクセサー (非 null)
      導入:
      4.1