30.2. プロトコル障害


概要

リクエストの処理中にエラーが発生すると、プロトコル例外が出力されます。すべての同期リモート呼び出しは、プロトコル例外を出力する可能性があります。根本的な原因は、コンシューマーのメッセージ処理チェーンまたはサービスプロバイダーのいずれかで発生します。

JAX-WS 仕様は、一般的なプロトコル例外を定義しています。また、SOAP 固有のプロトコル例外と HTTP 固有のプロトコル例外も指定します。

プロトコル例外の種類

JAX-WS 仕様では、3 種類のプロトコル例外が定義されています。どの例外をキャッチするかは、アプリケーションで使用されるトランスポートとバインディングによって異なります。

表30.2「一般的なプロトコルの例外の種類」 3 種類のプロトコル例外とそれらがいつ出力されるかについて説明します。

表30.2 一般的なプロトコルの例外の種類
例外クラス投げられたとき

javax.xml.ws.ProtocolException

この例外は、一般的なプロトコル例外です。使用中のプロトコルに関係なくキャッチできます。SOAP バインディングまたは HTTP バインディングを使用している場合は、特定の障害タイプにキャストできます。XML バインディングを HTTP または JMS トランスポートと組み合わせて使用する場合、汎用プロトコル例外をより具体的な障害タイプにキャストすることはできません。

javax.xml.ws.soap.SOAPFaultException

この例外は、SOAP バインディングを使用するときにリモート呼び出しによって出力されます。詳細は、「SOAP プロトコル例外の使用」 を参照してください。

javax.xml.ws.http.HTTPException

この例外は、Apache CXF バインディングを使用して RESTful Web サービスを開発するときに出力されます。詳細は、パートVI「RESTful Web サービスの開発」 を参照してください。

SOAP プロトコル例外の使用

SOAPFaultException 例外は、SOAP 障害をラップします。根本の SOAP 障害は、javax.xml.soap.SOAPFault オブジェクトとして fault フィールドに保存されます。

サービス実装が、アプリケーション用に作成されたカスタム例外のいずれにも適合しない例外を出力する必要がある場合、例外作成者を使用して SOAPFaultException でフォールトをラップし、コンシューマーに出力します。例30.1「SOAP プロトコル例外の出力」 メソッドに無効なパラメーターが渡された場合に SOAPFaultException を作成して出力するためのコードを示しています。

例30.1 SOAP プロトコル例外の出力

public Quote getQuote(String ticker)
{
  ...
  if(tickers.length()<3)
  {
    SOAPFault fault = SOAPFactory.newInstance().createFault();
    fault.setFaultString("Ticker too short");
    throw new SOAPFaultException(fault);
  }
  ...
}

コンシューマーが SOAPFaultException 例外をキャッチすると、ラップされた SOAPFault 例外を調べることにより、例外の根本的な原因を取得できます。例30.2「SOAP プロトコル例外からの障害の取得」 にあるように、SOAPFault 例外は SOAPFaultException 例外の getFault() メソッドを使用して取得されます。

例30.2 SOAP プロトコル例外からの障害の取得

...
try
{
  proxy.getQuote(ticker);
}
catch (SOAPFaultException sfe)
{
  SOAPFault fault = sfe.getFault();
  ...
}
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.