JSR303 Bean Validation initial draft released

花見日和の今日この頃、花見にもいけずにj-waveを聞きながら仕事しているちょっとキモ目のよねむらです。


さて、Bean Validationのinitial draftがリリースされました。


JSR 303Java Beanオブジェクト用のValidation機構、メタデータモデルを実現する目的で発足。
このAPIを使用することで、Java Beanのプロパティの検証条件をアノテーションで設定し、実行時に統一的な方法でそれを検証できるようになります。


draftからのexampleをいくつか。直感的に分かるかと思います。


Chapter3 Constraint declaration and validation process

@zipCodeCityCoherenceChecker
public class Address {
  @NotNull @Length(max=30)
  private String addressline1;
}

Capter4 Validation APIs

エラーメッセージの例は以下の通り。propertiesファイルからの取得も出来ます。
ValidationMessages.propertiesファイルに

myapp.creditcard.error=Your credit card number is not valid
アノテーションの指定 表示されるメッセージ
@NotNull may not be null
@Max(30) must be less than or equal to 30
@Length(mini=5, max=15,
message="Key must have between {mini} and {max} characters")
Key must have between 5 and 15 characters
@Range(min=4, max=40) must be between 4 and 40
@CreditCard(message={myapp.creditcard.error}) Your credit card number is not valid

Chapter5 Constraint metadata request APIs

public class Author {
  @NotEmpty(message="lastname must not be null")
  private string lastName;

  @Length(max=30)
  private String company;

  // 省略
}
public class Book {
  @Valid
  @NotNull
  private Author author;

  @NotEmpty(groups={"firstlevelcheck", "default"})
  @Length(max=30)
  public String getTitle() {
    return title;
  }
  // 省略
}


ドメインモデルの制約条件をアノテーションで記述するHibernate Validatorを思い出します。



draftを見て何かあったら、jsr-303-comments_at_jcp.orgにメールを出してみると良いのではないでしょうか。


こちらのコメントのつき具合からは注目の高さも感じられるけど
個人的には、何度か触れているOValがイイ!


以下のページは必読
http://c2.com/cgi/wiki?OnceAndOnlyOnce

経由で知った、Mystical Programming http://c2.com/cgi/wiki?MysticalProgramming

My vision can shape initial direction, 
and my attention to the desires of the code can affect how quickly and how well the system finds its desired shape, 
but the system is riding me much more than I am riding the system. 
-- KentBeck (in a mystical mood - don't tell my clients)

Validationは奥が深い。
http://martinfowler.com/bliki/ContextualValidation.html