Hitachi

Cosminexus V11 BPM/ESB基盤 サービスプラットフォーム 開発ガイド 基本開発編


9.7.6 エラー情報を取得する

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

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

〈この項の構成〉

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

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

(a) サービスプラットフォームが提供しているSOAP通信基盤を使用している場合

サービス部品からのSOAP Faultの取得方法

WSDLに定義されているエラー情報用の例外オブジェクトをキャッチしてSOAP Faultのエラー情報を取得します。SOAP Faultの形式は,WSDLに定義されているFault形式(サービス部品側のFault形式)です。

サービス部品からのSOAP Faultを取得するには,サービスリクエスタ側で次のように実装する必要があります。

{
  try {
    :
   // Webサービス呼び出し
    :
  } catch (xxxxxxxxxxException e) {
    :
  } catch (C4Fault e) {
    :
  }
}
HCSCサーバ内で発生した例外の取得方法

サービスプラットフォームの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[]の構造を次に示します。

表9‒19 getFaultDetails()メソッドを使用して取得したElement[]の構造

名称

説明

errorMessage

HCSCサーバ内で発生した例外に設定されているエラーメッセージです。

errorCode

HCSCサーバ内で発生した例外に対応するエラーコードです。

processInstanceID

ビジネスプロセスのインスタンスIDの情報です。

HCSCサーバ内で発生した例外の場合は設定されていないため,null(nil属性)になります。

(b) サービスプラットフォームが提供しているSOAP通信基盤を使用していない場合

サービス部品からのSOAP Faultの取得方法

WSDLに定義されているエラー情報用の例外オブジェクトをキャッチしてSOAP Faultのエラー情報を取得します。SOAP Faultの形式は,WSDLに定義されているFault形式(サービス部品側のFault形式)です。

HCSCサーバ内で発生した例外の取得方法

取得する方法は,サービスリクエスタ側で実装しているSOAPエンジンに依存します。