Apcoordinator ユーザーズガイド
目次 前ページ次ページ

第2部 Apcoordinatorコアの機能> 第10章 XMLデータ仕様記述> 10.3 XMLデータ仕様記述の実行

10.3.3 エラー処理

■例外クラスからの値の取得

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="iso-2022-jp"?>
<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以下でなければなりません"というメッセージが生成されます。

目次 前ページ次ページ

All Rights Reserved, Copyright © 富士通株式会社 2000-2005