10.3.8 エラー情報を取得する
要求先のサービス部品,HCSCサーバ,およびJAX-WSエンジンでエラーが発生した場合,エラー情報を取得し,その情報に従って対処します。
JAX-WSエンジンを使用して通信するサービスリクエスタの場合,情報がラップされた例外(SOAP1.1の場合はCSCMsgServerFaultException_Exception,SOAP1.2の場合はCSCMsgServerFault12Exception_Exception)※がキャッチされます。そのため,getFaultInfo()メソッドを使用してフォルト情報の格納クラスを取得する必要があります。
- 注※
- cjwsimportコマンド実行時に,"_"(アンダースコア)は除去され,フォルト情報の格納クラス(FaultBean)との名前重複を回避するために接尾辞"_Exception"が付与された例外名となります。
- <この項の構成>
- (1) サービスリクエスタ側の実装例
- (2) エラー情報(SOAP Fault)の形式
(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)の形式を次の表に示します。
表10-9 エラー情報(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に対応する内容です。 |
- (凡例) -:該当しません。
- 注※1
- 要素「detail」はエラー情報の詳細です。表10-10に示す構造体で格納されます。
- 注※2
- 要素「Detail」はエラー情報の詳細です。表10-11に示す構造体で格納されます。
表10-10 エラー情報(SOAP Fault)の詳細(SOAP1.1)
フィールド名 | 説明 |
---|
サービス部品,ビジネスプロセス,カスタムアダプタ,または連携するHCSCサーバからのエラー(フォルト) | HCSCサーバで検知したエラー(例外) |
---|
errorMessage | 次に示すエラーの内容です。
- HCSCサーバ内で検知したエラー
- サービス部品,ビジネスプロセス,およびカスタムアダプタからのエラー
|
errorCode | 次に示す例外の内容に対応するエラーコードです。
- HCSCサーバ内で検知したエラー
- サービス部品,ビジネスプロセス,およびカスタムアダプタからのエラー
|
processInstanceID | ビジネスプロセスのインスタンスIDの情報です。 ビジネスプロセスでエラーが発生した場合に値が設定されます。 |
cscmsgFaultCode | サービス部品(Webサービス),ビジネスプロセス,またはカスタムアダプタからのFaultCode情報です。 | - |
cscmsgFaultString | サービス部品(Webサービス),ビジネスプロセス,またはカスタムアダプタからのFaultString情報です。 | - |
cscmsgFaultActor | サービス部品(Webサービス),ビジネスプロセス,またはカスタムアダプタからのFaultActor情報です。 | - |
cscmsgFaultDetail | サービス部品(Webサービス),ビジネスプロセス,またはカスタムアダプタからのDetail情報です。 | - |
faultName | サービス部品(WebサービスまたはSessionBean)またはビジネスプロセスからのフォルト名(例外名)情報です。 次の場合に値が設定されます。
- サービス部品(WebサービスまたはSessionBean)からのユーザ定義例外のSOAP Faultの場合
- ビジネスプロセスからのフォルトの場合
SOAP Fault動作定義ファイルにtargetNamespaceのURIを定義したWebサービスからのSOAP Faultの場合,値は設定されません。SOAP Fault動作定義ファイルについては,マニュアル「Cosminexus サービスプラットフォーム リファレンス」の「SOAP Fault動作定義ファイル」を参照してください。 | - |
- (凡例) -:該当しません。
表10-11 エラー情報(SOAP Fault)の詳細(SOAP1.2)
フィールド名 | 説明 |
---|
サービス部品,ビジネスプロセス,カスタムアダプタ,または連携するHCSCサーバからのエラー(フォルト) | HCSCサーバで検知したエラー(例外) |
---|
errorMessage | 次に示すエラーの内容です。
- HCSCサーバ内で検知したエラー
- サービス部品,ビジネスプロセス,およびカスタムアダプタからのエラー
|
errorCode | 次に示す例外の内容に対応するエラーコードです。
- HCSCサーバ内で検知したエラー
- サービス部品,ビジネスプロセス,およびカスタムアダプタからのエラー
|
processInstanceID | ビジネスプロセスのインスタンスIDの情報です。 ビジネスプロセスでエラーが発生した場合に値が設定されます。 |
cscmsgFaultCode | サービス部品(Webサービス),ビジネスプロセス,またはカスタムアダプタからのFaultCode情報です。 | - |
cscmsgFaultReason | サービス部品(Webサービス),ビジネスプロセス,またはカスタムアダプタからのFaultReason情報です。 | - |
cscmsgFaultRole | サービス部品(Webサービス),ビジネスプロセス,またはカスタムアダプタからのRole情報です。 | - |
cscmsgFaultDetail | サービス部品(Webサービス),ビジネスプロセス,またはカスタムアダプタからのDetail情報です。 | - |
faultName | サービス部品(WebサービスまたはSessionBean)またはビジネスプロセスからのフォルト名(例外名)情報です。 次の場合に値が設定されます。
- サービス部品(WebサービスまたはSessionBean)からのユーザ定義例外のSOAP Faultの場合
- ビジネスプロセスからのフォルトの場合
SOAP Fault動作定義ファイルにtargetNamespaceのURIを定義したWebサービスからのSOAP Faultの場合,値は設定されません。SOAP Fault動作定義ファイルについては,マニュアル「Cosminexus サービスプラットフォーム リファレンス」の「SOAP Fault動作定義ファイル」を参照してください。 | - |
- (凡例) -:該当しません。