例外クラスからの値の取得
XMLデータ仕様記述で項目のチェックを行いエラーとした場合は、例外ESpecResultExceptionを発生させることでアプリケーションに通知します。エラーに関連する情報は、XMLデータ仕様記述上に指定し、アプリケーションで例外クラスから情報を取得します。
XMLデータ仕様記述
<verify property="prop1" op="GE" operand="#0" error="#ERR01" info="#prop1" /> <verify property="prop2" op="GE" operand="#0" error="#ERR02" info="#prop2" /> <verify property="prop3" op="LE" operand="#10" error="#ERR03" info="#prop3,#10" />
ビジネスクラスのメソッド
try { validator.validate("checkValue", bean); } catch(ESpecResultException e) { ESpecResultException[] errors = new ESpecResultException[1]; Vector errVec = e.getErrorInfo(); // (1) if(errVec == null) { errors[0] = e; // (2) } else { errors = (ESpecResultException[])errVec.toArray(errors); // (3) } for(int i = 0; i < errors.length; i++) { String status = errors[i].getStatusText(); // (4) Object info = errors[i].getInfo(); // (5) ... } ... } catch(Exception e) { throw e; }
(1) 例外クラスのgetErrorInfo()メソッドは、検出したエラーのリストを持っています。データ仕様でerrorアトリビュートを利用しない場合は必ずnullとなります。例では、処理の共通化のために、ESpecResultExceptionの配列に変換しています。
(2) getErrorInfo()がnullの場合はcatchしたESpecResultExceptionオブジェクト自体がチェック結果のエラーを示します。
(3) getErrorInfo()がnullでない場合は、ESpecResultExceptionの一覧を持つjava.util.Vector形式になっています。例ではtoArrayメソッドで配列に変換しています。
(4) getStatusText()メソッドは、errorまたはexceptionアトリビュートで指定した文字列を返します。この例では"ERR01"が取得できます。
(5) getInfo()メソッドは、infoアトリビュートで記述した内容を返します。XMLデータ仕様記述の例の1行目でエラーになった場合には、文字列"prop1"が取得できます。3行目では、文字列"prop3"と"10"の配列が取得できます。
リソースファイルを利用したメッセージの編集
リソースファイルの機能と連携することにより、エラーメッセージを編集することができます。
XMLデータ仕様記述
<verify property="prop1" op="GE" operand="#0" error="#ERR01" info="#prop1" /> <verify property="prop2" op="GE" operand="#0" error="#ERR02" info="#prop2" /> <verify property="prop3" op="LE" operand="#10" error="#ERR03" info="#prop3,#10" />
リソースファイル記述
<?xml version="1.0" encoding="Shift_JIS"?> <ujiResource xmlns=http://interstage.fujitsu.com/schemas/uji/ujiResource xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="http://interstage.fujitsu.com/schemas/uji/ujiResource http://interstage.fujitsu.com/schemas/uji/ujiresource.xsd"> <config> <version>5.1</version> </config> <text id="#ERR01">項目'{0}'は0以上に設定してください</text> <text id="#ERR02">項目'{0}'の指定が誤っています</text> <text id="#ERR03">項目'{0}'は{1}以下でなければなりません</text> </ujiResource>
ビジネスクラスのメソッド
try { validator.validate("checkValue", bean); } catch(ESpecResultException e) { ESpecResultException[] errors = new ESpecResultException[1]; Vector errVec = e.getErrorInfo(); if(errVec == null) { errors[0] = e; } else { errors = (ESpecResultException[])errVec.toArray(errors); } for(int i = 0; i < errors.length; i++) { String message = UjiResource.getMessage(context, errors[i]); ... } ... } catch(Exception e) { throw e; }
getMessage
UjiResourceクラスのgetMessageメソッドで、リソースファイルの文字列とESpecResultExceptionからメッセージを作成します。errorまたはexceptionの値がリソースのidに、infoはメッセージ編集に利用されます。この例では、"項目'prop1'は0以上に設定してください"、"項目'prop3'は10以下でなければなりません"というメッセージが生成されます。