パッケージ jakarta.websocket

アノテーションインターフェース OnMessage


@RetentionSE(RUNTIMESE) @TargetSE(METHODSE) public @interface OnMessage
このメソッドレベルのアノテーションを使用して、Java メソッドに受信 Web ソケットメッセージを受信させることができます。各 WebSocket エンドポイントには、ネイティブ Websocket メッセージ形式(テキスト、バイナリ、ピンポン)ごとに 1 つのメッセージ処理メソッドのみを含めることができます。このアノテーションを使用するメソッドは、以下で説明する型のパラメーターを持つことができます。そうしないと、コンテナーはデプロイ時にエラーを生成します。

許可されるパラメーターは次のとおりです。

  1. 次の選択肢のいずれか 1 つのみ
    • メソッドがテキストメッセージを処理している場合:
      • StringSE はメッセージ全体を受信します
      • その型に変換されたメッセージ全体を受信するための Java プリミティブまたはクラス
      • メッセージを部分的に受け取る文字列とブール値のペア
      • メッセージ全体をブロッキングストリームとして受信する ReaderSE
      • エンドポイントにテキストデコーダーがあるオブジェクトパラメーター(Decoder.Text または Decoder.TextStream)。
    • メソッドがバイナリメッセージを処理している場合:
      • メッセージ全体を受信する byte[] または ByteBufferSE
      • byte[] とブール値のペア、またはメッセージを部分的に受信する ByteBufferSE とブール値のペア
      • メッセージ全体をブロッキングストリームとして受信する InputStreamSE
      • エンドポイントにバイナリデコーダーがあるオブジェクトパラメーター(Decoder.Binary または Decoder.BinaryStream)。
    • メソッドがポンメッセージを処理している場合:
      • ポンメッセージを処理するための PongMessage
  2. サーバーエンドポイントの jakarta.websocket.server.PathParam アノテーションが付けられたゼロから n 文字列または Java プリミティブパラメーター。
  3. およびオプションの Session パラメーター

パラメーターは任意の順序でリストできます。

メソッドは非 void 戻り値型を持つ場合があります。その場合、Web ソケットランタイムはこれを Web ソケットメッセージとして解釈してピアに戻る必要があります。この戻り値型に許可される void 以外のデータ型は、String、ByteBuffer、byte[]、Java プリミティブまたは同等のクラス、エンコーダーが存在するものです。メソッドが Java プリミティブを戻り値として使用する場合、開発者がこのエンドポイントに設定された型のエンコーダーを提供しない限り、実装は Java プリミティブの標準 Java 文字列表現を使用して送信するテキストメッセージを作成する必要があります。利用されます。メソッドが戻り値として Java プリミティブと同等のクラスを使用する場合、実装は上記の Java プリミティブと同等のテキストメッセージを作成する必要があります。

開発者は、戻り型のメソッドの呼び出し中に開発者がセッションを閉じると、メソッドは完了しますが、戻り値はリモートエンドポイントに配信されないことに注意してください。送信失敗は、エンドポイントのエラー処理メソッドに戻されます。

例:

 
 @OnMessage
 public void processGreeting(String message, Session session) {
     System.out.println("Greeting received:" + message);
 }
 
 
例:
 
 @OnMessage
 public void processUpload(byte[] b, boolean last, Session session) {
     // process partial data here, which check on last to see if these is more on the way
 }
 
 
開発者は、アノテーション付きメソッドが完了した後、型 ReaderSEByteBufferSE または InputStreamSE のメッセージオブジェクトを参照し続けるべきではありません。それらは実装によってリサイクルされる可能性があるためです。
作成者:
dannycoward
  • オプション要素の概要

    オプション要素
    修飾子と型
    オプションの要素
    説明
    long
    このアノテーションを付けるメソッドが処理できるメッセージの最大サイズをバイト単位で指定します。最大値が構成されていないことを示す場合は -1 を指定します。
  • 要素の詳細

    • maxMessageSize

      long maxMessageSize
      このアノテーションを付けるメソッドが処理できるメッセージの最大サイズをバイト単位で指定します。または、最大値が設定されていないことを示す -1 を指定します。デフォルトは -1 です。この属性は、アノテーションを使用してメッセージ全体を処理する場合のみ適用され、メッセージを部分的に処理するメソッドや、ストリームまたはリーダーパラメーターを使用して受信メッセージを処理するメソッドには適用されません。受信メッセージ全体がこの制限を超えると、実装によってエラーが生成され、メッセージが大きすぎるという理由で接続が閉じられます。

      この属性を Integer#MAX_VALUE より大きい値に設定すると、JVM が Integer#MAX_VALUE より大きい文字列 (テキストメッセージの場合) または ByteBuffers (バイナリメッセージの場合) をサポートしていない限り、DeploymentException がトリガーされます。Java 22 では、このようなサポートの計画はありません。

      戻り値:
      バイト単位の最大サイズ。
      デフォルト:
      -1L