10

javadoc によると:

指定された @WebMethod に入力メッセージのみがあり、出力がないことを示します。通常、一方向メソッドは、実際のビジネス メソッドを実行する前に、呼び出し元のアプリケーションに制御のスレッドを返します。181 プロセッサは、@Oneway とマークされた操作が戻り値またはホルダー パラメータを持っている場合、またはチェック例外を宣言している場合、エラーを報告する必要があります。

その場合、例外処理 (チェックまたはチェック解除) が必要な場合、この注釈は推奨されないと仮定できますか? ビジネス ロジックからは何も返されませんが、SOAP メソッドの呼び出しに固有のタイムアウトやその他のさまざまなエラーを認識することに関心があります。この注釈は、HTTP リターン コードまたはスローされた例外にアクセスできないことを意味しますか?

質問: これを自分でスレッド化して真の非同期呼び出しを取得し、@Oneway注釈を削除した方がよいでしょうか?

4

1 に答える 1

17

@Oneway応答も例外も、メソッドをエスケープするものは何もないことを意味します。これには 2 つの理由があります。

  • 技術的には、例外は単なる別のタイプの応答 (SOAP 障害) であるため、一方向のメソッド (何も返すことができない) から返すことはできません。

  • 多くの場合、一方向のメソッドは Web サービス フレームワークによって非同期的に実行されます ( がそうしていることは知っています)。フレームワークはすぐに返されるため、一方向メソッドの処理が開始される前であっても、顧客は空の応答を受け取った可能性があります。例外がスローされると、元の HTTP 接続は失われています。

したがって、例外またはタイムアウトを伝播する場合は、空の応答*といくつかのエラーを明示的に宣言した標準 SOAP メソッドを使用します。しばらくしてから呼び出しをタイムアウトする場合は、別のスレッド プールと、一定時間応答を待機するブロッキングが必要です。

*空の SOAP 応答 (SOAP エンベロープでラップされた、コンテンツのないルート タグのみの XML ドキュメント) と空の HTTP 応答 (何も返されなかった) を混同しないでください。SOAP は HTTP に限定されないことに注意してください。たとえば、JMS または電子メール トランスポートを使用する場合、通常の双方向機能の空の応答 (またはエラー) は、サーバーからクライアントに送信される別のメッセージです。一方向の方法は、ただ 1 つの最も正確なメッセージであり、何も送り返されません。

于 2012-10-24T21:15:14.160 に答える