クラス MessageHeaderAccessor
- 既知の直属サブクラス
NativeMessageHeaderAccessor
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
フィールドのサマリー
フィールドコンストラクターの概要
コンストラクターコンストラクター説明新しいヘッダーを作成するコンストラクター。MessageHeaderAccessor
(Message<?> message) コピーする既存のメッセージのヘッダーを受け入れるコンストラクター。メソッドのサマリー
修飾子と型メソッド説明void
copyHeaders
(MapSE<StringSE, ?> headersToCopy) 提供されたマップから名前と値のペアをコピーします。void
copyHeadersIfAbsent
(MapSE<StringSE, ?> headersToCopy) 提供されたマップから名前と値のペアをコピーします。protected MessageHeaderAccessor
createAccessor
(Message<?> message) 指定されたメッセージの「ネストされた」アクセサーを構築します。static MessageHeaderAccessor
プレーンなMap
SE からインスタンスを作成します。static MessageHeaderAccessor
fromMessageHeaders
(MessageHeaders headers) 既存のMessageHeaders
インスタンスからインスタンスを作成します。static MessageHeaderAccessor
getAccessor
(Message<?> message) 指定されたMessage
のヘッダーの作成に使用された元のMessageHeaderAccessor
を返します。または、null
が利用できない場合、またはその型が必要な型と一致しない場合は、null
を返します。static <T extends MessageHeaderAccessor>
TgetAccessor
(Message<?> message, ClassSE<T> requiredType) 指定されたMessage
のヘッダーの作成に使用された元のMessageHeaderAccessor
を返します。または、null
が利用できない場合、またはその型が必要な型と一致しない場合は、null
を返します。static <T extends MessageHeaderAccessor>
TgetAccessor
(MessageHeaders messageHeaders, ClassSE<T> requiredType) Message
の代わりにMessageHeaders
インスタンスを持つgetAccessor(org.springframework.messaging.Message, Class)
のバリエーション。getDetailedLogMessage
(ObjectSE payload) ロギングの目的で、より詳細なメッセージを返します。protected StringSE
getDetailedPayloadLogMessage
(ObjectSE payload) 指定された名前のヘッダーの値を取得します。getId()
基になるMessageHeaders
インスタンスを返します。static MessageHeaderAccessor
getMutableAccessor
(Message<?> message) メッセージヘッダーを作成するために使用されるアクセサーの型と一致しようとする、またはメッセージをMessageHeaderAccessor
インスタンスでラップする、指定されたメッセージの可変MessageHeaderAccessor
を返します。getShortLogMessage
(ObjectSE payload) ロギングのために簡潔なメッセージを返します。protected StringSE
getShortPayloadLogMessage
(ObjectSE payload) boolean
基になるメッセージヘッダーが変更済みとしてマークされているかどうかを確認します。boolean
基になるヘッダーを引き続き変更できるかどうか。protected boolean
protected boolean
isReadOnly
(StringSE headerName) void
removeHeader
(StringSE headerName) 指定されたヘッダー名の値を削除します。void
removeHeaders
(StringSE... headerPatterns) 'headerPatterns' の配列を介して提供されるすべてのヘッダーを削除します。void
setContentType
(MimeType contentType) void
setErrorChannel
(MessageChannel errorChannel) void
setErrorChannelName
(StringSE errorChannelName) void
指定されたヘッダー名の値を設定します。void
setHeaderIfAbsent
(StringSE name, ObjectSE value) ヘッダー名がまだ値に関連付けられていない場合にのみ、指定されたヘッダー名の値を設定します。void
デフォルトでは、getMessageHeaders()
が呼び出されると、"this"
MessageHeaderAccessor
インスタンスを使用して基になるメッセージヘッダーを変更することはできなくなります。void
setLeaveMutable
(boolean leaveMutable) デフォルトでは、getMessageHeaders()
が呼び出されると、"this"
MessageHeaderAccessor
インスタンスを使用して基になるメッセージヘッダーを変更することはできなくなり、返されるMessageHeaders
は不変になります。protected void
setModified
(boolean modified) 基になるメッセージヘッダーを変更済みとしてマークします。void
setReplyChannel
(MessageChannel replyChannel) void
setReplyChannelName
(StringSE replyChannelName) toMap()
基本となるヘッダー値のコピーをプレーンなMap
SE オブジェクトとして返します。基になるヘッダー値のコピーをMessageHeaders
オブジェクトとして返します。toString()
protected void
verifyType
(StringSE headerName, ObjectSE headerValue)
フィールドの詳細
DEFAULT_CHARSET
ヘッダーに使用されるデフォルトの文字セット。
コンストラクターの詳細
MessageHeaderAccessor
public MessageHeaderAccessor()新しいヘッダーを作成するコンストラクター。MessageHeaderAccessor
コピーする既存のメッセージのヘッダーを受け入れるコンストラクター。- パラメーター:
message
- ヘッダーをコピーするメッセージ、ない場合はnull
メソッドの詳細
fromMap
プレーンなMap
SE からインスタンスを作成します。- パラメーター:
map
- 生のヘッダー- 導入:
- 6.2
fromMessageHeaders
既存のMessageHeaders
インスタンスからインスタンスを作成します。- パラメーター:
headers
- ヘッダー- 導入:
- 6.2
createAccessor
指定されたメッセージの「ネストされた」アクセサーを構築します。- パラメーター:
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
基になるMessageHeaders
インスタンスを返します。setLeaveMutable(boolean)
がtrue
に設定されていない限り、この呼び出しの後、ヘッダーは不変であり、このアクセサーはヘッダーを変更できなくなります。このメソッドは、複数回呼び出された場合、常に同じ
MessageHeaders
インスタンスを返します。基になるヘッダーのコピーを取得するには、代わりにtoMessageHeaders()
またはtoMap()
を使用します。- 導入:
- 4.1
toMessageHeaders
基になるヘッダー値のコピーをMessageHeaders
オブジェクトとして返します。このメソッドは何度も呼び出すことができ、その間に変更を加えると、新しい呼び出しごとに現在のヘッダー値の新しいコピーが返されます。
- 導入:
- 4.1
toMap
基本となるヘッダー値のコピーをプレーンなMap
SE オブジェクトとして返します。このメソッドは何度も呼び出すことができ、その間に変更を加えると、新しい呼び出しごとに現在のヘッダー値の新しいコピーが返されます。
getHeader
指定された名前のヘッダーの値を取得します。- パラメーター:
headerName
- ヘッダーの名前- 戻り値:
- 関連する値。見つからない場合は
null
setHeader
指定されたヘッダー名の値を設定します。指定された値が
null
の場合、ヘッダーは削除されます。verifyType
setHeaderIfAbsent
ヘッダー名がまだ値に関連付けられていない場合にのみ、指定されたヘッダー名の値を設定します。removeHeader
指定されたヘッダー名の値を削除します。removeHeaders
'headerPatterns' の配列を介して提供されるすべてのヘッダーを削除します。名前が示すように、配列にはヘッダー名の単純な一致パターンが含まれる場合があります。サポートされているパターンスタイルは、"xxx*"、"*xxx"、"*xxx*"、"xxx* yyy" です。
copyHeaders
提供されたマップから名前と値のペアをコピーします。この操作は既存の値を上書きします。値の上書きを回避するには、
copyHeadersIfAbsent(Map)
を使用してください。copyHeadersIfAbsent
提供されたマップから名前と値のペアをコピーします。この操作では、既存の値は上書きされません。
isReadOnly
getId
getTimestamp
setContentType
getContentType
setReplyChannelName
setReplyChannel
getReplyChannel
setErrorChannelName
setErrorChannel
getErrorChannel
getShortLogMessage
ロギングのために簡潔なメッセージを返します。- パラメーター:
payload
- ヘッダーに対応するペイロード。- 戻り値:
- メッセージ
getDetailedLogMessage
ロギングの目的で、より詳細なメッセージを返します。- パラメーター:
payload
- ヘッダーに対応するペイロード。- 戻り値:
- メッセージ
getShortPayloadLogMessage
getDetailedPayloadLogMessage
isReadableContentType
protected boolean isReadableContentType()toString
getAccessor
指定された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
メッセージヘッダーを作成するために使用されるアクセサーの型と一致しようとする、またはメッセージをMessageHeaderAccessor
インスタンスでラップする、指定されたメッセージの可変MessageHeaderAccessor
を返します。これは、ダウンストリーム処理のためにアクセサー型を保持しながら、汎用コードでヘッダーを更新する必要がある場合のためです。
- 戻り値:
- 必要な型のアクセサー (非
null
) - 導入:
- 4.1