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() 基本となるヘッダー値のコピーをプレーンな MapSE オブジェクトとして返します。 |
MessageHeaders | toMessageHeaders() 基になるヘッダー値のコピーを MessageHeaders オブジェクトとして返します。 |
StringSE | toString() |
protected void | verifyType(StringSE headerName, ObjectSE headerValue) |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, waitSE, waitSE, waitSEpublic 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()
MapSE オブジェクトとして返します。このメソッドは何度も呼び出すことができ、その間に変更を加えると、新しい呼び出しごとに現在のヘッダー値の新しいコピーが返されます。
@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)