The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 303
JSR 303というのが策定中らしい。
これは Javaオブジェクトのプロパティ値のバリデーションに関する仕様で、アノテーションを使って値の取るべき範囲や条件を設定し、標準化された方法でバリデーションを実行する。JavaEE アプリだけでなく一般的な Swing アプリ等でも使える、というものらしい。
既にリファレンス実装として Hibernate Validator 4 というライブラリが作成されている。これはHibernate O/Rマッパから独立したコンポーネントでO/Rマッパのライブラリが無くても利用できる。
試しに使ってみた。
ここからhibernate-validator 4.0.0bをダウンロードしてjarを全部クラスパスにぶち込む。ただ、 stax や jaxb は XMLコンフィグを書かないなら要らないかも。JSR303にはXMLで書かれたコンフィギュレーションを読み込む仕様があり、そのために必要なjarだと思われる。
import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.constraints.NotNull; public class Hoge { /** * @param args */ public static void main(String[] args) { Hoge hoge = new Hoge(); Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); Set<ConstraintViolation<Hoge>> results = validator.validate(hoge); System.out.println(results.size()); // 1 for (ConstraintViolation<Hoge> c: results) { // fuga of Hoge may not be null と出力 System.out.println(c.getPropertyPath() + " of " c.getRootBean() + " " + c.getMessage()); // null と出力 System.out.println(c.getInvalidValue()); } hoge.fuga = "ああああああああ"; Set<ConstraintViolation<Hoge>> results2 = validator.validate(hoge); System.out.println(results2.size()); // 0 } @NotNull private String fuga; public String toString() { return "Hoge"; } }
基本的な使い方は、検査したい JavaBean の getter または field にアノテーションをつけ、Validator を取得して validate メソッドに検査するオブジェクトを渡すだけ。エラーは戻り値のSetに格納され、エラーがなければ戻り値のSetオブジェクトは空のSetになる。
とても分かりやすい仕様で良さげ。