10.6.6 エラー情報を取得する

要求先のサービス部品,HCSCサーバ,およびSOAPエンジンでエラーが発生した場合,エラー情報を取得し,その情報に従って対処します。

エラーの伝わり方については,マニュアル「Cosminexus サービスプラットフォーム システム構築・運用ガイド」のWebサービス(SOAP通信)実行時の障害対策のユーザ定義受付の場合に関する内容を参照してください。

<この項の構成>
(1) サービスリクエスタ側の実装例

(1) サービスリクエスタ側の実装例

エラー情報の取得方法は,SOAP通信基盤の種類によって異なります。

(a) Cosminexusが提供しているSOAP通信基盤を使用している場合
サービス部品からのSOAPFaultの取得方法
WSDLに定義されているエラー情報用の例外オブジェクトをキャッチしてSOAPFaultのエラー情報を取得します。SOAPFaultの形式は,WSDLに定義されているFault形式(サービス部品側のFault形式)です。
サービス部品からのSOAPFaultを取得するには,サービスリクエスタ側で次のように実装する必要があります。

{
  try {
    :
   // Webサービス呼び出し
    :
  } catch (xxxxxxxxxxException e) {
    :
  } catch (C4Fault e) {
    :
  }
}

HCSCサーバ内で発生した例外の取得方法
CosminexusのSOAP通信基盤で提供するC4Faultオブジェクトをキャッチしてエラー情報を取得します。
サービスリクエスタ側の処理の流れを次に示します。
  1. C4FaultまたはRuntimeExceptionでキャッチします。
  2. C4FaultからgetFaultDetails()メソッドを使用してElement[]を取り出し,各配列に対してgetChildNodes()メソッドでNodeListを取得します。
  3. NodeListからNodeを取り出し,個々のNodeに対してgetTextContent()メソッドでエラー情報を取り出します。
HCSCサーバ内で発生した例外を取得する場合の,サービスリクエスタ側の実装の例を次に示します。

{
  try {
    :
  } catch (xxxxxxxxxxException e) {
    :
  } catch (C4Fault e) {
   // C4FaultからFault情報を取得
   System.out.println("C4Fault Message          = " + e.getMessage());
   System.out.println("C4Fault FaultCode        = " + e.getFaultCode());
   System.out.println("C4Fault FaultActor       = " + e.getFaultActor());
   System.out.println("C4Fault FaultString      = " + e.getFaultString());
   // C4FaultからDetailを取得
   Element ele[] = e.getFaultDetails();
   printElement(ele);
  }
}

/**
* Print Element
*/
 private static void printElement(Element[] ele) {
  int eleNumber = ele.length;
  System.out.println("Element count = " + eleNumber);
  for (int i=0; i<eleNumber; i++) {
   // Element配列からNodeListを取得
   if (ele[i] != null) {
    printNodeList(ele[i].getChildNodes());
   } else {
    System.out.println("Element[" + i + "] = null");
   }
  }
 }

/**
* Print NodeList
*/
 private static void printNodeList(NodeList nodelist) {
  int nodelistcount = nodelist.getLength();
  for (int j=0; j<nodelistcount; j++) {
   Node node1 = nodelist.item(j);
   NodeList nodelist1 = node1.getChildNodes();
   int nodelist1len = nodelist1.getLength();

   if (nodelist1len == 0) {
    System.out.println("empty ChildNode");
   } else if(nodelist1len == 1) {
    Node node2 = node1.getFirstChild();
    if(node2 != null) {
     System.out.println("ChildNode[" + j + "] getTextContent = "
               + node2.getTextContent());
    } else {
     System.out.println("ChildNode[" + j + "] = null");
    }
   } else {
    printNodeList(nodelist1);
   }
  }
 }

getFaultDetails()メソッドを使用して取得したElement[]の構造を次に示します。

表10-13 getFaultDetails()メソッドを使用して取得したElement[]の構造

名称説明
errorMessageHCSCサーバ内で発生した例外に設定されているエラーメッセージです。
errorCodeHCSCサーバ内で発生した例外に対応するエラーコードです。
processInstanceIDビジネスプロセスのインスタンスIDの情報です。
HCSCサーバ内で発生した例外の場合は設定されていないため,null(nil属性)になります。
(b) Cosminexusが提供しているSOAP通信基盤を使用していない場合
サービス部品からのSOAPFaultの取得方法
WSDLに定義されているエラー情報用の例外オブジェクトをキャッチしてSOAPFaultのエラー情報を取得します。SOAPFaultの形式は,WSDLに定義されているFault形式(サービス部品側のFault形式)です。
HCSCサーバ内で発生した例外の取得方法
取得する方法は,サービスリクエスタ側で実装しているSOAPエンジンに依存します。