9.3.8 エラー情報を取得する
要求先のサービス部品,HCSCサーバ,およびJAX-WSエンジンでエラーが発生した場合,エラー情報を取得し,その情報に従って対処します。
JAX-WSエンジンを使用して通信するサービスリクエスタの場合,情報がラップされた例外(SOAP1.1の場合はCSCMsgServerFaultException_Exception,SOAP1.2の場合はCSCMsgServerFault12Exception_Exception)※がキャッチされます。そのため,getFaultInfo()メソッドを使用してフォルト情報の格納クラスを取得する必要があります。
- 注※
-
cjwsimportコマンド実行時に,"_"(アンダーバー)は除去され,フォルト情報の格納クラス(FaultBean)との名前重複を回避するために接尾辞"_Exception"が付与された例外名となります。
(1) サービスリクエスタ側の実装例
getFaultInfo()メソッドを使用して,フォルト情報の格納クラスを取得する場合の,サービスリクエスタ側の実装の例を次に示します。
-
SOAP1.1の場合
/** * Sample Program */ { try { : // Webサービス呼び出し : } catch (CSCMsgServerFaultException_Exception e) { // CSC内部で例外またはユーザ定義例外が発生 // CSCで定義している例外オブジェクトを取得 CSCMsgServerFaultException faultInfo = e.getFaultInfo(); // 例外情報を出力 System.err.println("errorCode=" + faultInfo.getErrorCode()); System.err.println("errorMessage=" + faultInfo.getErrorMessage()); System.err.println("processInstanceID=" + faultInfo.getProcessInstanceID()); System.err.println("faultCode=" + faultInfo.getCscmsgFaultCode()); System.err.println("faultActor=" + faultInfo.getCscmsgFaultActor()); System.err.println("faultString=" + faultInfo.getCscmsgFaultString()); System.err.println("faultName=" + faultInfo.getFaultName()); byte[] faultDetail = faultInfo.getCscmsgFaultDetail(); try { if(faultDetail != null) { System.err.println("faultDetail=" + new String(faultDetail, "UTF-8")); } } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } } catch (SOAPFaultException e) { : } }
-
SOAP1.2の場合
/** * Sample Program */ { try { : // Webサービス呼び出し : } catch (CSCMsgServerFault12Exception_Exception e) { // CSC内部で例外またはユーザ定義例外が発生 // CSCで定義しているフォルト情報のオブジェクトを取得 CSCMsgServerFault12Exception faultInfo = e.getFaultInfo(); // 例外情報を出力 System.err.println("errorCode=" + faultInfo.getErrorCode()); System.err.println("errorMessage=" + faultInfo.getErrorMessage()); System.err.println("processInstanceID=" + faultInfo.getProcessInstanceID()); CscmsgFaultCode code = faultInfo.getCscmsgFaultCode(); if (code == null) { System.err.println("Code=" + code); } else { List<String> values = code.getValues(); for(String value : values) { System.err.println("Code Value=" + value); } } CscmsgFaultReason reason = faultInfo.getCscmsgFaultReason(); if (reason == null) { System.err.println("Reason=" + reason); } else { List<CscmsgFaultReasonText> texts = reason.getCscmsgFaultReasonText(); Locale locale = Locale.getDefault(); for(CscmsgFaultReasonText text : texts) { if(locale.equals(text.getLocale())) { System.err.println("Reason=" + text.getText()); } } } System.err.println("Role=" + faultInfo.getCscmsgFaultRole()); System.err.println("Node=" + faultInfo.getCscmsgFaultNode()); System.err.println("faultName=" + faultInfo.getFaultName()); byte[] faultDetail = faultInfo.getCscmsgFaultDetail(); try { if(faultDetail != null) { System.err.println("faultDetail=" + new String(faultDetail, "UTF-8")); } } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } } catch (SOAPFaultException e) { : } }
SOAPエンベロープのdetail情報には,Webサービスからの例外(SOAP Fault)の場合には,サービス(SOAP Fault発行元)が返してきたSOAP Faultの情報とHCSC-Messagingが設定したエラーメッセージ,およびエラーコードが含まれます。
HCSC-Messagingで検出した例外(Exception)の場合や,Webサービス以外のサービスからの例外(Exception)の場合には,HCSC-Messagingで検出したエラーのエラーコードとエラー情報が含まれます。
各メソッドについて,次に説明します。
(a) 例外情報保持クラスが持つメソッド
- ●getErrorMessage(SOAP1.1/SOAP1.2共通)
-
- 説明
-
エラーメッセージを取得します。
次の例外の内容を取得する場合に使用します。
-
HCSC-Messaging内で検知した例外
-
サービス部品やビジネスプロセスからのフォルト
-
- 形式
-
public java.lang.String getErrorMessage()
- ●getErrorCode(SOAP1.1/SOAP1.2共通)
-
- 説明
-
エラーコードを取得します。
次の例外の内容に対するエラーコードを取得する場合に使用します。
-
HCSC-Messaging内で検知した例外
-
サービス部品やビジネスプロセスからのフォルト
-
- 形式
-
public java.lang.String getErrorCode()
- ●getProcessInstanceID(SOAP1.1/SOAP1.2共通)
-
- 説明
-
ビジネスプロセスインスタンスIDを取得します。
- 形式
-
public String getProcessInstanceID()
- ●getCscmsgFaultCode(SOAP1.1用)
-
- 説明
-
SOAP1.1による通信の場合に,サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのFaultCode情報を取得します。
- 形式
-
public java.lang.String getCscmsgFaultCode()
- ●getCscmsgFaultString(SOAP1.1用)
-
- 説明
-
SOAP1.1による通信の場合に,サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのFaultString情報を取得します。
- 形式
-
public java.lang.String getCscmsgFaultString()
- ●getCscmsgFaultActor(SOAP1.1用)
-
- 説明
-
SOAP1.1による通信の場合に,サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのFaultActor情報を取得します。
- 形式
-
public java.lang.String getCscmsgFaultActor()
- ●getCscmsgFaultCode(SOAP1.2用)
-
- 説明
-
SOAP1.2による通信の場合に,サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのFaultCodeまたはCode情報を保持するCscmsgFaultCodeクラスを取得します。
- 形式
-
public jp.co.hitachi.soft.csc.msg.message.reception.ejb.CscmsgFaultCode getCscmsgFaultCode()
- ●getCscmsgFaultReason(SOAP1.2用)
-
- 説明
-
SOAP1.2による通信の場合に,サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのReason情報を保持するCscmsgFaultReasonクラスを取得します。
- 形式
-
public jp.co.hitachi.soft.csc.msg.message.reception.ejb.CscmsgFaultReason getCscmsgFaultReason()
- ●getCscmsgFaultRole(SOAP1.2用)
-
- 説明
-
SOAP1.2による通信の場合に,サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのRole情報を取得します。
- 形式
-
public java.lang.String getCscmsgFaultRole()
- ●getCscmsgFaultNode(SOAP1.2用)
-
- 説明
-
SOAP1.2による通信の場合に,サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのNode情報を取得します。
- 形式
-
public java.lang.String getCscmsgFaultNode()
- ●getCscmsgFaultDetail(SOAP1.1/SOAP1.2共通)
-
- 説明
-
サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのDetail情報を取得します。
サービス部品が設定したDetail情報をバイト配列でサービスリクエスタに引き渡します。したがって,取得したバイト配列を文字列に変換する必要があります。
なお,サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのDetail情報がない場合は,0バイトのバイト配列(SOAPメッセージの空タグ)で応答します。
- 形式
-
public byte[] getCscmsgFaultDetail()
- ●getFaultName(SOAP1.1/SOAP1.2共通)
-
- 説明
-
サービス部品(Webサービス)またはビジネスプロセスからの例外名を取得します。
- 形式
-
public String getFaultName()
(b) CscmsgFaultCodeクラスが持つメソッド
- ●getValues(SOAP1.2用)
-
- 説明
-
SOAP1.2による通信の場合に,サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのFaultCodeまたはCode情報が持つValue情報を取得します。
- 形式
-
public java.util.List<java.lang.String> getValues()
(c) CscmsgFaultReasonクラスが持つメソッド
- ●getTexts(SOAP1.2用)
-
- 説明
-
SOAP1.2による通信の場合に,サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのReason情報が持つText情報を取得します。
- 形式
-
public java.util.List<java.lang.String> getTexts()
(2) エラー情報(SOAP Fault)の形式
エラー情報(SOAP Fault)の形式を次の表に示します。
要素 |
名称 |
内容 |
|
---|---|---|---|
SOAP1.1 |
SOAP1.2 |
||
faultcode |
Code |
Faultコード |
JAX-WSエンジンに依存する値です。 違反コードを出力します。 |
faultstring |
− |
Fault文字列 |
JAX-WSエンジンに依存する値です。 エラーメッセージを出力します。 |
− |
Reason |
Fault理由 |
JAX-WSエンジンに依存する値です。 エラーメッセージを出力します。 |
faultactor |
Role |
Fault生成者 |
JAX-WSエンジンに依存する値です。値はありません。 |
− |
Node |
Faultノード |
JAX-WSエンジンに依存する値です。値はありません。 |
detail※1 |
Detail※2 |
Fault詳細 |
wsdl:faultに対応する内容です。 |
フィールド名 |
説明 |
|
---|---|---|
サービス部品,ビジネスプロセス,サービスアダプタ,または連携するHCSCサーバからのエラー(フォルト) |
HCSCサーバで検知したエラー(例外) |
|
errorMessage |
次に示すエラーの内容です。
|
|
errorCode |
次に示す例外の内容に対応するエラーコードです。
|
|
processInstanceID |
ビジネスプロセスのインスタンスIDの情報です。 ビジネスプロセスでエラーが発生した場合に値が設定されます。 |
|
cscmsgFaultCode |
サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのFaultCode情報です。 |
− |
cscmsgFaultString |
サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのFaultString情報です。 |
− |
cscmsgFaultActor |
サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのFaultActor情報です。 |
− |
cscmsgFaultDetail |
サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのDetail情報です。 |
− |
faultName |
サービス部品(WebサービスまたはSessionBean)またはビジネスプロセスからのフォルト名(例外名)情報です。 次の場合に値が設定されます。
SOAP Fault動作定義ファイルにtargetNamespaceのURIを定義したWebサービスからのSOAP Faultの場合,値は設定されません。SOAP Fault動作定義ファイルについては,マニュアル「サービスプラットフォーム リファレンス」の「6.6.1 SOAP Fault動作定義ファイル」を参照してください。 |
− |
フィールド名 |
説明 |
|
---|---|---|
サービス部品,ビジネスプロセス,サービスアダプタ,または連携するHCSCサーバからのエラー(フォルト) |
HCSCサーバで検知したエラー(例外) |
|
errorMessage |
次に示すエラーの内容です。
|
|
errorCode |
次に示す例外の内容に対応するエラーコードです。
|
|
processInstanceID |
ビジネスプロセスのインスタンスIDの情報です。 ビジネスプロセスでエラーが発生した場合に値が設定されます。 |
|
cscmsgFaultCode |
サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのFaultCode情報です。 |
− |
cscmsgFaultReason |
サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのFaultReason情報です。 |
− |
cscmsgFaultRole |
サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのRole情報です。 |
− |
cscmsgFaultDetail |
サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのDetail情報です。 |
− |
faultName |
サービス部品(WebサービスまたはSessionBean)またはビジネスプロセスからのフォルト名(例外名)情報です。 次の場合に値が設定されます。
SOAP Fault動作定義ファイルにtargetNamespaceのURIを定義したWebサービスからのSOAP Faultの場合,値は設定されません。SOAP Fault動作定義ファイルについては,マニュアル「サービスプラットフォーム リファレンス」の「6.6.1 SOAP Fault動作定義ファイル」を参照してください。 |
− |