ビジネスクラスからの実行
XMLデータ仕様記述をインタプリタ形式で実行する場合は、標準的には以下のように記述します。
import com.fujitsu.uji.DispatchContext;
import com.fujitsu.uji.xscript.ESpecValidator;
import com.fujitsu.uji.xscript.ESpecResultException;
import com.fujitsu.uji.xscript.ESpecException;
....
public void processOrder(DispatchContext context, OrderBean bean) throws java.lang.Exception {
ESpecValidator validator =
ESpecValidator.getInstance(getClass().getClassLoader()); // (1)
validator.setInfLoader(context.getApplicationProfile().getInfLoader()); // (2)
try {
validator.setXml("checkPrice.xml"); // (3)
validator.validate("checkValue", bean); // (4)
} catch(ESpecResultException e) {
... // (5)
} catch(Exception e) {
throw e; // (6)
}
...
}(1) ESpecValidatorクラスのインスタンスを作成します。利用者定義メソッド呼び出しのために、ClassLoaderを引数にします。
(2) InfLoaderを指定することで、XMLファイルの読み込み場所を設定ファイルフォルダにします。設定ファイルフォルダは、コマンドマップ、リモートマップなどApcoordinatorの定義ファイルを置くフォルダです。例えば、Webアプリケーションの場合はWEB-INFフォルダです。
(3) setXmlメソッドは、XMLデータ仕様記述のXMLファイルを読み込みます。
(4) validateメソッドによって、XMLデータ仕様記述を実行します。代入先に別のデータBeanを利用する場合には、データBeanを2個指定する形式のメソッドを利用します。
(5) 項目チェックでエラーになった場合は、ESpecResultExceptionとなります。一般的には、画面にエラー情報を出して再入力の処理になります。
(6) その他の例外の場合は、XMLデータ仕様の記述や実行環境を確認してください。
継承形式の利用者定義メソッドを利用する場合は、ESpecValidator.getInstance(...)の代わりにESpecValidatorを継承して利用者定義メソッドを追加したクラスのコンストラクタを利用します。
(1)で指定するClassLoaderは、static形式の利用者定義メソッドのクラスをロードする場合に使用します。static形式の利用者定義メソッドを使用しない場合には不要です。また、static形式の利用者定義メソッドを使用しても、実行形態(環境)によっては指定不要(標準のClassLoaderで動作可能)の場合もありますが、利用者定義メソッドでエラーになる場合には必ず指定してください。
XMLファイルをフルパスやInputStreamで指定する場合には、(2)でInfLoaderを指定する必要はありません。この場合は、(3)のsetXmlメソッドの代わりにコンストラクタでXMLファイルを指定することができます。
コマンドスクリプティングからの実行
コマンドスクリプティングからXMLデータ仕様記述を呼び出すことができます。
<?xml version="1.0" encoding="Shift_JIS"?>
<commandMap
xmlns=http://interstage.fujitsu.com/schemas/uji/commandMap
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://interstage.fujitsu.com/schemas/uji/commandMap
http://interstage.fujitsu.com/schemas/uji/commandmap.xsd">
...
<entry bean="sample.OrderBean" verb="process">
<specValidate file="checkPrice.xml" name="checkValue" />
<specSection>
<term property="val1" op="ADD" operand="val2" target="result"/>
</specSection>
...
<catch exception="ESpecResultException">
...
</catch>
</entry>
</commandMap>コマンドスクリプティングのspecValidateタグは、XMLデータ仕様記述を実行します。
コマンドスクリプティングのspecSectionタグを利用して、コマンドスクリプティング中に仕様セクションを直接記述することができます。
コマンドスクリプティングの概要については“第10章 コマンドスクリプティング”、詳細については“定義ファイルリファレンス”を参照してください。