SOAP-障害

処理中にエラーが発生した場合、SOAPメッセージへの応答はメッセージ本文のSOAP障害要素であり、障害はSOAPメッセージの送信者に返されます。

SOAP障害メカニズムは、事前定義されたコード、説明、障害を生成したSOAPプロセッサのアドレスなど、エラーに関する特定の情報を返します。

注意点

  • SOAPメッセージは、1つの障害ブロックのみを伝送できます。

  • 障害は、SOAPメッセージのオプション部分です。

  • HTTPバインディングの場合、成功した応答は200〜299の範囲のステータスコードにリンクされます。

  • SOAP障害は、500〜599の範囲のステータスコードにリンクされています。

障害のサブ要素

SOAP障害には次のサブ要素があります-

シニア番号 サブ要素と説明
1

<faultCode>

これは、エラーのクラスを示すために使用されるテキストコードです。事前定義された障害コードのリストについては、次の表を参照してください。

2

<faultString>

エラーを説明するテキストメッセージです。

3

<faultActor>

誰が障害を引き起こしたかを示すテキスト文字列です。SOAPメッセージがSOAPメッセージパス内の複数のノードを通過し、クライアントがエラーの原因となったノードを知る必要がある場合に役立ちます。最終的な宛先として機能しないノードには、faultActor要素が含まれている必要があります。

4

<detail>

これは、アプリケーション固有のエラーメッセージを運ぶために使用される要素です。詳細要素には、詳細エントリと呼ばれる子要素を含めることができます。

SOAP障害コード

以下に定義されているfaultCode値は、障害を説明するときにfaultcode要素で使用する必要があります。

シニア番号 エラーと説明
1

SOAP-ENV:VersionMismatch

SOAPエンベロープ要素の無効な名前空間が見つかりました。

2

SOAP-ENV:MustUnderstand

mustUnderstand属性が「1」に設定されているHeader要素の直接の子要素が理解されませんでした。

3

SOAP-ENV:Client

メッセージの形式が正しくないか、誤った情報が含まれていました。

4

SOAP-ENV:Server

サーバーに問題があったため、メッセージを続行できませんでした。

SOAP障害の例

次のコードはサンプルの障害です。クライアントがValidateCreditCardという名前のメソッドを要求しましたが、サービスはそのようなメソッドをサポートしていません。これはクライアント要求エラーを表し、サーバーは次のSOAP応答を返します-

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
   xmlns:xsd = "http://www.w3.org/1999/XMLSchema">

   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode xsi:type = "xsd:string">SOAP-ENV:Client</faultcode>
         <faultstring xsi:type = "xsd:string">
            Failed to locate method (ValidateCreditCard) in class (examplesCreditCard) at
               /usr/local/ActivePerl-5.6/lib/site_perl/5.6.0/SOAP/Lite.pm line 1555.
         </faultstring>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>