クラス MessageListenerAdapter

java.lang.ObjectSE
org.springframework.jms.listener.adapter.AbstractAdaptableMessageListener
org.springframework.jms.listener.adapter.MessageListenerAdapter
実装されたすべてのインターフェース:
MessageListenerEESessionAwareMessageListener<MessageEE>SubscriptionNameProvider

public class MessageListenerAdapter extends AbstractAdaptableMessageListener implements SubscriptionNameProvider
柔軟なメッセージ型変換を使用して、リフレクションを介してメッセージの処理をターゲットリスナーメソッドに委譲するメッセージリスナーアダプター。JMS API から完全に独立して、リスナーメソッドがメッセージコンテンツ型を操作できるようにします。

デフォルトでは、受信 JMS メッセージのコンテンツはターゲットリスナーメソッドに渡される前に抽出され、ターゲットメソッドが生の MessageEE の代わりに文字列やバイト配列などのメッセージコンテンツ型を操作できるようにします。メッセージ型の変換は Spring JMS MessageConverter に委譲されます。デフォルトでは、SimpleMessageConverter が使用されます。(このような自動メッセージ変換を行わない場合は、必ず MessageConverter を null に設定してください。)

ターゲットリスナーメソッドが null 以外のオブジェクト(通常は String またはバイト配列などのメッセージコンテンツ型のオブジェクト)を返す場合、JMS Message にラップされ、レスポンスの宛先(JMS の「返信先」の宛先)に送信されます。または specified default destination)。

: レスポンスメッセージの送信は、SessionAwareMessageListener エントリポイントを使用している場合にのみ使用できます(通常、Spring メッセージリスナーコンテナーを介して)。標準の JMS MessageListenerEE としての使用は、レスポンスメッセージの生成をサポートしていませ

このアダプタークラスに準拠するメソッドシグネチャーの例を以下に示します。この最初の例では、すべての Message 型を処理し、各 Message 型の内容を引数として渡します。これらのメソッドはすべて void を返すため、Message は返送されません。

public interface MessageContentsDelegate {
    void handleMessage(String text);
    void handleMessage(Map map);
    void handleMessage(byte[] bytes);
    void handleMessage(Serializable obj);
 }
次の例では、すべての Message 型を処理し、実際の(未加工の) Message を引数として渡しています。繰り返しますが、これらのメソッドはすべて void を返すため、Message は返送されません。
public interface RawMessageDelegate {
    void handleMessage(TextMessage message);
    void handleMessage(MapMessage message);
    void handleMessage(BytesMessage message);
    void handleMessage(ObjectMessage message);
 }
この次の例は、TextMessagesEE の String コンテンツを使用するだけの Message デリゲートを示しています。Message 処理メソッドの名前が original とどのように異なるかにも注意してください(これは、付随する Bean 定義で構成する必要があります)。この場合も、メソッドが void を返すため、Message は返送されません。
public interface TextMessageContentDelegate {
    void onMessage(String text);
 }
この最後の例は、TextMessagesEE の String コンテンツを使用するだけの Message デリゲートを示しています。このメソッドの戻り値の型が String であることに注意してください。これにより、構成済みの MessageListenerAdapter がレスポンスとして TextMessageEE を送信します。
public interface ResponsiveTextMessageContentDelegate {
    String handleMessage(String text);
 }
詳細な例と説明については、このクラス(および付随する XML 構成)を詳細に説明している Spring リファレンスドキュメントを参照してください。
導入:
2.0
作成者:
Juergen Hoeller
関連事項:
  • フィールドの詳細

    • ORIGINAL_DEFAULT_LISTENER_METHOD

      public static final StringSE ORIGINAL_DEFAULT_LISTENER_METHOD
      デフォルトのリスナーメソッド "handleMessage" のすぐに使える値。
      関連事項:
  • コンストラクターの詳細

    • MessageListenerAdapter

      public MessageListenerAdapter()
      デフォルト設定で新しい MessageListenerAdapter を作成します。
    • MessageListenerAdapter

      public MessageListenerAdapter(ObjectSE delegate)
      指定されたデリゲートの新しい MessageListenerAdapter を作成します。
      パラメーター:
      delegate - デリゲートオブジェクト
  • メソッドの詳細

    • setDelegate

      public void setDelegate(ObjectSE delegate)
      リスニングするメッセージを委譲するターゲットオブジェクトを設定します。指定したリスナーメソッドは、このターゲットオブジェクトに存在する必要があります。

      明示的なデリゲートオブジェクトが指定されていない場合、リスナーメソッドは、このアダプターインスタンス(つまり、このアダプターのカスタムサブクラス)に存在し、リスナーメソッドを定義することが想定されています。

    • getDelegate

      protected ObjectSE getDelegate()
      リッスンしているデリゲートメッセージにターゲットオブジェクトを返します。
    • setDefaultListenerMethod

      public void setDefaultListenerMethod(StringSE defaultListenerMethod)
      特定のリスナーメソッドが決定されていない場合に、委譲先のデフォルトリスナーメソッドの名前を指定します。デフォルトの値は "handleMessage" です。
      関連事項:
    • getDefaultListenerMethod

      protected StringSE getDefaultListenerMethod()
      委譲先のデフォルトのリスナーメソッドの名前を返します。
    • onMessage

      public void onMessage(MessageEE message, @Nullable SessionEE session) throws JMSExceptionEE
      Spring SessionAwareMessageListener エントリポイント。

      メッセージ引数を適切に変換して、メッセージをターゲットリスナーメソッドに委譲します。ターゲットメソッドが null 以外のオブジェクトを返す場合は、JMS メッセージをラップして送り返します。

      次で指定:
      インターフェース SessionAwareMessageListener<MessageEE>onMessage 
      次で指定:
      クラス AbstractAdaptableMessageListeneronMessage 
      パラメーター:
      message - 受信 JMS メッセージ
      session - 操作する JMS セッション
      例外:
      JMSExceptionEE - JMS API メソッドによってスローされた場合
    • getSubscriptionName

      public StringSE getSubscriptionName()
      インターフェースからコピーされた説明: SubscriptionNameProvider
      このメッセージリスナーオブジェクトのサブスクリプション名を決定します。
      次で指定:
      インターフェース SubscriptionNameProvidergetSubscriptionName 
    • getListenerMethodName

      protected StringSE getListenerMethodName(MessageEE originalMessage, ObjectSE extractedMessage) throws JMSExceptionEE
      指定されたメッセージを処理することになっているリスナーメソッドの名前を決定します。

      デフォルトの実装は、構成されているデフォルトのリスナーメソッドがあれば、それを返すだけです。

      パラメーター:
      originalMessage - JMS リクエストメッセージ
      extractedMessage - 引数としてリスナーメソッドに渡される、変換された JMS リクエストメッセージ
      戻り値:
      リスナーメソッドの名前 (非 null)
      例外:
      JMSExceptionEE - JMS API メソッドによってスローされた場合
      関連事項:
    • buildListenerArguments

      protected ObjectSE[] buildListenerArguments(ObjectSE extractedMessage)
      ターゲットリスナーメソッドに渡される引数の配列を作成します。単一のメッセージオブジェクトから複数のメソッド引数を作成できるようにします。

      デフォルトの実装では、指定されたメッセージオブジェクトを唯一の要素として配列を構築します。つまり、抽出されたメッセージは、たとえそれが配列であっても、常に単一のメソッド引数に渡され、ターゲットメソッドには対応する配列の型の単一の引数が宣言されます。

      これをオーバーライドして、配列などの特別なメッセージコンテンツを異なる方法で処理することができます。たとえば、メッセージ配列の各要素を個別のメソッド引数として渡します。

      パラメーター:
      extractedMessage - メッセージの内容
      戻り値:
      リスナーメソッドに渡される引数の配列 (個別のメソッド引数に対応する配列の各要素)
    • invokeListenerMethod

      @Nullable protected ObjectSE invokeListenerMethod(StringSE methodName, ObjectSE[] arguments) throws JMSExceptionEE
      指定されたリスナーメソッドを呼び出します。
      パラメーター:
      methodName - リスナーメソッドの名前
      arguments - 渡されるメッセージ引数
      戻り値:
      リスナーメソッドから返された結果
      例外:
      JMSExceptionEE - JMS API メソッドによってスローされた場合
      関連事項: