クラス 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) コピーする既存のメッセージのヘッダーを受け入れるコンストラクター。メソッドのサマリー
修飾子と型メソッド説明voidcopyHeaders(MapSE<StringSE, ?> headersToCopy) 提供されたマップから名前と値のペアをコピーします。voidcopyHeadersIfAbsent(MapSE<StringSE, ?> headersToCopy) 提供されたマップから名前と値のペアをコピーします。protected MessageHeaderAccessorcreateAccessor(Message<?> message) 指定されたメッセージの「ネストされた」アクセサーを構築します。static MessageHeaderAccessorgetAccessor(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 StringSEgetDetailedPayloadLogMessage(ObjectSE payload) 指定された名前のヘッダーの値を取得します。getId()基になるMessageHeadersインスタンスを返します。static MessageHeaderAccessorgetMutableAccessor(Message<?> message) メッセージヘッダーを作成するために使用されるアクセサーの型と一致しようとする、またはメッセージをMessageHeaderAccessorインスタンスでラップする、指定されたメッセージの可変MessageHeaderAccessorを返します。getShortLogMessage(ObjectSE payload) ロギングのために簡潔なメッセージを返します。protected StringSEgetShortPayloadLogMessage(ObjectSE payload) boolean基になるメッセージヘッダーが変更済みとしてマークされているかどうかを確認します。boolean基になるヘッダーを引き続き変更できるかどうか。protected booleanprotected booleanisReadOnly(StringSE headerName) voidremoveHeader(StringSE headerName) 指定されたヘッダー名の値を削除します。voidremoveHeaders(StringSE... headerPatterns) 'headerPatterns' の配列を介して提供されるすべてのヘッダーを削除します。voidsetContentType(MimeType contentType) voidsetErrorChannel(MessageChannel errorChannel) voidsetErrorChannelName(StringSE errorChannelName) void指定されたヘッダー名の値を設定します。voidsetHeaderIfAbsent(StringSE name, ObjectSE value) ヘッダー名がまだ値に関連付けられていない場合にのみ、指定されたヘッダー名の値を設定します。voidデフォルトでは、getMessageHeaders()が呼び出されると、"this"MessageHeaderAccessorインスタンスを使用して基になるメッセージヘッダーを変更することはできなくなります。voidsetLeaveMutable(boolean leaveMutable) デフォルトでは、getMessageHeaders()が呼び出されると、"this"MessageHeaderAccessorインスタンスを使用して基になるメッセージヘッダーを変更することはできなくなり、返されるMessageHeadersは不変になります。protected voidsetModified(boolean modified) 基になるメッセージヘッダーを変更済みとしてマークします。voidsetReplyChannel(MessageChannel replyChannel) voidsetReplyChannelName(StringSE replyChannelName) toMap()基本となるヘッダー値のコピーをプレーンなMapSE オブジェクトとして返します。基になるヘッダー値のコピーをMessageHeadersオブジェクトとして返します。toString()protected voidverifyType(StringSE headerName, ObjectSE headerValue)
フィールドの詳細
DEFAULT_CHARSET
ヘッダーに使用されるデフォルトの文字セット。
コンストラクターの詳細
MessageHeaderAccessor
public MessageHeaderAccessor()新しいヘッダーを作成するコンストラクター。MessageHeaderAccessor
コピーする既存のメッセージのヘッダーを受け入れるコンストラクター。- パラメーター:
message- ヘッダーをコピーするメッセージ、ない場合はnull
メソッドの詳細
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
基本となるヘッダー値のコピーをプレーンなMapSE オブジェクトとして返します。このメソッドは何度も呼び出すことができ、その間に変更を加えると、新しい呼び出しごとに現在のヘッダー値の新しいコピーが返されます。
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- 必要なアクセサー型 (またはnullfor 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- 必要なアクセサー型 (またはnullfor any)- 戻り値:
- 指定された型のアクセサーインスタンス。存在しない場合は
null - 導入:
- 4.1
getMutableAccessor
メッセージヘッダーを作成するために使用されるアクセサーの型と一致しようとする、またはメッセージをMessageHeaderAccessorインスタンスでラップする、指定されたメッセージの可変MessageHeaderAccessorを返します。これは、ダウンストリーム処理のためにアクセサー型を保持しながら、汎用コードでヘッダーを更新する必要がある場合のためです。
- 戻り値:
- 必要な型のアクセサー (非
null) - 導入:
- 4.1