public class MessageHeaderAccessor extends ObjectSE
Message
にヘッダーを変更可能なままにする機能、id
および timesteamp
ヘッダーの自動生成を抑制するオプションなどの追加機能を提供する 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();
修飾子と型 | フィールドと説明 |
---|---|
static CharsetSE | DEFAULT_CHARSET ヘッダーに使用されるデフォルトの文字セット。 |
コンストラクターと説明 |
---|
MessageHeaderAccessor() 新しいヘッダーを作成するコンストラクター。 |
MessageHeaderAccessor(Message<?> message) コピーする既存のメッセージのヘッダーを受け入れるコンストラクター。 |
修飾子と型 | メソッドと説明 |
---|---|
void | copyHeaders(MapSE<StringSE,?> headersToCopy) 提供されたマップから名前と値のペアをコピーします。 |
void | copyHeadersIfAbsent(MapSE<StringSE,?> headersToCopy) 提供されたマップから名前と値のペアをコピーします。 |
protected MessageHeaderAccessor | createAccessor(Message<?> message) 指定されたメッセージの「ネストされた」アクセサーを構築します。 |
static MessageHeaderAccessor | getAccessor(Message<?> message) 指定された Message のヘッダーの作成に使用された元の MessageHeaderAccessor を返します。または、null が利用できない場合、またはその型が必要な型と一致しない場合は、null を返します。 |
static <T extends MessageHeaderAccessor> | getAccessor(Message<?> message, ClassSE<T> requiredType) 指定された Message のヘッダーの作成に使用された元の MessageHeaderAccessor を返します。または、null が利用できない場合、またはその型が必要な型と一致しない場合は、null を返します。 |
static <T extends MessageHeaderAccessor> | getAccessor(MessageHeaders messageHeaders, ClassSE<T> requiredType) Message の代わりに MessageHeaders インスタンスを持つ getAccessor(org.springframework.messaging.Message, Class) のバリエーション。 |
MimeType | getContentType() |
StringSE | getDetailedLogMessage(ObjectSE payload) ロギングの目的で、より詳細なメッセージを返します。 |
protected StringSE | getDetailedPayloadLogMessage(ObjectSE payload) |
ObjectSE | getErrorChannel() |
ObjectSE | getHeader(StringSE headerName) 指定された名前のヘッダーの値を取得します。 |
UUIDSE | getId() |
MessageHeaders | getMessageHeaders() 基になる MessageHeaders インスタンスを返します。 |
static MessageHeaderAccessor | getMutableAccessor(Message<?> message) メッセージヘッダーを作成するために使用されるアクセサーの型と一致しようとする、またはメッセージを MessageHeaderAccessor インスタンスでラップする、指定されたメッセージの可変 MessageHeaderAccessor を返します。 |
ObjectSE | getReplyChannel() |
StringSE | getShortLogMessage(ObjectSE payload) ロギングのために簡潔なメッセージを返します。 |
protected StringSE | getShortPayloadLogMessage(ObjectSE payload) |
LongSE | getTimestamp() |
boolean | isModified() 基になるメッセージヘッダーが変更済みとしてマークされているかどうかを確認します。 |
boolean | isMutable() 基になるヘッダーを引き続き変更できるかどうか。 |
protected boolean | isReadableContentType() |
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 | setHeader(StringSE name, ObjectSE value) 指定されたヘッダー名の値を設定します。 |
void | setHeaderIfAbsent(StringSE name, ObjectSE value) ヘッダー名がまだ値に関連付けられていない場合にのみ、指定されたヘッダー名の値を設定します。 |
void | setImmutable() デフォルトでは、 getMessageHeaders() が呼び出されると、"this" MessageHeaderAccessor インスタンスを使用して基になるメッセージヘッダーを変更することはできなくなります。 |
void | setLeaveMutable(boolean leaveMutable) デフォルトでは、 getMessageHeaders() が呼び出されると、"this" MessageHeaderAccessor インスタンスを使用して基になるメッセージヘッダーを変更することはできなくなり、返される MessageHeaders は不変になります。 |
protected void | setModified(boolean modified) 基になるメッセージヘッダーを変更済みとしてマークします。 |
void | setReplyChannel(MessageChannel replyChannel) |
void | setReplyChannelName(StringSE replyChannelName) |
MapSE<StringSE, ObjectSE> | toMap() 基本となるヘッダー値のコピーをプレーンな Map SE オブジェクトとして返します。 |
MessageHeaders | toMessageHeaders() 基になるヘッダー値のコピーを MessageHeaders オブジェクトとして返します。 |
StringSE | toString() |
protected void | verifyType(StringSE headerName, ObjectSE headerValue) |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, waitSE, waitSE, waitSE
public static final CharsetSE DEFAULT_CHARSET
protected MessageHeaderAccessor createAccessor(Message<?> message)
message
- 新しいアクセサーを構築するためのメッセージ public void setLeaveMutable(boolean leaveMutable)
getMessageHeaders()
が呼び出されると、"this"
MessageHeaderAccessor
インスタンスを使用して基になるメッセージヘッダーを変更することはできなくなり、返される MessageHeaders
は不変になります。 ただし、これが true
に設定されている場合、返される(基になる) MessageHeaders
インスタンスは変更可能なままです。さらに変更を加えるには、引き続き同じアクセサーインスタンスを使用するか、次の方法で再度取得します。
MessageHeaderAccessor.getAccessor(Message, Class)
変更が完了したら、setImmutable()
を使用してそれ以上変更されないようにします。このメカニズムの使用目的は、単一スレッド内でのメッセージの初期化です。
デフォルトでは、これは false
に設定されています。
public void setImmutable()
getMessageHeaders()
が呼び出されると、"this"
MessageHeaderAccessor
インスタンスを使用して基になるメッセージヘッダーを変更することはできなくなります。ただし、setLeaveMutable(boolean)
を使用する場合、このメソッドは、MessageHeaders
インスタンスを変更する必要がなくなる時期を明示的に示すために必要です。public boolean isMutable()
protected void setModified(boolean modified)
modified
- 通常、フラグをリセットするには true
または false
public boolean isModified()
true
、それ以外の場合は false
public MessageHeaders getMessageHeaders()
MessageHeaders
インスタンスを返します。setLeaveMutable(boolean)
が true
に設定されていない限り、この呼び出しの後、ヘッダーは不変であり、このアクセサーはヘッダーを変更できなくなります。
このメソッドは、複数回呼び出された場合、常に同じ MessageHeaders
インスタンスを返します。基になるヘッダーのコピーを取得するには、代わりに toMessageHeaders()
または toMap()
を使用します。
public MessageHeaders toMessageHeaders()
MessageHeaders
オブジェクトとして返します。このメソッドは何度も呼び出すことができ、その間に変更を加えると、新しい呼び出しごとに現在のヘッダー値の新しいコピーが返されます。
public MapSE<StringSE,ObjectSE> toMap()
Map
SE オブジェクトとして返します。このメソッドは何度も呼び出すことができ、その間に変更を加えると、新しい呼び出しごとに現在のヘッダー値の新しいコピーが返されます。
@Nullable public ObjectSE getHeader(StringSE headerName)
headerName
- ヘッダーの名前 null
public void setHeader(StringSE name, @Nullable ObjectSE value)
指定された値が null
の場合、ヘッダーは削除されます。
public void setHeaderIfAbsent(StringSE name, ObjectSE value)
public void removeHeader(StringSE headerName)
public void removeHeaders(StringSE... headerPatterns)
名前が示すように、配列にはヘッダー名の単純な一致パターンが含まれる場合があります。サポートされているパターンスタイルは、"xxx*"、"*xxx"、"*xxx*"、"xxx* yyy" です。
public void copyHeaders(@Nullable MapSE<StringSE,?> headersToCopy)
この操作は既存の値を上書きします。値の上書きを回避するには、copyHeadersIfAbsent(Map)
を使用してください。
public void copyHeadersIfAbsent(@Nullable MapSE<StringSE,?> headersToCopy)
この操作では、既存の値は上書きされません。
protected boolean isReadOnly(StringSE headerName)
public void setContentType(MimeType contentType)
public void setReplyChannelName(StringSE replyChannelName)
public void setReplyChannel(MessageChannel replyChannel)
public void setErrorChannelName(StringSE errorChannelName)
public void setErrorChannel(MessageChannel errorChannel)
public StringSE getShortLogMessage(ObjectSE payload)
payload
- ヘッダーに対応するペイロード。public StringSE getDetailedLogMessage(@Nullable ObjectSE payload)
payload
- ヘッダーに対応するペイロード。protected StringSE getDetailedPayloadLogMessage(@Nullable ObjectSE payload)
protected boolean isReadableContentType()
public StringSE toString()
ObjectSE
の toStringSE
@Nullable public static MessageHeaderAccessor getAccessor(Message<?> message)
Message
のヘッダーの作成に使用された元の MessageHeaderAccessor
を返します。または、null
が利用できない場合、またはその型が必要な型と一致しない場合は、null
を返します。これは、アクセサーの存在が強く期待される場合(アサーションが続く)、またはそれ以外の場合にアクセサーが作成される場合です。
message
- アクセサーを取得するメッセージ null
@Nullable public static <T extends MessageHeaderAccessor> T getAccessor(Message<?> message, @Nullable ClassSE<T> requiredType)
Message
のヘッダーの作成に使用された元の MessageHeaderAccessor
を返します。または、null
が利用できない場合、またはその型が必要な型と一致しない場合は、null
を返します。これは、アクセサーの存在が強く期待される場合(アサーションが続く)、またはそれ以外の場合にアクセサーが作成される場合です。
message
- アクセサーを取得するメッセージ requiredType
- 必要なアクセサー型 (または null
for any)null
@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
public static MessageHeaderAccessor getMutableAccessor(Message<?> message)
MessageHeaderAccessor
インスタンスでラップする、指定されたメッセージの可変 MessageHeaderAccessor
を返します。これは、ダウンストリーム処理のためにアクセサー型を保持しながら、汎用コードでヘッダーを更新する必要がある場合のためです。
null
)